[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "CUBE__BPSTooHigh", "type": "error" }, { "inputs": [], "name": "CUBE__ExceedsContractBalance", "type": "error" }, { "inputs": [], "name": "CUBE__ExcessiveFeePayout", "type": "error" }, { "inputs": [], "name": "CUBE__FeeNotEnough", "type": "error" }, { "inputs": [], "name": "CUBE__IsNotSigner", "type": "error" }, { "inputs": [], "name": "CUBE__MintingIsNotActive", "type": "error" }, { "inputs": [], "name": "CUBE__NonceAlreadyUsed", "type": "error" }, { "inputs": [], "name": "CUBE__QuestNotActive", "type": "error" }, { "inputs": [], "name": "CUBE__SignatureAndCubesInputMismatch", "type": "error" }, { "inputs": [], "name": "CUBE__TransferFailed", "type": "error" }, { "inputs": [], "name": "CUBE__WithdrawFailed", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "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": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "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": "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": "amount", "type": "uint256" } ], "name": "ContractWithdrawal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "questId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "claimer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "issueNumber", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "walletProvider", "type": "string" }, { "indexed": false, "internalType": "string", "name": "embedOrigin", "type": "string" } ], "name": "CubeClaim", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "cubeTokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "txHash", "type": "string" }, { "indexed": false, "internalType": "string", "name": "networkChainId", "type": "string" } ], "name": "CubeTransaction", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "FeePayout", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "isActive", "type": "bool" } ], "name": "MintingSwitch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "questId", "type": "uint256" } ], "name": "QuestDisabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "questId", "type": "uint256" }, { "indexed": false, "internalType": "enum CUBE.QuestType", "name": "questType", "type": "uint8" }, { "indexed": false, "internalType": "enum CUBE.Difficulty", "name": "difficulty", "type": "uint8" }, { "indexed": false, "internalType": "string", "name": "title", "type": "string" }, { "indexed": false, "internalType": "string[]", "name": "tags", "type": "string[]" }, { "indexed": false, "internalType": "string[]", "name": "communities", "type": "string[]" } ], "name": "QuestMetadata", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "cubeTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "enum ITokenType.TokenType", "name": "tokenType", "type": "uint8" } ], "name": "TokenReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SIGNER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cubeVersion", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_tokenName", "type": "string" }, { "internalType": "string", "name": "_tokenSymbol", "type": "string" }, { "internalType": "string", "name": "_signingDomain", "type": "string" }, { "internalType": "string", "name": "_signatureVersion", "type": "string" }, { "internalType": "address", "name": "_admin", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "questId", "type": "uint256" }, { "internalType": "string[]", "name": "communities", "type": "string[]" }, { "internalType": "string", "name": "title", "type": "string" }, { "internalType": "enum CUBE.Difficulty", "name": "difficulty", "type": "uint8" }, { "internalType": "enum CUBE.QuestType", "name": "questType", "type": "uint8" }, { "internalType": "string[]", "name": "tags", "type": "string[]" } ], "name": "initializeQuest", "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": "uint256", "name": "questId", "type": "uint256" } ], "name": "isQuestActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "questId", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "toAddress", "type": "address" }, { "internalType": "string", "name": "walletProvider", "type": "string" }, { "internalType": "string", "name": "tokenURI", "type": "string" }, { "internalType": "string", "name": "embedOrigin", "type": "string" }, { "components": [ { "internalType": "string", "name": "txHash", "type": "string" }, { "internalType": "string", "name": "networkChainId", "type": "string" } ], "internalType": "struct CUBE.TransactionData[]", "name": "transactions", "type": "tuple[]" }, { "components": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint16", "name": "BPS", "type": "uint16" } ], "internalType": "struct CUBE.FeeRecipient[]", "name": "recipients", "type": "tuple[]" }, { "components": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "enum ITokenType.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "rakeBps", "type": "uint256" }, { "internalType": "address", "name": "factoryAddress", "type": "address" } ], "internalType": "struct CUBE.RewardData", "name": "reward", "type": "tuple" } ], "internalType": "struct CUBE.CubeData", "name": "cubeData", "type": "tuple" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "mintCube", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "questId", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "toAddress", "type": "address" }, { "internalType": "string", "name": "walletProvider", "type": "string" }, { "internalType": "string", "name": "tokenURI", "type": "string" }, { "internalType": "string", "name": "embedOrigin", "type": "string" }, { "components": [ { "internalType": "string", "name": "txHash", "type": "string" }, { "internalType": "string", "name": "networkChainId", "type": "string" } ], "internalType": "struct CUBE.TransactionData[]", "name": "transactions", "type": "tuple[]" }, { "components": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint16", "name": "BPS", "type": "uint16" } ], "internalType": "struct CUBE.FeeRecipient[]", "name": "recipients", "type": "tuple[]" }, { "components": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "enum ITokenType.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "rakeBps", "type": "uint256" }, { "internalType": "address", "name": "factoryAddress", "type": "address" } ], "internalType": "struct CUBE.RewardData", "name": "reward", "type": "tuple" } ], "internalType": "struct CUBE.CubeData[]", "name": "cubeData", "type": "tuple[]" }, { "internalType": "bytes[]", "name": "signatures", "type": "bytes[]" } ], "name": "mintCubes", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "s_isMintingActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "bool", "name": "_isMintingActive", "type": "bool" } ], "name": "setIsMintingActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "_tokenURI", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "questId", "type": "uint256" } ], "name": "unpublishQuest", "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": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161463162000104600039600081816117ac015281816117d501526119a701526146316000f3fe6080604052600436106102345760003560e01c806386954d5b11610138578063ad170ff7116100b0578063d123b4d81161007f578063e985e9c511610064578063e985e9c51461070a578063f72c0d8b14610772578063f907497c146107a657600080fd5b8063d123b4d8146106d7578063d547741f146106ea57600080fd5b8063ad170ff71461062e578063ad3cb1cc1461064e578063b88d4fde14610697578063c87b56dd146106b757600080fd5b8063a1ebf35d11610107578063a22cb465116100ec578063a22cb465146105d4578063a35d3d86146105f4578063aab416011461061457600080fd5b8063a1ebf35d1461058b578063a217fddf146105bf57600080fd5b806386954d5b146104ce57806389e7217e146104fe57806391d148541461051157806395d89b411461057657600080fd5b80632f2ff15d116101cb5780634f1ef2861161019a5780636352211e1161017f5780636352211e1461046657806370a082311461048657806384b0196e146104a657600080fd5b80634f1ef2861461043e57806352d1902d1461045157600080fd5b80632f2ff15d146103c957806336568abe146103e95780633ccfd60b1461040957806342842e0e1461041e57600080fd5b8063095ea7b311610207578063095ea7b31461030a57806323b872dd1461032c578063248a9ca31461034c5780632e640024146103a957600080fd5b806301ffc9a71461023957806302e4da091461026e57806306fdde03146102bd578063081812fc146102d2575b600080fd5b34801561024557600080fd5b5061025961025436600461360d565b6107c6565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5060408051808201909152600181527f320000000000000000000000000000000000000000000000000000000000000060208201525b604051610265919061367a565b3480156102c957600080fd5b506102b06107d7565b3480156102de57600080fd5b506102f26102ed36600461368d565b61088d565b6040516001600160a01b039091168152602001610265565b34801561031657600080fd5b5061032a6103253660046136c2565b6108d5565b005b34801561033857600080fd5b5061032a6103473660046136ec565b6108e4565b34801561035857600080fd5b5061039b61036736600461368d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b3480156103b557600080fd5b5061032a6103c43660046137f8565b6109a6565b3480156103d557600080fd5b5061032a6103e43660046138b6565b610b65565b3480156103f557600080fd5b5061032a6104043660046138b6565b610ba9565b34801561041557600080fd5b5061032a610bfa565b34801561042a57600080fd5b5061032a6104393660046136ec565b610cbf565b61032a61044c3660046138e2565b610cda565b34801561045d57600080fd5b5061039b610cf5565b34801561047257600080fd5b506102f261048136600461368d565b610d24565b34801561049257600080fd5b5061039b6104a1366004613930565b610d2f565b3480156104b257600080fd5b506104bb610db6565b604051610265979695949392919061394b565b3480156104da57600080fd5b506102596104e936600461368d565b60009081526005602052604090205460ff1690565b61032a61050c366004613a49565b610eb2565b34801561051d57600080fd5b5061025961052c3660046138b6565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058257600080fd5b506102b0611040565b34801561059757600080fd5b5061039b7f2aeb38be3df14d720aeb10a2de6df09b0fb3cd5c5ec256283a22d4593110ca4081565b3480156105cb57600080fd5b5061039b600081565b3480156105e057600080fd5b5061032a6105ef366004613ac5565b611091565b34801561060057600080fd5b5061032a61060f366004613aef565b61109c565b34801561062057600080fd5b506001546102599060ff1681565b34801561063a57600080fd5b5061032a61064936600461368d565b6110e8565b34801561065a57600080fd5b506102b06040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156106a357600080fd5b5061032a6106b2366004613b0a565b611153565b3480156106c357600080fd5b506102b06106d236600461368d565b61116a565b61032a6106e5366004613b72565b61120c565b3480156106f657600080fd5b5061032a6107053660046138b6565b6112c2565b34801561071657600080fd5b50610259610725366004613c12565b6001600160a01b0391821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b34801561077e57600080fd5b5061039b7fa615a8afb6fffcb8c6809ac0997b5c9c12b8cc97651150f14c8f6203168cff4c81565b3480156107b257600080fd5b5061032a6107c1366004613cea565b611306565b60006107d182611394565b92915050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300805460609190819061080990613da5565b80601f016020809104026020016040519081016040528092919081815260200182805461083590613da5565b80156108825780601f1061085757610100808354040283529160200191610882565b820191906000526020600020905b81548152906001019060200180831161086557829003601f168201915b505050505091505090565b6000610898826113ea565b5060008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b03166107d1565b6108e082823361145b565b5050565b6001600160a01b03821661092c576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b6000610939838333611468565b9050836001600160a01b0316816001600160a01b0316146109a0576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380861660048301526024820184905282166044820152606401610923565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109f15750825b905060008267ffffffffffffffff166001148015610a0e5750303b155b905081158015610a1c575080155b15610a53576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ab45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610abe8a8a6115e1565b610ac888886115f3565b610ad0611605565b610ad8611605565b610ae061160f565b6001805460ff191681179055610af760008761161f565b508315610b595784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9f816116ee565b6109a0838361161f565b6001600160a01b0381163314610beb576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf582826116fb565b505050565b6000610c05816116ee565b604051600090339047908381818185875af1925050503d8060008114610c47576040519150601f19603f3d011682016040523d82523d6000602084013e610c4c565b606091505b5050905080610c87576040517f2baafbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040514781527f6c9cf7ce96a10a51ae8b3fc5aca25e4754a77b3e821c133c5cebb1d30abe7e8e906020015b60405180910390a15050565b610bf583838360405180602001604052806000815250611153565b610ce26117a1565b610ceb82611871565b6108e0828261189b565b6000610cff61199c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b60006107d1826113ea565b60007f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793006001600160a01b038316610d95576040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152602401610923565b6001600160a01b039092166000908152600390920160205250604090205490565b600060608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008054909150158015610df557506001810154155b610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610923565b610e636119fe565b610e6b611a4f565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009c939b5091995046985030975095509350915050565b610eba611aa0565b60015460ff16610ef6576040517f9d2c8e7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828114610f2f576040517fc70ea82800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b84811015610f7757858582818110610f4d57610f4d613df8565b9050602002810190610f5f9190613e27565b610f6d906040013583613e94565b9150600101610f33565b5080341015610fb2576040517fea259f9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b848110156110155761100d868683818110610fd257610fd2613df8565b9050602002810190610fe49190613e27565b858584818110610ff657610ff6613df8565b90506020028101906110089190613ea7565b611b21565b600101610fb5565b50506109a060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060917f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793009161080990613da5565b6108e0338383611eaf565b60006110a7816116ee565b6001805460ff19168315159081179091556040519081527f7d16763644b2f7d5a11e2b05fe3a9cc4edb4568049295f4e62024269ae2f6eab90602001610cb3565b7f2aeb38be3df14d720aeb10a2de6df09b0fb3cd5c5ec256283a22d4593110ca40611112816116ee565b600082815260056020526040808220805460ff191690555183917f5de3fc4fb6d1f5f0d44014df7fcc3824b081ef3fc3946a361a7cc926a499035191a25050565b61115e8484846108e4565b6109a084848484611f8b565b600081815260036020526040902080546060919061118790613da5565b80601f01602080910402602001604051908101604052809291908181526020018280546111b390613da5565b80156112005780601f106111d557610100808354040283529160200191611200565b820191906000526020600020905b8154815290600101906020018083116111e357829003601f168201915b50505050509050919050565b611214611aa0565b60015460ff16611250576040517f9d2c8e7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826040013534101561128e576040517fea259f9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611299838383611b21565b610bf560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546112fc816116ee565b6109a083836116fb565b7f2aeb38be3df14d720aeb10a2de6df09b0fb3cd5c5ec256283a22d4593110ca40611330816116ee565b60008781526005602052604090819020805460ff191660011790555187907f8a2c815542d43af541960cd9124f5ec6a55c4b8c69f0dda02ed413b401e309cd9061138390869088908a9088908d90613f90565b60405180910390a250505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107d157506107d182612130565b60008181527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120546001600160a01b0316806107d1576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610923565b610bf58383836001612213565b60008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120547f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300906001600160a01b03908116908416156114d6576114d68185876123aa565b6001600160a01b03811615611534576114f3600086600080612213565b6001600160a01b0381166000908152600383016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b6001600160a01b03861615611565576001600160a01b03861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a49150505b9392505050565b6115e9612440565b6108e082826124a7565b6115fb612440565b6108e082826124ea565b61160d612440565b565b611617612440565b61160d61255d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166116e4576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561169a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107d1565b60009150506107d1565b6116f88133612565565b50565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156116e4576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107d1565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061183a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661182e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561160d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa615a8afb6fffcb8c6809ac0997b5c9c12b8cc97651150f14c8f6203168cff4c6108e0816116ee565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118f5575060408051601f3d908101601f191682019092526118f291810190613ff5565b60015b611936576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610923565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611992576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610923565b610bf583836125f2565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461160d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1009161080990613da5565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1009161080990613da5565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611b1b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b600054611b2f848484612648565b60005b611b3f60e086018661400e565b9050811015611c0057817fabd48d213cb20ec6f191e95c191131c8fc3832f194f53febcb53d4834baae507611b7760e088018861400e565b84818110611b8757611b87613df8565b9050602002810190611b999190614076565b611ba39080613ea7565b611bb060e08a018a61400e565b86818110611bc057611bc0613df8565b9050602002810190611bd29190614076565b611be0906020810190613ea7565b604051611bf094939291906140d5565b60405180910390a2600101611b32565b50611c0e60a0850185613ea7565b600083815260036020526040902091611c28919083614155565b5083356000908152600260205260408120805460019081019091558154018155611c56610100860186614251565b90501115611c6757611c678461273c565b611c80611c7a6080860160608701613930565b826129d4565b611c906080850160608601613930565b84356000818152600260205260409020546001600160a01b0392909216918391907ffe94555d033bd3fc0f75671674d030640f03095d8345426fcab3a9a0bffdc4fb90611ce060808a018a613ea7565b611ced60c08c018c613ea7565b604051611cfe9594939291906142b9565b60405180910390a4610140840135156109a0576000611d2561020086016101e08701613930565b6001600160a01b031614611e0d57611d4561020085016101e08601613930565b6001600160a01b031663e836239c8535611d6761014088016101208901613930565b611d776080890160608a01613930565b6101608901356101808a0135611d956101c08c016101a08d016142e6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b168152611dda969594939291906101c08e01359060040161431b565b600060405180830381600087803b158015611df457600080fd5b505af1158015611e08573d6000803e3d6000fd5b505050505b6101408401803590611e23906101208701613930565b6001600160a01b0316827f6d6039156ec873b5c217b996d727775a9eea208e1329e87aaa4b617c76d2bb94610160880135610180890135611e6c6101c08b016101a08c016142e6565b604051611e7b93929190614366565b60405180910390a450505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793006001600160a01b038316611f1b576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610923565b6001600160a01b038481166000818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b0383163b156109a0576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a0290611fe6903390889087908790600401614381565b6020604051808303816000875af1925050508015612021575060408051601f3d908101601f1916820190925261201e918101906143bd565b60015b6120a3573d80801561204f576040519150601f19603f3d011682016040523d82523d6000602084013e612054565b606091505b50805160000361209b576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610923565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014612129576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610923565b5050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806121c357507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806107d157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146107d1565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300818061224857506001600160a01b03831615155b15612361576000612258856113ea565b90506001600160a01b038416158015906122845750836001600160a01b0316816001600160a01b031614155b80156122d557506001600160a01b0380821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209388168352929052205460ff16155b15612317576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610923565b821561235f5784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6123b58383836129ee565b610bf5576001600160a01b0383166123fc576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610923565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052604401610923565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661160d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124af612440565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300806124db84826143da565b50600181016109a083826143da565b6124f2612440565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10261253e84826143da565b506003810161254d83826143da565b5060008082556001909101555050565b611e89612440565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166108e0576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610923565b6125fb82612ab2565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561264057610bf58282612b5a565b6108e0612bd0565b6000612655848484612c08565b6001600160a01b03811660009081527fbc6704768de17ac743a4c41122099f7a3464fc20363467b8527e22c7572f5d3a602052604090205490915060ff166126c9576040517f0f3c13fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208085013560009081526004909152604090205460ff1615612718576040517f76abf21400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050506020908101356000908152600490915260409020805460ff19166001179055565b600061271047825b612752610100860186614251565b90508110156121295761ffff831661276e610100870187614251565b8381811061277e5761277e613df8565b905060400201602001602081019061279691906144d6565b61ffff1611156127d2576040517f635015ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061ffff84166127e7610100880188614251565b848181106127f7576127f7613df8565b905060400201602001602081019061280f91906144d6565b6128219061ffff1660408901356144fa565b61282b9190614511565b90506128378186613e94565b94508560400135851115612877576040517fcc3b3ebc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828511156128b1576040517f2c2cae9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006128c1610100880188614251565b848181106128d1576128d1613df8565b6128e79260206040909202019081019150613930565b90506001600160a01b038116156129ca576000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612945576040519150601f19603f3d011682016040523d82523d6000602084013e61294a565b606091505b5050905080612985576040517f7327470c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03167fc9a9861643a061bfa3739f3b26e5d64578cd78bb863dbd5dac0aca396728d9a7846040516129c091815260200190565b60405180910390a2505b5050600101612744565b6108e0828260405180602001604052806000815250612c58565b60006001600160a01b03831615801590612aaa5750826001600160a01b0316846001600160a01b03161480612a6757506001600160a01b0380851660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209387168352929052205460ff165b80612aaa575060008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b038481169116145b949350505050565b806001600160a01b03163b600003612b01576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610923565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b77919061454c565b600060405180830381855af49150503d8060008114612bb2576040519150601f19603f3d011682016040523d82523d6000602084013e612bb7565b606091505b5091509150612bc7858383612c6f565b95945050505050565b341561160d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080612c1485612ce4565b9050612bc784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508593925050612cfe9050565b612c628383612d28565b610bf56000848484611f8b565b606082612c8457612c7f82612dbf565b6115da565b8151158015612c9b57506001600160a01b0384163b155b15612cdd576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610923565b50806115da565b60006107d1612cf283612e01565b80519060200120612f1e565b600080600080612d0e8686612f66565b925092509250612d1e8282612fb3565b5090949350505050565b6001600160a01b038216612d6b576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152602401610923565b6000612d7983836000611468565b90506001600160a01b03811615610bf5576040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152602401610923565b805115612dcf5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60607fe078867cdfa0acd2e4d8e43793b771c2d3670af784116b0765aa2425c5bbb021823560208401356040850135612e3f60808701878701613930565b612e54612e4f6080890189613ea7565b6130b7565b612e64612e4f60a08a018a613ea7565b612e74612e4f60c08b018b613ea7565b612e89612e8460e08c018c61400e565b6130d9565b612e9f612e9a6101008d018d614251565b6131b5565b612eac8c61012001613254565b60408051602081019c909c528b019990995260608a019790975260808901959095526001600160a01b0390931660a088015260c087019190915260e0860152610100850152610120840152610140830152610160820152610180015b6040516020818303038152906040529050919050565b60006107d1612f2b6132ec565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060008351604103612fa05760208401516040850151606086015160001a612f92888285856132fb565b955095509550505050612fac565b50508151600091506002905b9250925092565b6000826003811115612fc757612fc7613f0c565b03612fd0575050565b6001826003811115612fe457612fe4613f0c565b0361301b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561302f5761302f613f0c565b03613069576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610923565b600382600381111561307d5761307d613f0c565b036108e0576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610923565b600082826040516130c992919061455e565b6040518091039020905092915050565b6000808267ffffffffffffffff8111156130f5576130f5613728565b60405190808252806020026020018201604052801561311e578160200160208202803683370190505b50905060005b838110156131845761315885858381811061314157613141613df8565b90506020028101906131539190614076565b6133ca565b8051906020012082828151811061317157613171613df8565b6020908102919091010152600101613124565b5080604051602001613196919061456e565b6040516020818303038152906040528051906020012091505092915050565b6000808267ffffffffffffffff8111156131d1576131d1613728565b6040519080825280602002602001820160405280156131fa578160200160208202803683370190505b50905060005b838110156131845761322885858381811061321d5761321d613df8565b905060400201613429565b8051906020012082828151811061324157613241613df8565b6020908102919091010152600101613200565b60007f07dcd7fc8540e6630daaa95c4bf6d1951796f3e22e2e1c1bcbdbd5055c7ab37c6132846020840184613930565b6020840135604085013560608601356132a360a08801608089016142e6565b60a08801356132b860e08a0160c08b01613930565b6040516020016132cf9897969594939291906145a4565b604051602081830303815290604052805190602001209050919050565b60006132f6613499565b905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561333657506000915060039050826133c0565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561338a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166133b6575060009250600191508290506133c0565b9250600091508190505b9450945094915050565b60607f93dc1bac6b117acdbb889b9a825b9bc731449f703cc02b69049722fcba5dbe346133fa612e4f8480613ea7565b61340a612e4f6020860186613ea7565b6040805160208101949094528301919091526060820152608001612f08565b60607fdf3d1189f68f42c28f9fad9d69ff7a974d0a800a2e4420ed400e45a46d2fac2f6134596020840184613930565b61346960408501602086016144d6565b604051602001612f08939291909283526001600160a01b0391909116602083015261ffff16604082015260600190565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6134c461350d565b6134cc613589565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100816135396119fe565b80519091501561355157805160209091012092915050565b81548015613560579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100816135b5611a4f565b8051909150156135cd57805160209091012092915050565b60018201548015613560579392505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146116f857600080fd5b60006020828403121561361f57600080fd5b81356115da816135df565b60005b8381101561364557818101518382015260200161362d565b50506000910152565b6000815180845261366681602086016020860161362a565b601f01601f19169290920160200192915050565b6020815260006115da602083018461364e565b60006020828403121561369f57600080fd5b5035919050565b80356001600160a01b03811681146136bd57600080fd5b919050565b600080604083850312156136d557600080fd5b6136de836136a6565b946020939093013593505050565b60008060006060848603121561370157600080fd5b61370a846136a6565b9250613718602085016136a6565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561378057613780613728565b604052919050565b600082601f83011261379957600080fd5b813567ffffffffffffffff8111156137b3576137b3613728565b6137c66020601f19601f84011601613757565b8181528460208386010111156137db57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561381057600080fd5b853567ffffffffffffffff8082111561382857600080fd5b61383489838a01613788565b9650602088013591508082111561384a57600080fd5b61385689838a01613788565b9550604088013591508082111561386c57600080fd5b61387889838a01613788565b9450606088013591508082111561388e57600080fd5b5061389b88828901613788565b9250506138aa608087016136a6565b90509295509295909350565b600080604083850312156138c957600080fd5b823591506138d9602084016136a6565b90509250929050565b600080604083850312156138f557600080fd5b6138fe836136a6565b9150602083013567ffffffffffffffff81111561391a57600080fd5b61392685828601613788565b9150509250929050565b60006020828403121561394257600080fd5b6115da826136a6565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e08184015261398760e084018a61364e565b8381036040850152613999818a61364e565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156139eb578351835292840192918401916001016139cf565b50909c9b505050505050505050505050565b60008083601f840112613a0f57600080fd5b50813567ffffffffffffffff811115613a2757600080fd5b6020830191508360208260051b8501011115613a4257600080fd5b9250929050565b60008060008060408587031215613a5f57600080fd5b843567ffffffffffffffff80821115613a7757600080fd5b613a83888389016139fd565b90965094506020870135915080821115613a9c57600080fd5b50613aa9878288016139fd565b95989497509550505050565b803580151581146136bd57600080fd5b60008060408385031215613ad857600080fd5b613ae1836136a6565b91506138d960208401613ab5565b600060208284031215613b0157600080fd5b6115da82613ab5565b60008060008060808587031215613b2057600080fd5b613b29856136a6565b9350613b37602086016136a6565b925060408501359150606085013567ffffffffffffffff811115613b5a57600080fd5b613b6687828801613788565b91505092959194509250565b600080600060408486031215613b8757600080fd5b833567ffffffffffffffff80821115613b9f57600080fd5b908501906102008288031215613bb457600080fd5b90935060208501359080821115613bca57600080fd5b818601915086601f830112613bde57600080fd5b813581811115613bed57600080fd5b876020828501011115613bff57600080fd5b6020830194508093505050509250925092565b60008060408385031215613c2557600080fd5b613c2e836136a6565b91506138d9602084016136a6565b600082601f830112613c4d57600080fd5b8135602067ffffffffffffffff80831115613c6a57613c6a613728565b8260051b613c79838201613757565b9384528581018301938381019088861115613c9357600080fd5b84880192505b85831015613ccf57823584811115613cb15760008081fd5b613cbf8a87838c0101613788565b8352509184019190840190613c99565b98975050505050505050565b8035600281106136bd57600080fd5b60008060008060008060c08789031215613d0357600080fd5b86359550602087013567ffffffffffffffff80821115613d2257600080fd5b613d2e8a838b01613c3c565b96506040890135915080821115613d4457600080fd5b613d508a838b01613788565b95506060890135915060038210613d6657600080fd5b819450613d7560808a01613cdb565b935060a0890135915080821115613d8b57600080fd5b50613d9889828a01613c3c565b9150509295509295509295565b600181811c90821680613db957607f821691505b602082108103613df2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01833603018112613e5b57600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156107d1576107d1613e65565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613edc57600080fd5b83018035915067ffffffffffffffff821115613ef757600080fd5b602001915036819003821315613a4257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600081518084526020808501808196508360051b8101915082860160005b85811015613f83578284038952613f7184835161364e565b98850198935090840190600101613f59565b5091979650505050505050565b600060028710613fa257613fa2613f0c565b86825260038610613fb557613fb5613f0c565b85602083015260a06040830152613fcf60a083018661364e565b8281036060840152613fe18186613f3b565b90508281036080840152613ccf8185613f3b565b60006020828403121561400757600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261404357600080fd5b83018035915067ffffffffffffffff82111561405e57600080fd5b6020019150600581901b3603821315613a4257600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613e5b57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6040815260006140e96040830186886140aa565b82810360208401526140fc8185876140aa565b979650505050505050565b601f821115610bf557600081815260208120601f850160051c8101602086101561412e5750805b601f850160051c820191505b8181101561414d5782815560010161413a565b505050505050565b67ffffffffffffffff83111561416d5761416d613728565b6141818361417b8354613da5565b83614107565b6000601f8411600181146141d3576000851561419d5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355612129565b600083815260209020601f19861690835b8281101561420457868501358255602094850194600190920191016141e4565b508682101561423f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428657600080fd5b83018035915067ffffffffffffffff8211156142a157600080fd5b6020019150600681901b3603821315613a4257600080fd5b8581526060602082015260006142d36060830186886140aa565b8281036040840152613ccf8185876140aa565b6000602082840312156142f857600080fd5b8135600481106115da57600080fd5b6004811061431757614317613f0c565b9052565b8781526001600160a01b03878116602083015286166040820152606081018590526080810184905260e0810161435460a0830185614307565b8260c083015298975050505050505050565b8381526020810183905260608101612aaa6040830184614307565b60006001600160a01b038087168352808616602084015250836040830152608060608301526143b3608083018461364e565b9695505050505050565b6000602082840312156143cf57600080fd5b81516115da816135df565b815167ffffffffffffffff8111156143f4576143f4613728565b614408816144028454613da5565b84614107565b602080601f83116001811461445b57600084156144255750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561414d565b600085815260208120601f198616915b8281101561448a5788860151825594840194600190910190840161446b565b50858210156144c657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156144e857600080fd5b813561ffff811681146115da57600080fd5b80820281158282048414176107d1576107d1613e65565b600082614547577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251613e5b81846020870161362a565b8183823760009101908152919050565b815160009082906020808601845b838110156145985781518552938201939082019060010161457c565b50929695505050505050565b6000610100820190508982526001600160a01b03808a1660208401528860408401528760608401528660808401526145df60a0840187614307565b8460c084015280841660e084015250999850505050505050505056fea26469706673582212201fa4f2a544beee44a7bb51d00a03284e7cb7948d9c82e13292cd236b14e6c9eb64736f6c63430008140033