[ { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" }, { "internalType": "uint256", "name": "initialMythicalLimit", "type": "uint256" }, { "internalType": "uint256", "name": "initialUserMintLimit", "type": "uint256" }, { "internalType": "uint256", "name": "initialMintingFee", "type": "uint256" }, { "internalType": "address", "name": "initialReceiveWallet", "type": "address" }, { "internalType": "string", "name": "initialBaseTokenURI", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ERC721EnumerableForbiddenBatchMint", "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": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "AllowedMinterUpdated", "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": "newBaseTokenURI", "type": "string" } ], "name": "BaseTokenURISet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Minted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "MintingFeeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "MythicalLimitUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newReceiveWallet", "type": "address" } ], "name": "ReceiveWalletUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RoyaltiesClaimed", "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": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "UserMintLimitUpdated", "type": "event" }, { "inputs": [], "name": "MythicalLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "addRoyalties", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "numberOfTokens", "type": "uint256" } ], "name": "adminMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "allowedMinters", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimAllRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokensToClaim", "type": "uint256[]" } ], "name": "claimRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "claimedRoyalties", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRoyalties", "outputs": [ { "internalType": "uint256", "name": "", "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": [], "name": "getContractInfo", "outputs": [ { "internalType": "uint256", "name": "_mintedCount", "type": "uint256" }, { "internalType": "uint256", "name": "_MythicalLimit", "type": "uint256" }, { "internalType": "uint256", "name": "_userMintLimit", "type": "uint256" }, { "internalType": "uint256", "name": "_mintingFee", "type": "uint256" }, { "internalType": "bool", "name": "_paused", "type": "bool" }, { "internalType": "uint256", "name": "_totalRoyalties", "type": "uint256" }, { "internalType": "uint256", "name": "_currentRoyalties", "type": "uint256" }, { "internalType": "address", "name": "_receiveWallet", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "getRewardsToken", "outputs": [ { "internalType": "uint256", "name": "rewards", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "getRoyalties", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "getRoyaltiesDetails", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "royalties", "type": "uint256" } ], "internalType": "struct MythicalZombabies.TokenInfo[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "isAllowedMinter", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numberOfTokens", "type": "uint256" } ], "name": "mintMany", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "mintedAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintedCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintingFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "receiveWallet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "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": "minter", "type": "address" }, { "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "setAllowedMinter", "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": "newBaseTokenURI", "type": "string" } ], "name": "setBaseTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "setMintingFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "setMythicalLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newReceiveWallet", "type": "address" } ], "name": "setReceiveWallet", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "setUserMintLimit", "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "totalRoyalties", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "userMintLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userMintedCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801562000010575f80fd5b5060405162005b1138038062005b1183398181016040528101906200003691906200063b565b856040518060400160405280601281526020017f4d7974686963616c205a6f6d62616269657300000000000000000000000000008152506040518060400160405280600681526020017f435a424142590000000000000000000000000000000000000000000000000000815250815f9081620000b3919062000920565b508060019081620000c5919062000920565b5050506001600b819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000143575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200013a919062000a15565b60405180910390fd5b6200015481620001f260201b60201c565b5084600f8190555083601081905550826011819055508160155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d9081620001bb919062000920565b505f60125f6101000a81548160ff021916908315150217905550620001e686620002b560201b60201c565b50505050505062000a30565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002c56200034c60201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000338575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200032f919062000a15565b60405180910390fd5b6200034981620001f260201b60201c565b50565b6200035c620003ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000382620003f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003ec57620003ae620003ee60201b60201c565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401620003e3919062000a15565b60405180910390fd5b565b5f33905090565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000459826200042e565b9050919050565b6200046b816200044d565b811462000476575f80fd5b50565b5f81519050620004898162000460565b92915050565b5f819050919050565b620004a3816200048f565b8114620004ae575f80fd5b50565b5f81519050620004c18162000498565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200051782620004cf565b810181811067ffffffffffffffff82111715620005395762000538620004df565b5b80604052505050565b5f6200054d6200041d565b90506200055b82826200050c565b919050565b5f67ffffffffffffffff8211156200057d576200057c620004df565b5b6200058882620004cf565b9050602081019050919050565b5f5b83811015620005b457808201518184015260208101905062000597565b5f8484015250505050565b5f620005d5620005cf8462000560565b62000542565b905082815260208101848484011115620005f457620005f3620004cb565b5b6200060184828562000595565b509392505050565b5f82601f83011262000620576200061f620004c7565b5b815162000632848260208601620005bf565b91505092915050565b5f805f805f8060c0878903121562000658576200065762000426565b5b5f6200066789828a0162000479565b96505060206200067a89828a01620004b1565b95505060406200068d89828a01620004b1565b9450506060620006a089828a01620004b1565b9350506080620006b389828a0162000479565b92505060a087015167ffffffffffffffff811115620006d757620006d66200042a565b5b620006e589828a0162000609565b9150509295509295509295565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200074157607f821691505b602082108103620007575762000756620006fc565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620007bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200077e565b620007c786836200077e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200080862000802620007fc846200048f565b620007df565b6200048f565b9050919050565b5f819050919050565b6200082383620007e8565b6200083b62000832826200080f565b8484546200078a565b825550505050565b5f90565b6200085162000843565b6200085e81848462000818565b505050565b5b818110156200088557620008795f8262000847565b60018101905062000864565b5050565b601f821115620008d4576200089e816200075d565b620008a9846200076f565b81016020851015620008b9578190505b620008d1620008c8856200076f565b83018262000863565b50505b505050565b5f82821c905092915050565b5f620008f65f1984600802620008d9565b1980831691505092915050565b5f620009108383620008e5565b9150826002028217905092915050565b6200092b82620006f2565b67ffffffffffffffff811115620009475762000946620004df565b5b62000953825462000729565b6200096082828562000889565b5f60209050601f83116001811462000996575f841562000981578287015190505b6200098d858262000903565b865550620009fc565b601f198416620009a6866200075d565b5f5b82811015620009cf57848901518255600182019150602085019450602081019050620009a8565b86831015620009ef5784890151620009eb601f891682620008e5565b8355505b6001600288020188555050505b505050505050565b62000a0f816200044d565b82525050565b5f60208201905062000a2a5f83018462000a04565b92915050565b6150d38062000a3e5f395ff3fe608060405260043610610319575f3560e01c80635d313295116101aa5780638da5cb5b116100f6578063d7446e9c11610094578063e985e9c51161006e578063e985e9c514610b48578063f2fde38b14610b84578063f5fe2ac514610bac578063fbbf8cc314610be857610319565b8063d7446e9c14610aec578063db4f6d3114610b16578063e58306f914610b2057610319565b8063b88d4fde116100d0578063b88d4fde14610a36578063c75d62b914610a5e578063c87b56dd14610a86578063cf721b1514610ac257610319565b80638da5cb5b146109ba57806395d89b41146109e4578063a22cb46514610a0e57610319565b806370a08231116101635780638456cb591161013d5780638456cb5914610928578063853828b61461093e57806386d026081461095457806386fd96941461097e57610319565b806370a08231146108a5578063715018a6146108e15780637cc1f867146108f757610319565b80635d313295146107895780635e2e6eb0146107b35780636352211e146107ef57806369a31fc61461082b5780636af9c205146108535780636bc1ef231461087b57610319565b80632e1a7d4d1161026957806342842e0e116102225780634f6ccce7116101fc5780634f6ccce7146106e3578063547eafd01461071f5780635a64ad95146107355780635c975abb1461075f57610319565b806342842e0e1461066957806342966c68146106915780634370c3da146106b957610319565b80632e1a7d4d1461054f5780632f745c591461057757806330176e13146105b35780633cd972ac146105db5780633f4ba83a14610617578063423afa661461062d57610319565b80631267a6ab116102d657806318160ddd116102b057806318160ddd146104995780631f3b4c90146104c3578063238a4709146104ff57806323b872dd1461052757610319565b80631267a6ab1461040d57806313ece8161461043557806314556a561461045d57610319565b806301ffc9a71461031d578063059513a61461035957806306fdde0314610375578063081812fc1461039f578063095ea7b3146103db5780631249c58b14610403575b5f80fd5b348015610328575f80fd5b50610343600480360381019061033e9190613b54565b610c24565b6040516103509190613b99565b60405180910390f35b610373600480360381019061036e9190613be5565b610c35565b005b348015610380575f80fd5b50610389610f0d565b6040516103969190613c9a565b60405180910390f35b3480156103aa575f80fd5b506103c560048036038101906103c09190613be5565b610f9c565b6040516103d29190613cf9565b60405180910390f35b3480156103e6575f80fd5b5061040160048036038101906103fc9190613d3c565b610fb7565b005b61040b610fcd565b005b348015610418575f80fd5b50610433600480360381019061042e9190613d7a565b611263565b005b348015610440575f80fd5b5061045b60048036038101906104569190613ee5565b61135f565b005b348015610468575f80fd5b50610483600480360381019061047e9190613d7a565b6114ed565b6040516104909190613f3b565b60405180910390f35b3480156104a4575f80fd5b506104ad61155b565b6040516104ba9190613f3b565b60405180910390f35b3480156104ce575f80fd5b506104e960048036038101906104e49190613d7a565b611567565b6040516104f69190613b99565b60405180910390f35b34801561050a575f80fd5b5061052560048036038101906105209190613be5565b6115b9565b005b348015610532575f80fd5b5061054d60048036038101906105489190613f54565b611602565b005b34801561055a575f80fd5b5061057560048036038101906105709190613be5565b611701565b005b348015610582575f80fd5b5061059d60048036038101906105989190613d3c565b6117f6565b6040516105aa9190613f3b565b60405180910390f35b3480156105be575f80fd5b506105d960048036038101906105d49190614054565b61189a565b005b3480156105e6575f80fd5b5061060160048036038101906105fc9190613be5565b6118ec565b60405161060e9190613f3b565b60405180910390f35b348015610622575f80fd5b5061062b61191e565b005b348015610638575f80fd5b50610653600480360381019061064e9190613d7a565b6119d2565b6040516106609190613b99565b60405180910390f35b348015610674575f80fd5b5061068f600480360381019061068a9190613f54565b6119ef565b005b34801561069c575f80fd5b506106b760048036038101906106b29190613be5565b611a0e565b005b3480156106c4575f80fd5b506106cd611a22565b6040516106da9190613f3b565b60405180910390f35b3480156106ee575f80fd5b5061070960048036038101906107049190613be5565b611a28565b6040516107169190613f3b565b60405180910390f35b34801561072a575f80fd5b50610733611a9a565b005b348015610740575f80fd5b50610749611be6565b6040516107569190613f3b565b60405180910390f35b34801561076a575f80fd5b50610773611bec565b6040516107809190613b99565b60405180910390f35b348015610794575f80fd5b5061079d611bfe565b6040516107aa9190613cf9565b60405180910390f35b3480156107be575f80fd5b506107d960048036038101906107d49190613be5565b611c23565b6040516107e69190613f3b565b60405180910390f35b3480156107fa575f80fd5b5061081560048036038101906108109190613be5565b611c38565b6040516108229190613cf9565b60405180910390f35b348015610836575f80fd5b50610851600480360381019061084c9190613be5565b611c49565b005b34801561085e575f80fd5b50610879600480360381019061087491906140c5565b611c92565b005b348015610886575f80fd5b5061088f611d40565b60405161089c9190613f3b565b60405180910390f35b3480156108b0575f80fd5b506108cb60048036038101906108c69190613d7a565b611d46565b6040516108d89190613f3b565b60405180910390f35b3480156108ec575f80fd5b506108f5611dfc565b005b348015610902575f80fd5b5061090b611e0f565b60405161091f989796959493929190614103565b60405180910390f35b348015610933575f80fd5b5061093c611e74565b005b348015610949575f80fd5b50610952611f2a565b005b34801561095f575f80fd5b50610968611fd1565b6040516109759190613f3b565b60405180910390f35b348015610989575f80fd5b506109a4600480360381019061099f9190613d7a565b611fd7565b6040516109b19190614263565b60405180910390f35b3480156109c5575f80fd5b506109ce6120c6565b6040516109db9190613cf9565b60405180910390f35b3480156109ef575f80fd5b506109f86120ee565b604051610a059190613c9a565b60405180910390f35b348015610a19575f80fd5b50610a346004803603810190610a2f91906140c5565b61217e565b005b348015610a41575f80fd5b50610a5c6004803603810190610a579190614321565b612194565b005b348015610a69575f80fd5b50610a846004803603810190610a7f9190613be5565b6121b9565b005b348015610a91575f80fd5b50610aac6004803603810190610aa79190613be5565b612247565b604051610ab99190613c9a565b60405180910390f35b348015610acd575f80fd5b50610ad66122f1565b604051610ae39190613f3b565b60405180910390f35b348015610af7575f80fd5b50610b006122f7565b604051610b0d9190613f3b565b60405180910390f35b610b1e6122fd565b005b348015610b2b575f80fd5b50610b466004803603810190610b419190613d3c565b61236f565b005b348015610b53575f80fd5b50610b6e6004803603810190610b6991906143a1565b61252b565b604051610b7b9190613b99565b60405180910390f35b348015610b8f575f80fd5b50610baa6004803603810190610ba59190613d7a565b6125b9565b005b348015610bb7575f80fd5b50610bd26004803603810190610bcd9190613d7a565b61263d565b604051610bdf9190613f3b565b60405180910390f35b348015610bf3575f80fd5b50610c0e6004803603810190610c099190613d7a565b612652565b604051610c1b9190613f3b565b60405180910390f35b5f610c2e82612698565b9050919050565b60125f9054906101000a900460ff1615610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90614429565b60405180910390fd5b600f5481600e54610c959190614474565b1115610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906144f1565b60405180910390fd5b6010548160175f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610d229190614474565b1115610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90614559565b60405180910390fd5b80601154610d719190614577565b341015610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90614602565b60405180910390fd5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015610e17573d5f803e3d5ffd5b505f5b81811015610f09575f6001600e54610e329190614474565b9050610e3e3382612711565b600e5f815480929190610e5090614620565b919050555060175f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190610ea290614620565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe82604051610eed9190613f3b565b60405180910390a2508080610f0190614620565b915050610e1a565b5050565b60605f8054610f1b90614694565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4790614694565b8015610f925780601f10610f6957610100808354040283529160200191610f92565b820191905f5260205f20905b815481529060010190602001808311610f7557829003601f168201915b5050505050905090565b5f610fa68261272e565b50610fb0826127b4565b9050919050565b610fc98282610fc46127ed565b6127f4565b5050565b60125f9054906101000a900460ff161561101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390614429565b60405180910390fd5b600f54600e5410611062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611059906144f1565b60405180910390fd5b60105460175f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614559565b60405180910390fd5b601154341015611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f90614602565b60405180910390fd5b5f6001600e546111389190614474565b90506111443382612711565b600e5f81548092919061115690614620565b919050555060175f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154809291906111a890614620565b919050555060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015611211573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe826040516112589190613f3b565b60405180910390a250565b61126b612806565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d09061470e565b60405180910390fd5b8060155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f5ad53071836d18d60bdda8b27a74d8f7c8e39517c8326d871587de3da6ad194a60405160405180910390a250565b60125f9054906101000a900460ff16156113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590614429565b60405180910390fd5b5f805b8251811015611445575f8382815181106113ce576113cd61472c565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff166113f882611c38565b73ffffffffffffffffffffffffffffffffffffffff16036114395761141c816118ec565b8301925060145460185f8381526020019081526020015f20819055505b816001019150506113b1565b505f47905080821115611456578091505b3373ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015611499573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167f8fbbda19f4a70036f6f585dc4160142a8fa2a20ffb9393d23274f78de4e39888836040516114e09190613f3b565b60405180910390a2505050565b5f805f90505f6114fc84611d46565b90505f5b8181101561153f575f61151386836117f6565b905061151e816118ec565b846115299190614474565b935050808061153790614620565b915050611500565b505f47905080831115611550578092505b829350505050919050565b5f600980549050905090565b5f60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6115c1612806565b806011819055507f9a7c33ea6df1d6d7f2348eda287c9493ced6ba1e043a8e681f50075dc9cdd4ca816040516115f79190613f3b565b60405180910390a150565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611672575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016116699190613cf9565b60405180910390fd5b5f61168583836116806127ed565b61288d565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116fb578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016116f293929190614759565b60405180910390fd5b50505050565b611709612806565b5f811161174b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611742906147d8565b60405180910390fd5b601354811115611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790614840565b60405180910390fd5b8060135f8282546117a1919061485e565b925050819055506117b06120c6565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156117f2573d5f803e3d5ffd5b5050565b5f61180083611d46565b82106118455782826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161183c929190614891565b60405180910390fd5b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b6118a2612806565b80600d90816118b19190614a55565b507f2e9b34e5ec7377754a85ec13c1e9a442a00db0c46dbdefbb143dd0371fd20c1c816040516118e19190613c9a565b60405180910390a150565b5f60185f8381526020019081526020015f205460145461190c919061485e565b816119179190614474565b9050919050565b611926612806565b60125f9054906101000a900460ff16611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b90614b6e565b60405180910390fd5b5f60125f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa60405160405180910390a2565b6016602052805f5260405f205f915054906101000a900460ff1681565b611a0983838360405180602001604052805f815250612194565b505050565b611a16612806565b611a1f816128a2565b50565b600f5481565b5f611a3161155b565b8210611a76575f826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401611a6d929190614891565b60405180910390fd5b60098281548110611a8a57611a8961472c565b5b905f5260205f2001549050919050565b60125f9054906101000a900460ff1615611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae090614429565b60405180910390fd5b5f80611af433611d46565b90505f5b81811015611b3e575f611b0b33836117f6565b9050611b16816118ec565b8401935060145460185f8381526020019081526020015f208190555081600101915050611af8565b505f47905080831115611b4f578092505b3373ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015611b92573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167f8fbbda19f4a70036f6f585dc4160142a8fa2a20ffb9393d23274f78de4e3988884604051611bd99190613f3b565b60405180910390a2505050565b60115481565b60125f9054906101000a900460ff1681565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6018602052805f5260405f205f915090505481565b5f611c428261272e565b9050919050565b611c51612806565b806010819055507ff6a8d7571cd2c93daf4f8853048d29d3c5881d927c63e772b32ca22e8ecc2dda81604051611c879190613f3b565b60405180910390a150565b611c9a612806565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fbc84b6b123fbadb172ea788f244995ef2707d76d3b337f1abfb1e6b68bfcb23882604051611d349190613b99565b60405180910390a25050565b60105481565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db7575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401611dae9190613cf9565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611e04612806565b611e0d5f612924565b565b5f805f805f805f80600e54600f5460105460115460125f9054906101000a900460ff1660135460145460155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16975097509750975097509750975097509091929394959697565b611e7c612806565b60125f9054906101000a900460ff1615611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614429565b60405180910390fd5b600160125f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25860405160405180910390a2565b611f32612806565b5f60135411611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90614bd6565b60405180910390fd5b5f60135490505f601381905550611f8b6120c6565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611fcd573d5f803e3d5ffd5b5050565b60135481565b60605f611fe383611d46565b90505f8167ffffffffffffffff81111561200057611fff613da9565b5b60405190808252806020026020018201604052801561203957816020015b612026613ad6565b81526020019060019003908161201e5790505b5090505f5b828110156120bb575f61205186836117f6565b90505f61205d826118ec565b9050818484815181106120735761207261472c565b5b60200260200101515f018181525050808484815181106120965761209561472c565b5b60200260200101516020018181525050505080806120b390614620565b91505061203e565b508092505050919050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546120fd90614694565b80601f016020809104026020016040519081016040528092919081815260200182805461212990614694565b80156121745780601f1061214b57610100808354040283529160200191612174565b820191905f5260205f20905b81548152906001019060200180831161215757829003601f168201915b5050505050905090565b6121906121896127ed565b83836129e7565b5050565b61219f848484611602565b6121b36121aa6127ed565b85858585612b50565b50505050565b6121c1612806565b600e54811015612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90614c64565b60405180910390fd5b80600f819055507f123c115a5f6b0c7ebab423676d7161b2e5ad93891263a55a745fd2ea51ba2a568160405161223c9190613f3b565b60405180910390a150565b60605f73ffffffffffffffffffffffffffffffffffffffff1661226983611c38565b73ffffffffffffffffffffffffffffffffffffffff16036122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690614cf2565b60405180910390fd5b600d6122ca83612cfc565b6040516020016122db929190614e14565b6040516020818303038152906040529050919050565b600e5481565b60145481565b5f341161233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614eb2565b60405180910390fd5b3460135f8282546123509190614474565b92505081905550600e546013546123679190614efd565b601481905550565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806123f657503373ffffffffffffffffffffffffffffffffffffffff166123de6120c6565b73ffffffffffffffffffffffffffffffffffffffff16145b612435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c90614f77565b60405180910390fd5b600f5481600e546124469190614474565b1115612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e906144f1565b60405180910390fd5b5f5b81811015612526575f6001600e546124a19190614474565b90506124ad8482612711565b600e5f8154809291906124bf90614620565b91905055508373ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8260405161250a9190613f3b565b60405180910390a250808061251e90614620565b915050612489565b505050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6125c1612806565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612631575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016126289190613cf9565b60405180910390fd5b61263a81612924565b50565b6017602052805f5260405f205f915090505481565b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061270a575061270982612dc6565b5b9050919050565b61272a828260405180602001604052805f815250612e26565b5050565b5f8061273983612e49565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127ab57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016127a29190613f3b565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6128018383836001612e82565b505050565b61280e6127ed565b73ffffffffffffffffffffffffffffffffffffffff1661282c6120c6565b73ffffffffffffffffffffffffffffffffffffffff161461288b5761284f6127ed565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016128829190613cf9565b60405180910390fd5b565b5f612899848484613041565b90509392505050565b5f6128ae5f835f61288d565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361292057816040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016129179190613f3b565b60405180910390fd5b5050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a5757816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401612a4e9190613cf9565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b439190613b99565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115612cf5578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b8152600401612bae9493929190614fe7565b6020604051808303815f875af1925050508015612be957506040513d601f19601f82011682018060405250810190612be69190615045565b60015b612c6a573d805f8114612c17576040519150601f19603f3d011682016040523d82523d5f602084013e612c1c565b606091505b505f815103612c6257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612c599190613cf9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612cf357836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612cea9190613cf9565b60405180910390fd5b505b5050505050565b60605f6001612d0a8461315b565b0190505f8167ffffffffffffffff811115612d2857612d27613da9565b5b6040519080825280601f01601f191660200182016040528015612d5a5781602001600182028036833780820191505090505b5090505f82602001820190505b600115612dbb578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612db057612daf614ed0565b5b0494505f8503612d67575b819350505050919050565b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e1f5750612e1e826132ac565b5b9050919050565b612e30838361338d565b612e44612e3b6127ed565b5f858585612b50565b505050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080612eba57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fec575f612ec98461272e565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f3357508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015612f465750612f44818461252b565b155b15612f8857826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401612f7f9190613cf9565b60405180910390fd5b8115612fea57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f8061304e858585613480565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036130915761308c8461368b565b6130d0565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130cf576130ce81856136cf565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036131115761310c846137a6565b613150565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461314f5761314e8585613866565b5b5b809150509392505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106131b7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816131ad576131ac614ed0565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106131f4576d04ee2d6d415b85acef810000000083816131ea576131e9614ed0565b5b0492506020810190505b662386f26fc10000831061322357662386f26fc10000838161321957613218614ed0565b5b0492506010810190505b6305f5e100831061324c576305f5e100838161324257613241614ed0565b5b0492506008810190505b612710831061327157612710838161326757613266614ed0565b5b0492506004810190505b60648310613294576064838161328a57613289614ed0565b5b0492506002810190505b600a83106132a3576001810190505b80915050919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061337657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806133865750613385826138ea565b5b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133fd575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016133f49190613cf9565b60405180910390fd5b5f61340983835f61288d565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461347b575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016134729190613cf9565b60405180910390fd5b505050565b5f8061348b84612e49565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134cc576134cb818486613953565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146135575761350b5f855f80612e82565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146135d657600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600980549050600a5f8381526020019081526020015f2081905550600981908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f6136d983611d46565b90505f60085f8481526020019081526020015f205490505f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050828214613778575f815f8581526020019081526020015f2054905080825f8581526020019081526020015f20819055508260085f8381526020019081526020015f2081905550505b60085f8581526020019081526020015f205f9055805f8481526020019081526020015f205f90555050505050565b5f60016009805490506137b9919061485e565b90505f600a5f8481526020019081526020015f205490505f600983815481106137e5576137e461472c565b5b905f5260205f200154905080600983815481106138055761380461472c565b5b905f5260205f20018190555081600a5f8381526020019081526020015f2081905550600a5f8581526020019081526020015f205f9055600980548061384d5761384c615070565b5b600190038181905f5260205f20015f9055905550505050565b5f600161387284611d46565b61387c919061485e565b90508160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060085f8481526020019081526020015f2081905550505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61395e838383613a16565b613a11575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139d257806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016139c99190613f3b565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401613a08929190614891565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613acd57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613a8e5750613a8d848461252b565b5b80613acc57508273ffffffffffffffffffffffffffffffffffffffff16613ab4836127b4565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b60405180604001604052805f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b3381613aff565b8114613b3d575f80fd5b50565b5f81359050613b4e81613b2a565b92915050565b5f60208284031215613b6957613b68613af7565b5b5f613b7684828501613b40565b91505092915050565b5f8115159050919050565b613b9381613b7f565b82525050565b5f602082019050613bac5f830184613b8a565b92915050565b5f819050919050565b613bc481613bb2565b8114613bce575f80fd5b50565b5f81359050613bdf81613bbb565b92915050565b5f60208284031215613bfa57613bf9613af7565b5b5f613c0784828501613bd1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613c47578082015181840152602081019050613c2c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c6c82613c10565b613c768185613c1a565b9350613c86818560208601613c2a565b613c8f81613c52565b840191505092915050565b5f6020820190508181035f830152613cb28184613c62565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ce382613cba565b9050919050565b613cf381613cd9565b82525050565b5f602082019050613d0c5f830184613cea565b92915050565b613d1b81613cd9565b8114613d25575f80fd5b50565b5f81359050613d3681613d12565b92915050565b5f8060408385031215613d5257613d51613af7565b5b5f613d5f85828601613d28565b9250506020613d7085828601613bd1565b9150509250929050565b5f60208284031215613d8f57613d8e613af7565b5b5f613d9c84828501613d28565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613ddf82613c52565b810181811067ffffffffffffffff82111715613dfe57613dfd613da9565b5b80604052505050565b5f613e10613aee565b9050613e1c8282613dd6565b919050565b5f67ffffffffffffffff821115613e3b57613e3a613da9565b5b602082029050602081019050919050565b5f80fd5b5f613e62613e5d84613e21565b613e07565b90508083825260208201905060208402830185811115613e8557613e84613e4c565b5b835b81811015613eae5780613e9a8882613bd1565b845260208401935050602081019050613e87565b5050509392505050565b5f82601f830112613ecc57613ecb613da5565b5b8135613edc848260208601613e50565b91505092915050565b5f60208284031215613efa57613ef9613af7565b5b5f82013567ffffffffffffffff811115613f1757613f16613afb565b5b613f2384828501613eb8565b91505092915050565b613f3581613bb2565b82525050565b5f602082019050613f4e5f830184613f2c565b92915050565b5f805f60608486031215613f6b57613f6a613af7565b5b5f613f7886828701613d28565b9350506020613f8986828701613d28565b9250506040613f9a86828701613bd1565b9150509250925092565b5f80fd5b5f67ffffffffffffffff821115613fc257613fc1613da9565b5b613fcb82613c52565b9050602081019050919050565b828183375f83830152505050565b5f613ff8613ff384613fa8565b613e07565b90508281526020810184848401111561401457614013613fa4565b5b61401f848285613fd8565b509392505050565b5f82601f83011261403b5761403a613da5565b5b813561404b848260208601613fe6565b91505092915050565b5f6020828403121561406957614068613af7565b5b5f82013567ffffffffffffffff81111561408657614085613afb565b5b61409284828501614027565b91505092915050565b6140a481613b7f565b81146140ae575f80fd5b50565b5f813590506140bf8161409b565b92915050565b5f80604083850312156140db576140da613af7565b5b5f6140e885828601613d28565b92505060206140f9858286016140b1565b9150509250929050565b5f610100820190506141175f83018b613f2c565b614124602083018a613f2c565b6141316040830189613f2c565b61413e6060830188613f2c565b61414b6080830187613b8a565b61415860a0830186613f2c565b61416560c0830185613f2c565b61417260e0830184613cea565b9998505050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6141b181613bb2565b82525050565b604082015f8201516141cb5f8501826141a8565b5060208201516141de60208501826141a8565b50505050565b5f6141ef83836141b7565b60408301905092915050565b5f602082019050919050565b5f6142118261417f565b61421b8185614189565b935061422683614199565b805f5b8381101561425657815161423d88826141e4565b9750614248836141fb565b925050600181019050614229565b5085935050505092915050565b5f6020820190508181035f83015261427b8184614207565b905092915050565b5f67ffffffffffffffff82111561429d5761429c613da9565b5b6142a682613c52565b9050602081019050919050565b5f6142c56142c084614283565b613e07565b9050828152602081018484840111156142e1576142e0613fa4565b5b6142ec848285613fd8565b509392505050565b5f82601f83011261430857614307613da5565b5b81356143188482602086016142b3565b91505092915050565b5f805f806080858703121561433957614338613af7565b5b5f61434687828801613d28565b945050602061435787828801613d28565b935050604061436887828801613bd1565b925050606085013567ffffffffffffffff81111561438957614388613afb565b5b614395878288016142f4565b91505092959194509250565b5f80604083850312156143b7576143b6613af7565b5b5f6143c485828601613d28565b92505060206143d585828601613d28565b9150509250929050565b7f436f6e74726163742069732070617573656400000000000000000000000000005f82015250565b5f614413601283613c1a565b915061441e826143df565b602082019050919050565b5f6020820190508181035f83015261444081614407565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61447e82613bb2565b915061448983613bb2565b92508282019050808211156144a1576144a0614447565b5b92915050565b7f4d6178204d7974686963616c204e465473206d696e74656400000000000000005f82015250565b5f6144db601883613c1a565b91506144e6826144a7565b602082019050919050565b5f6020820190508181035f830152614508816144cf565b9050919050565b7f55736572206d696e74206c696d697420726561636865640000000000000000005f82015250565b5f614543601783613c1a565b915061454e8261450f565b602082019050919050565b5f6020820190508181035f83015261457081614537565b9050919050565b5f61458182613bb2565b915061458c83613bb2565b925082820261459a81613bb2565b915082820484148315176145b1576145b0614447565b5b5092915050565b7f496e73756666696369656e742066756e647320666f72206d696e74696e6700005f82015250565b5f6145ec601e83613c1a565b91506145f7826145b8565b602082019050919050565b5f6020820190508181035f830152614619816145e0565b9050919050565b5f61462a82613bb2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361465c5761465b614447565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806146ab57607f821691505b6020821081036146be576146bd614667565b5b50919050565b7f496e76616c6964207265636569766520616464726573730000000000000000005f82015250565b5f6146f8601783613c1a565b9150614703826146c4565b602082019050919050565b5f6020820190508181035f830152614725816146ec565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60608201905061476c5f830186613cea565b6147796020830185613f2c565b6147866040830184613cea565b949350505050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f6147c2601d83613c1a565b91506147cd8261478e565b602082019050919050565b5f6020820190508181035f8301526147ef816147b6565b9050919050565b7f496e73756666696369656e7420726f79616c74696573000000000000000000005f82015250565b5f61482a601683613c1a565b9150614835826147f6565b602082019050919050565b5f6020820190508181035f8301526148578161481e565b9050919050565b5f61486882613bb2565b915061487383613bb2565b925082820390508181111561488b5761488a614447565b5b92915050565b5f6040820190506148a45f830185613cea565b6148b16020830184613f2c565b9392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026149147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826148d9565b61491e86836148d9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61495961495461494f84613bb2565b614936565b613bb2565b9050919050565b5f819050919050565b6149728361493f565b61498661497e82614960565b8484546148e5565b825550505050565b5f90565b61499a61498e565b6149a5818484614969565b505050565b5b818110156149c8576149bd5f82614992565b6001810190506149ab565b5050565b601f821115614a0d576149de816148b8565b6149e7846148ca565b810160208510156149f6578190505b614a0a614a02856148ca565b8301826149aa565b50505b505050565b5f82821c905092915050565b5f614a2d5f1984600802614a12565b1980831691505092915050565b5f614a458383614a1e565b9150826002028217905092915050565b614a5e82613c10565b67ffffffffffffffff811115614a7757614a76613da9565b5b614a818254614694565b614a8c8282856149cc565b5f60209050601f831160018114614abd575f8415614aab578287015190505b614ab58582614a3a565b865550614b1c565b601f198416614acb866148b8565b5f5b82811015614af257848901518255600182019150602085019450602081019050614acd565b86831015614b0f5784890151614b0b601f891682614a1e565b8355505b6001600288020188555050505b505050505050565b7f436f6e7472616374206973206e6f7420706175736564000000000000000000005f82015250565b5f614b58601683613c1a565b9150614b6382614b24565b602082019050919050565b5f6020820190508181035f830152614b8581614b4c565b9050919050565b7f4e6f20726f79616c7469657320746f20776974686472617700000000000000005f82015250565b5f614bc0601883613c1a565b9150614bcb82614b8c565b602082019050919050565b5f6020820190508181035f830152614bed81614bb4565b9050919050565b7f4e6577206c696d6974206d7573742062652067726561746572207468616e206f5f8201527f7220657175616c20746f2063757272656e74206d696e74656420636f756e7400602082015250565b5f614c4e603f83613c1a565b9150614c5982614bf4565b604082019050919050565b5f6020820190508181035f830152614c7b81614c42565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f614cdc602f83613c1a565b9150614ce782614c82565b604082019050919050565b5f6020820190508181035f830152614d0981614cd0565b9050919050565b5f81905092915050565b5f8154614d2681614694565b614d308186614d10565b9450600182165f8114614d4a5760018114614d5f57614d91565b60ff1983168652811515820286019350614d91565b614d68856148b8565b5f5b83811015614d8957815481890152600182019150602081019050614d6a565b838801955050505b50505092915050565b5f614da482613c10565b614dae8185614d10565b9350614dbe818560208601613c2a565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f614dfe600583614d10565b9150614e0982614dca565b600582019050919050565b5f614e1f8285614d1a565b9150614e2b8284614d9a565b9150614e3682614df2565b91508190509392505050565b7f416464696e67207a65726f20726f79616c74696573206973206e6f7420616c6c5f8201527f6f77656400000000000000000000000000000000000000000000000000000000602082015250565b5f614e9c602483613c1a565b9150614ea782614e42565b604082019050919050565b5f6020820190508181035f830152614ec981614e90565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614f0782613bb2565b9150614f1283613bb2565b925082614f2257614f21614ed0565b5b828204905092915050565b7f4e6f7420616c6c6f77656420746f206d696e74000000000000000000000000005f82015250565b5f614f61601383613c1a565b9150614f6c82614f2d565b602082019050919050565b5f6020820190508181035f830152614f8e81614f55565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f614fb982614f95565b614fc38185614f9f565b9350614fd3818560208601613c2a565b614fdc81613c52565b840191505092915050565b5f608082019050614ffa5f830187613cea565b6150076020830186613cea565b6150146040830185613f2c565b81810360608301526150268184614faf565b905095945050505050565b5f8151905061503f81613b2a565b92915050565b5f6020828403121561505a57615059613af7565b5b5f61506784828501615031565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea264697066735822122006c67d5dc49c0a7450cd81197be49a8a8b147c3004613365b57d4edb8e36445b64736f6c6343000814003300000000000000000000000021fd8019a2feeb44f165d24c8406d1a2a182718700000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000021fd8019a2feeb44f165d24c8406d1a2a182718700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006c68747470733a2f2f6d6167656e74612d7175696e74657373656e7469616c2d6372616e652d3431382e6d7970696e6174612e636c6f75642f697066732f516d644d6d6f597864327a41337466366d5a6d4a714a78553554463541346b514a6372566663594b354c584867632f0000000000000000000000000000000000000000