[ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "address[]", "name": "allowedSeaDrop", "type": "address[]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "CannotExceedMaxSupplyOfUint64", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "basisPoints", "type": "uint256" } ], "name": "InvalidRoyaltyBasisPoints", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "total", "type": "uint256" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" } ], "name": "MintQuantityExceedsMaxSupply", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NotNextOwner", "type": "error" }, { "inputs": [], "name": "OnlyAllowedSeaDrop", "type": "error" }, { "inputs": [], "name": "OnlyOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "OperatorNotAllowed", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "ProvenanceHashCannotBeSetAfterMintStarted", "type": "error" }, { "inputs": [], "name": "RoyaltyAddressCannotBeZeroAddress", "type": "error" }, { "inputs": [], "name": "SignersMismatch", "type": "error" }, { "inputs": [], "name": "TokenGatedMismatch", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address[]", "name": "allowedSeaDrop", "type": "address[]" } ], "name": "AllowedSeaDropUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "baseURI", "type": "string" } ], "name": "BaseURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "newContractURI", "type": "string" } ], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "MaxSupplyUpdated", "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": "newPotentialAdministrator", "type": "address" } ], "name": "PotentialOwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "previousHash", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "newHash", "type": "bytes32" } ], "name": "ProvenanceHashUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "bps", "type": "uint256" } ], "name": "RoyaltyInfoUpdated", "type": "event" }, { "anonymous": false, "inputs": [], "name": "SeaDropTokenDeployed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "startTokenId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "endTokenId", "type": "uint256" } ], "name": "TokenURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "OPERATOR_FILTER_REGISTRY", "outputs": [ { "internalType": "contract IOperatorFilterRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "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": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancelOwnershipTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "startTokenId", "type": "uint256" }, { "internalType": "uint256", "name": "endTokenId", "type": "uint256" } ], "name": "emitBatchTokenURIUpdated", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "getMintStats", "outputs": [ { "internalType": "uint256", "name": "minterNumMinted", "type": "uint256" }, { "internalType": "uint256", "name": "currentTotalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "mintSeaDrop", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "maxSupply", "type": "uint256" }, { "internalType": "string", "name": "baseURI", "type": "string" }, { "internalType": "string", "name": "contractURI", "type": "string" }, { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "components": [ { "internalType": "uint80", "name": "mintPrice", "type": "uint80" }, { "internalType": "uint48", "name": "startTime", "type": "uint48" }, { "internalType": "uint48", "name": "endTime", "type": "uint48" }, { "internalType": "uint16", "name": "maxTotalMintableByWallet", "type": "uint16" }, { "internalType": "uint16", "name": "feeBps", "type": "uint16" }, { "internalType": "bool", "name": "restrictFeeRecipients", "type": "bool" } ], "internalType": "struct PublicDrop", "name": "publicDrop", "type": "tuple" }, { "internalType": "string", "name": "dropURI", "type": "string" }, { "components": [ { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "string[]", "name": "publicKeyURIs", "type": "string[]" }, { "internalType": "string", "name": "allowListURI", "type": "string" } ], "internalType": "struct AllowListData", "name": "allowListData", "type": "tuple" }, { "internalType": "address", "name": "creatorPayoutAddress", "type": "address" }, { "internalType": "bytes32", "name": "provenanceHash", "type": "bytes32" }, { "internalType": "address[]", "name": "allowedFeeRecipients", "type": "address[]" }, { "internalType": "address[]", "name": "disallowedFeeRecipients", "type": "address[]" }, { "internalType": "address[]", "name": "allowedPayers", "type": "address[]" }, { "internalType": "address[]", "name": "disallowedPayers", "type": "address[]" }, { "internalType": "address[]", "name": "tokenGatedAllowedNftTokens", "type": "address[]" }, { "components": [ { "internalType": "uint80", "name": "mintPrice", "type": "uint80" }, { "internalType": "uint16", "name": "maxTotalMintableByWallet", "type": "uint16" }, { "internalType": "uint48", "name": "startTime", "type": "uint48" }, { "internalType": "uint48", "name": "endTime", "type": "uint48" }, { "internalType": "uint8", "name": "dropStageIndex", "type": "uint8" }, { "internalType": "uint32", "name": "maxTokenSupplyForStage", "type": "uint32" }, { "internalType": "uint16", "name": "feeBps", "type": "uint16" }, { "internalType": "bool", "name": "restrictFeeRecipients", "type": "bool" } ], "internalType": "struct TokenGatedDropStage[]", "name": "tokenGatedDropStages", "type": "tuple[]" }, { "internalType": "address[]", "name": "disallowedTokenGatedAllowedNftTokens", "type": "address[]" }, { "internalType": "address[]", "name": "signers", "type": "address[]" }, { "components": [ { "internalType": "uint80", "name": "minMintPrice", "type": "uint80" }, { "internalType": "uint24", "name": "maxMaxTotalMintableByWallet", "type": "uint24" }, { "internalType": "uint40", "name": "minStartTime", "type": "uint40" }, { "internalType": "uint40", "name": "maxEndTime", "type": "uint40" }, { "internalType": "uint40", "name": "maxMaxTokenSupplyForStage", "type": "uint40" }, { "internalType": "uint16", "name": "minFeeBps", "type": "uint16" }, { "internalType": "uint16", "name": "maxFeeBps", "type": "uint16" } ], "internalType": "struct SignedMintValidationParams[]", "name": "signedMintValidationParams", "type": "tuple[]" }, { "internalType": "address[]", "name": "disallowedSigners", "type": "address[]" } ], "internalType": "struct ERC721SeaDropStructsErrorsAndEvents.MultiConfigureStruct", "name": "config", "type": "tuple" } ], "name": "multiConfigure", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "provenanceHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "royaltyAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "royaltyBasisPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newContractURI", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "setMaxSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "newProvenanceHash", "type": "bytes32" } ], "name": "setProvenanceHash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "royaltyAddress", "type": "address" }, { "internalType": "uint96", "name": "royaltyBps", "type": "uint96" } ], "internalType": "struct ISeaDropTokenContractMetadata.RoyaltyInfo", "name": "newInfo", "type": "tuple" } ], "name": "setRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newPotentialOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "components": [ { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "string[]", "name": "publicKeyURIs", "type": "string[]" }, { "internalType": "string", "name": "allowListURI", "type": "string" } ], "internalType": "struct AllowListData", "name": "allowListData", "type": "tuple" } ], "name": "updateAllowList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "address", "name": "feeRecipient", "type": "address" }, { "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "updateAllowedFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "allowedSeaDrop", "type": "address[]" } ], "name": "updateAllowedSeaDrop", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "address", "name": "payoutAddress", "type": "address" } ], "name": "updateCreatorPayoutAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "string", "name": "dropURI", "type": "string" } ], "name": "updateDropURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "address", "name": "payer", "type": "address" }, { "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "updatePayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "components": [ { "internalType": "uint80", "name": "mintPrice", "type": "uint80" }, { "internalType": "uint48", "name": "startTime", "type": "uint48" }, { "internalType": "uint48", "name": "endTime", "type": "uint48" }, { "internalType": "uint16", "name": "maxTotalMintableByWallet", "type": "uint16" }, { "internalType": "uint16", "name": "feeBps", "type": "uint16" }, { "internalType": "bool", "name": "restrictFeeRecipients", "type": "bool" } ], "internalType": "struct PublicDrop", "name": "publicDrop", "type": "tuple" } ], "name": "updatePublicDrop", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "address", "name": "signer", "type": "address" }, { "components": [ { "internalType": "uint80", "name": "minMintPrice", "type": "uint80" }, { "internalType": "uint24", "name": "maxMaxTotalMintableByWallet", "type": "uint24" }, { "internalType": "uint40", "name": "minStartTime", "type": "uint40" }, { "internalType": "uint40", "name": "maxEndTime", "type": "uint40" }, { "internalType": "uint40", "name": "maxMaxTokenSupplyForStage", "type": "uint40" }, { "internalType": "uint16", "name": "minFeeBps", "type": "uint16" }, { "internalType": "uint16", "name": "maxFeeBps", "type": "uint16" } ], "internalType": "struct SignedMintValidationParams", "name": "signedMintValidationParams", "type": "tuple" } ], "name": "updateSignedMintValidationParams", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "address", "name": "allowedNftToken", "type": "address" }, { "components": [ { "internalType": "uint80", "name": "mintPrice", "type": "uint80" }, { "internalType": "uint16", "name": "maxTotalMintableByWallet", "type": "uint16" }, { "internalType": "uint48", "name": "startTime", "type": "uint48" }, { "internalType": "uint48", "name": "endTime", "type": "uint48" }, { "internalType": "uint8", "name": "dropStageIndex", "type": "uint8" }, { "internalType": "uint32", "name": "maxTokenSupplyForStage", "type": "uint32" }, { "internalType": "uint16", "name": "feeBps", "type": "uint16" }, { "internalType": "bool", "name": "restrictFeeRecipients", "type": "bool" } ], "internalType": "struct TokenGatedDropStage", "name": "dropStage", "type": "tuple" } ], "name": "updateTokenGatedDrop", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040526001600f553480156200001657600080fd5b50604051620051e6380380620051e6833981016040819052620000399162000450565b733cc6cdda760b79bafa08df41ecfa224f810dceb66001848481816002620000628382620005f6565b506003620000718282620005f6565b5050600160005550620000836200027a565b50506daaeb6d7670e522a718067333cd4e3b15620001ca5780156200011857604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015620000f957600080fd5b505af11580156200010e573d6000803e3d6000fd5b50505050620001ca565b6001600160a01b03821615620001695760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620000de565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620001b057600080fd5b505af1158015620001c5573d6000803e3d6000fd5b505050505b5050805160005b818110156200023057600160106000858481518110620001f557620001f5620006c2565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620001d1565b50815162000246906011906020850190620002f9565b506040517fd7aca75208b9be5ffc04c6a01922020ffd62b55e68e502e317f5344960279af890600090a150505050620006d8565b303b156200029a5760405162dc149f60e41b815260040160405180910390fd5b620002a533620002a7565b565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562000351579160200282015b828111156200035157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200031a565b506200035f92915062000363565b5090565b5b808211156200035f576000815560010162000364565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003bb57620003bb6200037a565b604052919050565b600082601f830112620003d557600080fd5b81516001600160401b03811115620003f157620003f16200037a565b602062000407601f8301601f1916820162000390565b82815285828487010111156200041c57600080fd5b60005b838110156200043c5785810183015182820184015282016200041f565b506000928101909101919091529392505050565b6000806000606084860312156200046657600080fd5b83516001600160401b03808211156200047e57600080fd5b6200048c87838801620003c3565b9450602091508186015181811115620004a457600080fd5b620004b288828901620003c3565b945050604086015181811115620004c857600080fd5b8601601f81018813620004da57600080fd5b805182811115620004ef57620004ef6200037a565b8060051b92506200050284840162000390565b818152928201840192848101908a8511156200051d57600080fd5b928501925b848410156200055757835192506001600160a01b0383168314620005465760008081fd5b828252928501929085019062000522565b8096505050505050509250925092565b600181811c908216806200057c57607f821691505b6020821081036200059d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005f157600081815260208120601f850160051c81016020861015620005cc5750805b601f850160051c820191505b81811015620005ed57828155600101620005d8565b5050505b505050565b81516001600160401b038111156200061257620006126200037a565b6200062a8162000623845462000567565b84620005a3565b602080601f831160018114620006625760008415620006495750858301515b600019600386901b1c1916600185901b178555620005ed565b600085815260208120601f198616915b82811015620006935788860151825594840194600190910190840162000672565b5085821015620006b25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b614afe80620006e86000396000f3fe6080604052600436106102f25760003560e01c806366251b691161018f578063938e3d7b116100e1578063c87b56dd1161008a578063e8a3d48511610064578063e8a3d485146108ba578063e985e9c5146108cf578063f2fde38b1461092557600080fd5b8063c87b56dd14610865578063cb743ba814610885578063d5abeb01146108a557600080fd5b8063ad2f852a116100bb578063ad2f852a14610805578063b88d4fde14610830578063c6ab67a31461085057600080fd5b8063938e3d7b146107b057806395d89b41146107d0578063a22cb465146107e557600080fd5b806379ba509711610143578063840e15d41161011d578063840e15d41461072a5780638da5cb5b14610765578063911f456b1461079057600080fd5b806379ba5097146106d55780637a05bc82146106ea5780637bc2be761461070a57600080fd5b80636f8b44b0116101745780636f8b44b01461068057806370a08231146106a0578063715018a6146106c057600080fd5b806366251b691461064b5780636c0360eb1461066b57600080fd5b80633680620d1161024857806348a4c101116101fc57806360c308b6116101d657806360c308b6146105f85780636352211e1461061857806364869dad1461063857600080fd5b806348a4c10114610598578063511aa644146105b857806355f804b3146105d857600080fd5b806342260b5d1161022d57806342260b5d1461051d57806342842e0e1461055857806344dae42c1461057857600080fd5b80633680620d146104db57806341f43434146104fb57600080fd5b806315922b28116102aa57806323452b9c1161028457806323452b9c1461045a57806323b872dd1461046f5780632a55205a1461048f57600080fd5b806315922b28146103d557806318160ddd146103f55780631b73593c1461043a57600080fd5b8063081812fc116102db578063081812fc1461034e578063095ea7b314610393578063099b6bfa146103b557600080fd5b806301ffc9a7146102f757806306fdde031461032c575b600080fd5b34801561030357600080fd5b506103176103123660046135cb565b610945565b60405190151581526020015b60405180910390f35b34801561033857600080fd5b506103416109ed565b6040516103239190613656565b34801561035a57600080fd5b5061036e610369366004613669565b610a7f565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610323565b34801561039f57600080fd5b506103b36103ae3660046136a4565b610ae9565b005b3480156103c157600080fd5b506103b36103d0366004613669565b610b02565b3480156103e157600080fd5b506103b36103f03660046136d0565b610bac565b34801561040157600080fd5b50600154600054037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b604051908152602001610323565b34801561044657600080fd5b506103b36104553660046136f2565b610be5565b34801561046657600080fd5b506103b3610c7e565b34801561047b57600080fd5b506103b361048a366004613751565b610ce4565b34801561049b57600080fd5b506104af6104aa3660046136d0565b610d1c565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610323565b3480156104e757600080fd5b506103b36104f6366004613792565b610d85565b34801561050757600080fd5b5061036e6daaeb6d7670e522a718067333cd4e81565b34801561052957600080fd5b50600e547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1661042c565b34801561056457600080fd5b506103b3610573366004613751565b610de8565b34801561058457600080fd5b506103b36105933660046137e9565b610e1a565b3480156105a457600080fd5b506103b36105b336600461381f565b610f8b565b3480156105c457600080fd5b506103b36105d3366004613965565b61102b565b3480156105e457600080fd5b506103b36105f3366004613a9b565b611090565b34801561060457600080fd5b506103b3610613366004613add565b6110d7565b34801561062457600080fd5b5061036e610633366004613669565b6110ed565b6103b36106463660046136a4565b6110f8565b34801561065757600080fd5b506103b3610666366004613b52565b611238565b34801561067757600080fd5b5061034161129d565b34801561068c57600080fd5b506103b361069b366004613669565b6112ac565b3480156106ac57600080fd5b5061042c6106bb366004613b80565b61132e565b3480156106cc57600080fd5b506103b36113b0565b3480156106e157600080fd5b506103b36113c4565b3480156106f657600080fd5b506103b3610705366004613b9d565b61147e565b34801561071657600080fd5b506103b3610725366004613bf2565b6114e3565b34801561073657600080fd5b5061074a610745366004613b80565b611548565b60408051938452602084019290925290820152606001610323565b34801561077157600080fd5b5060085473ffffffffffffffffffffffffffffffffffffffff1661036e565b34801561079c57600080fd5b506103b36107ab366004613c65565b6115b5565b3480156107bc57600080fd5b506103b36107cb366004613a9b565b612350565b3480156107dc57600080fd5b50610341612397565b3480156107f157600080fd5b506103b3610800366004613ca1565b6123a6565b34801561081157600080fd5b50600e5473ffffffffffffffffffffffffffffffffffffffff1661036e565b34801561083c57600080fd5b506103b361084b366004613ccf565b6123ba565b34801561085c57600080fd5b50600d5461042c565b34801561087157600080fd5b50610341610880366004613669565b6123f4565b34801561089157600080fd5b506103b36108a036600461381f565b612491565b3480156108b157600080fd5b50600a5461042c565b3480156108c657600080fd5b506103416124fe565b3480156108db57600080fd5b506103176108ea366004613b52565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561093157600080fd5b506103b3610940366004613b80565b61250d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f1890fe8e0000000000000000000000000000000000000000000000000000000014806109d857507fffffffff0000000000000000000000000000000000000000000000000000000082167f9c15441500000000000000000000000000000000000000000000000000000000145b806109e757506109e7826125d5565b92915050565b6060600280546109fc90613db1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2890613db1565b8015610a755780601f10610a4a57610100808354040283529160200191610a75565b820191906000526020600020905b815481529060010190602001808311610a5857829003601f168201915b5050505050905090565b6000610a8a8261262b565b610ac0576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b81610af381612679565b610afd838361277e565b505050565b610b0a612893565b6000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0115610b66576040517fe03264af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d80549082905560408051828152602081018490527f7c22004198bf87da0f0dab623c72e66ca1200f4454aa3b9ca30f436275428b7c91015b60405180910390a15050565b610bb4612893565b604051819083907fa367e77d52123b7db91661964f869e6d260e9050507402788a87ca8ad38687e790600090a35050565b610bed612893565b610bf682612923565b6040517f01308e6500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906301308e6590610c48908490600401613ea2565b600060405180830381600087803b158015610c6257600080fd5b505af1158015610c76573d6000803e3d6000fd5b505050505050565b610c86612987565b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1565b8273ffffffffffffffffffffffffffffffffffffffff81163314610d0b57610d0b33612679565b610d168484846129d8565b50505050565b600e8054600091829161271090610d59907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1686613edf565b610d639190613ef6565b905473ffffffffffffffffffffffffffffffffffffffff169590945092505050565b610d8d612893565b610d9682612923565b6040517febb4a55f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063ebb4a55f90610c489084906004016140ee565b8273ffffffffffffffffffffffffffffffffffffffff81163314610e0f57610e0f33612679565b610d16848484612c8e565b610e22612893565b6000610e316020830183613b80565b73ffffffffffffffffffffffffffffffffffffffff1603610e7e576040517f1cc0baef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710610e91604083016020840161411b565b6bffffffffffffffffffffffff161115610efd57610eb5604082016020830161411b565b6040517f3cadbafb0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b80600e610f0a8282614138565b507ff21fccf4d64d86d532c4e4eb86c007b6ad57a460c27d724188625e755ec6cf6d9050610f3b6020830183613b80565b610f4b604084016020850161411b565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152015b60405180910390a150565b610f93612893565b610f9c83612923565b6040517f8e7d1e4300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528215156024830152841690638e7d1e43906044015b600060405180830381600087803b15801561100e57600080fd5b505af1158015611022573d6000803e3d6000fd5b50505050505050565b611033612893565b61103c83612923565b6040517f4d38017800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634d38017890610ff4908590859060040161419d565b611098612893565b600b6110a5828483614277565b507f6741b2fc379fad678116fe3d4d4b9a1a184ab53ba36b86ad0fa66340b1ab41ad8282604051610ba0929190614391565b6110df612987565b6110e98282612ca9565b5050565b60006109e782612e19565b600f54600114611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e4359000000000000000000000000000000000000000000006044820152606401610ef4565b6002600f5561117233612923565b600a54816111a16000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6111ab91906143a5565b111561122557806111dd6000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6111e791906143a5565b600a546040517fe12d231400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610ef4565b61122f8282612ed8565b50506001600f55565b611240612893565b61124982612923565b6040517f12738db800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301528316906312738db890602401610c48565b60606112a7612ef2565b905090565b6112b4612893565b67ffffffffffffffff8111156112f9576040517fb43e913700000000000000000000000000000000000000000000000000000000815260048101829052602401610ef4565b600a8190556040518181527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c90602001610f80565b600073ffffffffffffffffffffffffffffffffffffffff821661137d576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205467ffffffffffffffff1690565b6113b8612987565b6113c26000612f01565b565b60095473ffffffffffffffffffffffffffffffffffffffff16338114611416576040517fd6eb09ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a161147b81612f01565b50565b611486612893565b61148f83612923565b6040517fb957d0cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063b957d0cb90610ff49085908590600401614391565b6114eb612893565b6114f483612923565b6040517ffd9ab22a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063fd9ab22a90610ff49085908590600401614489565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604080822054901c67ffffffffffffffff1690806115a86000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600a549395909450915050565b6115bd612987565b80351561162f576040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152813560048201523090636f8b44b090602401600060405180830381600087803b15801561161657600080fd5b505af115801561162a573d6000803e3d6000fd5b505050505b61163c60208201826144b4565b1590506116a657306355f804b361165660208401846144b4565b6040518363ffffffff1660e01b8152600401611673929190614391565b600060405180830381600087803b15801561168d57600080fd5b505af11580156116a1573d6000803e3d6000fd5b505050505b6116b360408201826144b4565b15905061171d573063938e3d7b6116cd60408401846144b4565b6040518363ffffffff1660e01b81526004016116ea929190614391565b600060405180830381600087803b15801561170457600080fd5b505af1158015611718573d6000803e3d6000fd5b505050505b61173d61173060e0830160c08401614519565b65ffffffffffff16151590565b61175061173060c0840160a08501614519565b176001036117c25730631b73593c61176e6080840160608501613b80565b836080016040518363ffffffff1660e01b815260040161178f929190614534565b600060405180830381600087803b1580156117a957600080fd5b505af11580156117bd573d6000803e3d6000fd5b505050505b6117d06101408201826144b4565b15905061184c5730637a05bc826117ed6080840160608501613b80565b6117fb6101408501856144b4565b6040518463ffffffff1660e01b81526004016118199392919061455e565b600060405180830381600087803b15801561183357600080fd5b505af1158015611847573d6000803e3d6000fd5b505050505b600061185c610160830183614597565b35146118d65730633680620d6118786080840160608501613b80565b611886610160850185614597565b6040518363ffffffff1660e01b81526004016118a39291906145d5565b600060405180830381600087803b1580156118bd57600080fd5b505af11580156118d1573d6000803e3d6000fd5b505050505b60006118ea6101a083016101808401613b80565b73ffffffffffffffffffffffffffffffffffffffff16146119b357306366251b6961191b6080840160608501613b80565b61192d6101a085016101808601613b80565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b15801561199a57600080fd5b505af11580156119ae573d6000803e3d6000fd5b505050505b6101a081013515611a2d576040517f099b6bfa0000000000000000000000000000000000000000000000000000000081526101a08201356004820152309063099b6bfa90602401600060405180830381600087803b158015611a1457600080fd5b505af1158015611a28573d6000803e3d6000fd5b505050505b6000611a3d6101c0830183614604565b90501115611b415760005b611a566101c0830183614604565b9050811015611b3f57306348a4c101611a756080850160608601613b80565b611a836101c0860186614604565b85818110611a9357611a9361466c565b9050602002016020810190611aa89190613b80565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260016044820152606401600060405180830381600087803b158015611b1c57600080fd5b505af1158015611b30573d6000803e3d6000fd5b50505050806001019050611a48565b505b6000611b516101e0830183614604565b90501115611c555760005b611b6a6101e0830183614604565b9050811015611c5357306348a4c101611b896080850160608601613b80565b611b976101e0860186614604565b85818110611ba757611ba761466c565b9050602002016020810190611bbc9190613b80565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260006044820152606401600060405180830381600087803b158015611c3057600080fd5b505af1158015611c44573d6000803e3d6000fd5b50505050806001019050611b5c565b505b6000611c65610200830183614604565b90501115611d695760005b611c7e610200830183614604565b9050811015611d67573063cb743ba8611c9d6080850160608601613b80565b611cab610200860186614604565b85818110611cbb57611cbb61466c565b9050602002016020810190611cd09190613b80565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260016044820152606401600060405180830381600087803b158015611d4457600080fd5b505af1158015611d58573d6000803e3d6000fd5b50505050806001019050611c70565b505b6000611d79610220830183614604565b90501115611e7d5760005b611d92610220830183614604565b9050811015611e7b573063cb743ba8611db16080850160608601613b80565b611dbf610220860186614604565b85818110611dcf57611dcf61466c565b9050602002016020810190611de49190613b80565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260006044820152606401600060405180830381600087803b158015611e5857600080fd5b505af1158015611e6c573d6000803e3d6000fd5b50505050806001019050611d84565b505b6000611e8d61026083018361469b565b90501115611fd157611ea3610240820182614604565b9050611eb361026083018361469b565b905014611eec576040517fb81aa63900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b611efd61026083018361469b565b9050811015611fcf5730637bc2be76611f1c6080850160608601613b80565b611f2a610240860186614604565b85818110611f3a57611f3a61466c565b9050602002016020810190611f4f9190613b80565b611f5d61026087018761469b565b86818110611f6d57611f6d61466c565b905061010002016040518463ffffffff1660e01b8152600401611f9293929190614703565b600060405180830381600087803b158015611fac57600080fd5b505af1158015611fc0573d6000803e3d6000fd5b50505050806001019050611eef565b505b6000611fe1610280830183614604565b905011156120ec5760005b611ffa610280830183614604565b90508110156120ea576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915230637bc2be7661205a6080860160608701613b80565b612068610280870187614604565b868181106120785761207861466c565b905060200201602081019061208d9190613b80565b846040518463ffffffff1660e01b81526004016120ac93929190614736565b600060405180830381600087803b1580156120c657600080fd5b505af11580156120da573d6000803e3d6000fd5b5050505081600101915050611fec565b505b60006120fc6102c08301836147f9565b9050111561223f576121126102a0820182614604565b90506121226102c08301836147f9565b90501461215b576040517f74ef6df700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b61216c6102c08301836147f9565b905081101561223d573063511aa64461218b6080850160608601613b80565b6121996102a0860186614604565b858181106121a9576121a961466c565b90506020020160208101906121be9190613b80565b6121cc6102c08701876147f9565b868181106121dc576121dc61466c565b905060e002016040518463ffffffff1660e01b815260040161220093929190614860565b600060405180830381600087803b15801561221a57600080fd5b505af115801561222e573d6000803e3d6000fd5b5050505080600101905061215e565b505b600061224f6102e0830183614604565b9050111561147b5760005b6122686102e0830183614604565b90508110156110e9576040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091523063511aa6446122c06080860160608701613b80565b6122ce6102e0870187614604565b868181106122de576122de61466c565b90506020020160208101906122f39190613b80565b846040518463ffffffff1660e01b815260040161231293929190614929565b600060405180830381600087803b15801561232c57600080fd5b505af1158015612340573d6000803e3d6000fd5b505050508160010191505061225a565b612358612893565b600c612365828483614277565b507f905d981207a7d0b6c62cc46ab0be2a076d0298e4a86d0ab79882dbd01ac373788282604051610ba0929190614391565b6060600380546109fc90613db1565b816123b081612679565b610afd8383612f78565b8373ffffffffffffffffffffffffffffffffffffffff811633146123e1576123e133612679565b6123ed8585858561300f565b5050505050565b60606123ff8261262b565b612435576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061243f612ef2565b9050805160000361245f576040518060200160405280600081525061248a565b8061246984613079565b60405160200161247a9291906149c5565b6040516020818303038152906040525b9392505050565b612499612893565b6124a283612923565b6040517f7f2a5cca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528215156024830152841690637f2a5cca90604401610ff4565b6060600c80546109fc90613db1565b612515612987565b73ffffffffffffffffffffffffffffffffffffffff8116612562576040517f7448fbae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da90602001610f80565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806109e757506109e7826130db565b60008160011115801561263f575060005482105b80156109e75750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b6daaeb6d7670e522a718067333cd4e3b1561147b576040517fc617113400000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561270c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273091906149f4565b61147b576040517fede71dcc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ef4565b6000612789826110ed565b90503373ffffffffffffffffffffffffffffffffffffffff8216146128125773ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832033845290915290205460ff16612812576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b3033146128e96128b860085473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161490565b176000036113c2576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16151560011461147b576040517f15e26ff300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff1633146113c2576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006129e382612e19565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612a4a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040902080543380821473ffffffffffffffffffffffffffffffffffffffff881690911417612ae75773ffffffffffffffffffffffffffffffffffffffff8616600090815260076020908152604080832033845290915290205460ff16612ae7576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516612b34576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015612b3f57600082555b73ffffffffffffffffffffffffffffffffffffffff86811660009081526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600460205260408120919091557c020000000000000000000000000000000000000000000000000000000084169003612c2e57600184016000818152600460205260408120549003612c2c576000548114612c2c5760008181526004602052604090208490555b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610c76565b610afd838383604051806020016040528060008152506123ba565b6011548160005b82811015612d385760006010600060118481548110612cd157612cd161466c565b60009182526020808320919091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101612cb0565b5060005b81811015612dcc57600160106000878785818110612d5c57612d5c61466c565b9050602002016020810190612d719190613b80565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101612d3c565b50612dd960118585613500565b507fbbd3b69c138de4d317d0bc4290282c4e1cbd1e58b579a5b4f114b598c237454d8484604051612e0b929190614a11565b60405180910390a150505050565b60008180600111612ea657600054811015612ea657600081815260046020526040812054907c010000000000000000000000000000000000000000000000000000000082169003612ea4575b8060000361248a57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600081815260046020526040902054612e65565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110e98282604051806020016040528060008152506131bc565b6060600b80546109fc90613db1565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b33600081815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61301a848484610ce4565b73ffffffffffffffffffffffffffffffffffffffff83163b15610d165761304384848484613248565b610d16576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061309357508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061316e57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806109e75750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b6131c683836133c2565b73ffffffffffffffffffffffffffffffffffffffff83163b15610afd576000548281035b6131fd6000868380600101945086613248565b613233576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106131ea5781600054146123ed57600080fd5b6040517f150b7a0200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906132a3903390899088908890600401614a6c565b6020604051808303816000875af19250505080156132fc575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526132f991810190614aab565b60015b613373573d80801561332a576040519150601f19603f3d011682016040523d82523d6000602084013e61332f565b606091505b50805160000361336b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490505b949350505050565b6000805490829003613400576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146134bc57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101613484565b50816000036134f7576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b828054828255906000526020600020908101928215613578579160200282015b828111156135785781547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff843516178255602090920191600190910190613520565b50613584929150613588565b5090565b5b808211156135845760008155600101613589565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461147b57600080fd5b6000602082840312156135dd57600080fd5b813561248a8161359d565b60005b838110156136035781810151838201526020016135eb565b50506000910152565b600081518084526136248160208601602086016135e8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061248a602083018461360c565b60006020828403121561367b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461147b57600080fd5b600080604083850312156136b757600080fd5b82356136c281613682565b946020939093013593505050565b600080604083850312156136e357600080fd5b50508035926020909101359150565b60008082840360e081121561370657600080fd5b833561371181613682565b925060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201121561374357600080fd5b506020830190509250929050565b60008060006060848603121561376657600080fd5b833561377181613682565b9250602084013561378181613682565b929592945050506040919091013590565b600080604083850312156137a557600080fd5b82356137b081613682565b9150602083013567ffffffffffffffff8111156137cc57600080fd5b8301606081860312156137de57600080fd5b809150509250929050565b6000604082840312156137fb57600080fd5b50919050565b801515811461147b57600080fd5b803561381a81613801565b919050565b60008060006060848603121561383457600080fd5b833561383f81613682565b9250602084013561384f81613682565b9150604084013561385f81613801565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156138bc576138bc61386a565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156139095761390961386a565b604052919050565b803569ffffffffffffffffffff8116811461381a57600080fd5b803562ffffff8116811461381a57600080fd5b803564ffffffffff8116811461381a57600080fd5b803561ffff8116811461381a57600080fd5b600080600083850361012081121561397c57600080fd5b843561398781613682565b9350602085013561399781613682565b925060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0820112156139c957600080fd5b506139d2613899565b6139de60408601613911565b81526139ec6060860161392b565b60208201526139fd6080860161393e565b6040820152613a0e60a0860161393e565b6060820152613a1f60c0860161393e565b6080820152613a3060e08601613953565b60a0820152613a426101008601613953565b60c0820152809150509250925092565b60008083601f840112613a6457600080fd5b50813567ffffffffffffffff811115613a7c57600080fd5b602083019150836020828501011115613a9457600080fd5b9250929050565b60008060208385031215613aae57600080fd5b823567ffffffffffffffff811115613ac557600080fd5b613ad185828601613a52565b90969095509350505050565b60008060208385031215613af057600080fd5b823567ffffffffffffffff80821115613b0857600080fd5b818501915085601f830112613b1c57600080fd5b813581811115613b2b57600080fd5b8660208260051b8501011115613b4057600080fd5b60209290920196919550909350505050565b60008060408385031215613b6557600080fd5b8235613b7081613682565b915060208301356137de81613682565b600060208284031215613b9257600080fd5b813561248a81613682565b600080600060408486031215613bb257600080fd5b8335613bbd81613682565b9250602084013567ffffffffffffffff811115613bd957600080fd5b613be586828701613a52565b9497909650939450505050565b6000806000838503610140811215613c0957600080fd5b8435613c1481613682565b93506020850135613c2481613682565b92506101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc082011215613c5757600080fd5b506040840190509250925092565b600060208284031215613c7757600080fd5b813567ffffffffffffffff811115613c8e57600080fd5b8201610300818503121561248a57600080fd5b60008060408385031215613cb457600080fd5b8235613cbf81613682565b915060208301356137de81613801565b60008060008060808587031215613ce557600080fd5b8435613cf081613682565b9350602085810135613d0181613682565b935060408601359250606086013567ffffffffffffffff80821115613d2557600080fd5b818801915088601f830112613d3957600080fd5b813581811115613d4b57613d4b61386a565b613d7b847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016138c2565b91508082528984828501011115613d9157600080fd5b808484018584013760008482840101525080935050505092959194509250565b600181811c90821680613dc557607f821691505b6020821081036137fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b803565ffffffffffff8116811461381a57600080fd5b69ffffffffffffffffffff613e2882613911565b168252613e3760208201613dfe565b65ffffffffffff808216602085015280613e5360408501613dfe565b1660408501525050613e6760608201613953565b61ffff808216606085015280613e7f60808501613953565b166080850152505060a0810135613e9581613801565b80151560a0840152505050565b60c081016109e78284613e14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176109e7576109e7613eb0565b600082613f2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613faf57600080fd5b830160208101925035905067ffffffffffffffff811115613fcf57600080fd5b803603821315613a9457600080fd5b600060608301823584526020808401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811261401e57600080fd5b8401818101903567ffffffffffffffff81111561403a57600080fd5b8060051b80360383131561404d57600080fd5b6060848901529381905260809387018401938290880160005b838110156140be577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a880301825261409f8386613f7a565b6140aa898284613f31565b985050509185019190850190600101614066565b5050505050506140d16040840184613f7a565b85830360408701526140e4838284613f31565b9695505050505050565b60208152600061248a6020830184613fde565b6bffffffffffffffffffffffff8116811461147b57600080fd5b60006020828403121561412d57600080fd5b813561248a81614101565b813561414381613682565b73ffffffffffffffffffffffffffffffffffffffff811690507fffffffffffffffffffffffff00000000000000000000000000000000000000008181845416178355602084013561419381614101565b60a01b1617905550565b73ffffffffffffffffffffffffffffffffffffffff83168152610100810161248a602083018469ffffffffffffffffffff815116825262ffffff6020820151166020830152604081015164ffffffffff8082166040850152806060840151166060850152806080840151166080850152505060a081015161ffff80821660a08501528060c08401511660c085015250505050565b601f821115610afd57600081815260208120601f850160051c810160208610156142585750805b601f850160051c820191505b81811015610c7657828155600101614264565b67ffffffffffffffff83111561428f5761428f61386a565b6142a38361429d8354613db1565b83614231565b6000601f8411600181146142f557600085156142bf5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556123ed565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156143445786850135825560209485019460019092019101614324565b508682101561437f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b6020815260006133ba602083018486613f31565b808201808211156109e7576109e7613eb0565b803563ffffffff8116811461381a57600080fd5b69ffffffffffffffffffff6143e082613911565b16825261ffff6143f260208301613953565b16602083015261440460408201613dfe565b65ffffffffffff80821660408501528061442060608501613dfe565b1660608501525050608081013560ff8116811461443c57600080fd5b60ff16608083015261445060a082016143b8565b63ffffffff1660a083015261446760c08201613953565b61ffff1660c083015261447c60e0820161380f565b80151560e0840152505050565b73ffffffffffffffffffffffffffffffffffffffff83168152610120810161248a60208301846143cc565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126144e957600080fd5b83018035915067ffffffffffffffff82111561450457600080fd5b602001915036819003821315613a9457600080fd5b60006020828403121561452b57600080fd5b61248a82613dfe565b73ffffffffffffffffffffffffffffffffffffffff8316815260e0810161248a6020830184613e14565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152600061458e604083018486613f31565b95945050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181126145cb57600080fd5b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006133ba6040830184613fde565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261463957600080fd5b83018035915067ffffffffffffffff82111561465457600080fd5b6020019150600581901b3603821315613a9457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126146d057600080fd5b83018035915067ffffffffffffffff8211156146eb57600080fd5b6020019150600881901b3603821315613a9457600080fd5b73ffffffffffffffffffffffffffffffffffffffff84811682528316602082015261014081016133ba60408301846143cc565b60006101408201905073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525069ffffffffffffffffffff835116604083015261ffff602084015116606083015265ffffffffffff604084015116608083015260608301516147ae60a084018265ffffffffffff169052565b50608083015160ff811660c08401525060a083015163ffffffff811660e08401525060c083015161ffff81166101008401525060e08301518015156101208401525b50949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261482e57600080fd5b83018035915067ffffffffffffffff82111561484957600080fd5b602001915060e081023603821315613a9457600080fd5b73ffffffffffffffffffffffffffffffffffffffff848116825283166020820152610120810169ffffffffffffffffffff61489a84613911565b16604083015262ffffff6148b06020850161392b565b1660608301526148c26040840161393e565b64ffffffffff8082166080850152806148dd6060870161393e565b1660a0850152806148f06080870161393e565b1660c0850152505061490460a08401613953565b61ffff1660e083015261491960c08401613953565b61ffff81166101008401526147f0565b73ffffffffffffffffffffffffffffffffffffffff84811682528316602082015261012081016133ba604083018469ffffffffffffffffffff815116825262ffffff6020820151166020830152604081015164ffffffffff8082166040850152806060840151166060850152806080840151166080850152505060a081015161ffff80821660a08501528060c08401511660c085015250505050565b600083516149d78184602088016135e8565b8351908301906149eb8183602088016135e8565b01949350505050565b600060208284031215614a0657600080fd5b815161248a81613801565b60208082528181018390526000908460408401835b86811015614a61578235614a3981613682565b73ffffffffffffffffffffffffffffffffffffffff1682529183019190830190600101614a26565b509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526140e4608083018461360c565b600060208284031215614abd57600080fd5b815161248a8161359d56fea2646970667358221220a6631fc135eda6340a2482f0dc52a62efe2b341e779495a95ca1ed3db8a87f1864736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007414141205649500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064141415649500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000005ea00ac477b1030ce78506496e8c2de24bf5