Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
95 CMCC
Holders
63
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 CMCCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CheerkatMeerkatsChessClub
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-06 */ //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "#31"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "#32"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "#33"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "#34"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "#35"); require(isContract(target), "#36"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "#37"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "#38"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "#39"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "#40"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } /** * @dev ERC721 token with storage based token URI management. */ /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "#41"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() internal virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } address payable internal dev = payable(0x568D418604db413081657065F13BC056be881347); address payable internal iv = payable(0xe21e3b2d4605282505e60D14A545a2Bce332E0e0); function _withdrawAll() internal virtual { uint256 balanceDev = address(this).balance*20/100; uint256 balanceIv = address(this).balance*15/100; uint256 balanceOwner = address(this).balance-balanceDev-balanceIv; payable(dev).transfer(balanceDev); payable(iv).transfer(balanceIv); payable(_msgSender()).transfer(balanceOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "#42"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "#43"); return string(buffer); } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "#44"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "#45"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "#46"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "#47"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "#48" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "#49"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "#50"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "#51"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "#52"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "#53"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "#54"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "#55"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "#56"); require(!_exists(tokenId), "#57"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "#58"); require(to != address(0), "#59"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("#60"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "#61"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } /**55 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract CheerkatMeerkatsChessClub is ERC721Enumerable, Ownable { uint public MAX_TOKEN = 10000; uint public basePrice = 40*10**15; // uint public basePriceBZC = 30*10**15; // mapping (uint256 => bool) public _whitelistBZC; string _baseTokenURI; bool public saleEnable = false; CheerkatMeerkatsChessClub internal BZC = CheerkatMeerkatsChessClub(0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D); // 0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D function setsaleEnable(bool _saleEnable) public onlyOwner { saleEnable = _saleEnable; } function setMaxToken(uint _MAX_TOKEN) public onlyOwner { MAX_TOKEN = _MAX_TOKEN; } function setBasePrice(uint _basePrice) public onlyOwner { basePrice = _basePrice; } function setBasePriceBZC(uint _basePriceBZC) public onlyOwner { basePriceBZC = _basePriceBZC; } constructor(string memory baseURI) ERC721("CheerkatMeerkatsChessClub", "CMCC") { setBaseURI(baseURI); } function mint(address _to, uint _count) public payable { require(msg.sender == _owner || saleEnable, "Sale not enable"); require(totalSupply() +_count <= MAX_TOKEN, "Exceeds limit"); require(_count <= 50, "Exceeds 50"); require(msg.value >= basePrice * _count || msg.sender == _owner , "Value below price"); for(uint i = 0; i < _count; i++){ _safeMint(_to, totalSupply()); } } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function tokensOfOwner(address _owner) external view returns(uint256[] memory) { uint tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function withdrawAll() public payable onlyOwner { _withdrawAll(); } //mint for BZC function CompletedMintForBZC(uint256 _BZCid) public view virtual returns (bool) { return _whitelistBZC[_BZCid]; } function TokenForMintAvailable(address _holder) public view virtual returns (uint256) { uint128 tokenAvailable = 0; uint256[] memory tokensId = new uint256[](BZC.balanceOf(_holder)); for(uint i = 0; i < BZC.balanceOf(_holder); i++){ tokensId[i] = BZC.tokenOfOwnerByIndex(_holder, i); if (_whitelistBZC[tokensId[i]]) {} else { tokenAvailable++; } } return tokenAvailable; } function mintForBAYC(uint _count) public payable{ require(msg.sender == _owner || saleEnable, "Sale not enable"); require(totalSupply() +_count <= MAX_TOKEN, "Exceeds limit"); require(TokenForMintAvailable(msg.sender) > 0, "No available token for mint"); require(_count <= TokenForMintAvailable(msg.sender), "Exceeds limit"); require(msg.value >= basePriceBZC * _count , "Value below price"); // mint counter per transaction uint tokenMintLimit = 0; //check ever token whitelist uint256[] memory tokensId = new uint256[](BZC.balanceOf(msg.sender)); for(uint i = 0; i < BZC.balanceOf(msg.sender); i++){ tokensId[i] = BZC.tokenOfOwnerByIndex(msg.sender, i); //if not true in whitelist, to mint token if (_whitelistBZC[tokensId[i]]) {} else { if(tokenMintLimit < _count) { _safeMint(msg.sender, totalSupply()); tokenMintLimit++; _whitelistBZC[tokensId[i]] = true; } } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_BZCid","type":"uint256"}],"name":"CompletedMintForBZC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"TokenForMintAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_whitelistBZC","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":[],"name":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePriceBZC","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintForBAYC","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[],"name":"saleEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_basePrice","type":"uint256"}],"name":"setBasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_basePriceBZC","type":"uint256"}],"name":"setBasePriceBZC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MAX_TOKEN","type":"uint256"}],"name":"setMaxToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_saleEnable","type":"bool"}],"name":"setsaleEnable","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","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":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405273568d418604db413081657065f13bc056be881347600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e21e3b2d4605282505e60d14a545a2bce332e0e0600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612710600d55668e1bc9bf040000600e55666a94d74f430000600f556000601260006101000a81548160ff02191690831515021790555073bc4ca0eda7647a8ab7c2061c2e118a18a936f13d601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200014757600080fd5b50604051620053143803806200531483398181016040528101906200016d919062000600565b6040518060400160405280601981526020017f43686565726b61744d6565726b6174734368657373436c7562000000000000008152506040518060400160405280600481526020017f434d4343000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001f1929190620003b3565b5080600190805190602001906200020a929190620003b3565b50505060006200021f620002d660201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002cf81620002de60201b60201c565b5062000739565b600033905090565b620002ee620002d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003146200038960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200036d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036490620006b2565b60405180910390fd5b806011908051906020019062000385929190620003b3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003c19062000703565b90600052602060002090601f016020900481019282620003e5576000855562000431565b82601f106200040057805160ff191683800117855562000431565b8280016001018555821562000431579182015b828111156200043057825182559160200191906001019062000413565b5b50905062000440919062000444565b5090565b5b808211156200045f57600081600090555060010162000445565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004cc8262000481565b810181811067ffffffffffffffff82111715620004ee57620004ed62000492565b5b80604052505050565b60006200050362000463565b9050620005118282620004c1565b919050565b600067ffffffffffffffff82111562000534576200053362000492565b5b6200053f8262000481565b9050602081019050919050565b60005b838110156200056c5780820151818401526020810190506200054f565b838111156200057c576000848401525b50505050565b600062000599620005938462000516565b620004f7565b905082815260208101848484011115620005b857620005b76200047c565b5b620005c58482856200054c565b509392505050565b600082601f830112620005e557620005e462000477565b5b8151620005f784826020860162000582565b91505092915050565b6000602082840312156200061957620006186200046d565b5b600082015167ffffffffffffffff8111156200063a576200063962000472565b5b6200064884828501620005cd565b91505092915050565b600082825260208201905092915050565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b60006200069a60038362000651565b9150620006a78262000662565b602082019050919050565b60006020820190508181036000830152620006cd816200068b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200071c57607f821691505b60208210811415620007335762000732620006d4565b5b50919050565b614bcb80620007496000396000f3fe6080604052600436106101f95760003560e01c80638462151c1161010d578063af328893116100a0578063c87b56dd1161006f578063c87b56dd14610740578063de4b32621461077d578063e985e9c5146107a6578063f2fde38b146107e3578063fe4ca8471461080c576101f9565b8063af328893146106a7578063b02636fd146106c3578063b88d4fde146106ec578063c7876ea414610715576101f9565b806392642024116100dc57806392642024146105d957806395d89b4114610616578063a22cb46514610641578063a81893121461066a576101f9565b80638462151c1461053c578063853828b6146105795780638da5cb5b14610583578063901dda54146105ae576101f9565b806340c10f19116101905780635f7738791161015f5780635f773879146104315780636352211e1461045a5780636923aebc146104975780636e1bd323146104d457806370a08231146104ff576101f9565b806340c10f191461038657806342842e0e146103a25780634f6ccce7146103cb57806355f804b314610408576101f9565b806309acc2cb116101cc57806309acc2cb146102cc57806318160ddd146102f557806323b872dd146103205780632f745c5914610349576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613454565b610837565b604051610232919061349c565b60405180910390f35b34801561024757600080fd5b506102506108b1565b60405161025d9190613550565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906135a8565b610943565b60405161029a9190613616565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c5919061365d565b6109c8565b005b3480156102d857600080fd5b506102f360048036038101906102ee91906135a8565b610ae0565b005b34801561030157600080fd5b5061030a610b66565b60405161031791906136ac565b60405180910390f35b34801561032c57600080fd5b50610347600480360381019061034291906136c7565b610b73565b005b34801561035557600080fd5b50610370600480360381019061036b919061365d565b610bd3565b60405161037d91906136ac565b60405180910390f35b6103a0600480360381019061039b919061365d565b610c78565b005b3480156103ae57600080fd5b506103c960048036038101906103c491906136c7565b610e96565b005b3480156103d757600080fd5b506103f260048036038101906103ed91906135a8565b610eb6565b6040516103ff91906136ac565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a919061384f565b610f27565b005b34801561043d57600080fd5b50610458600480360381019061045391906135a8565b610fbd565b005b34801561046657600080fd5b50610481600480360381019061047c91906135a8565b611043565b60405161048e9190613616565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190613898565b6110f5565b6040516104cb91906136ac565b60405180910390f35b3480156104e057600080fd5b506104e96113cb565b6040516104f691906136ac565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190613898565b6113d1565b60405161053391906136ac565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190613898565b611489565b6040516105709190613983565b60405180910390f35b610581611537565b005b34801561058f57600080fd5b506105986115bd565b6040516105a59190613616565b60405180910390f35b3480156105ba57600080fd5b506105c36115e7565b6040516105d091906136ac565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb91906135a8565b6115ed565b60405161060d919061349c565b60405180910390f35b34801561062257600080fd5b5061062b61160d565b6040516106389190613550565b60405180910390f35b34801561064d57600080fd5b50610668600480360381019061066391906139d1565b61169f565b005b34801561067657600080fd5b50610691600480360381019061068c91906135a8565b611820565b60405161069e919061349c565b60405180910390f35b6106c160048036038101906106bc91906135a8565b61184a565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613a11565b611d47565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613adf565b611de0565b005b34801561072157600080fd5b5061072a611e42565b60405161073791906136ac565b60405180910390f35b34801561074c57600080fd5b50610767600480360381019061076291906135a8565b611e48565b6040516107749190613550565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f91906135a8565b611eef565b005b3480156107b257600080fd5b506107cd60048036038101906107c89190613b62565b611f75565b6040516107da919061349c565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190613898565b612009565b005b34801561081857600080fd5b506108216121b5565b60405161082e919061349c565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108aa57506108a9826121c8565b5b9050919050565b6060600080546108c090613bd1565b80601f01602080910402602001604051908101604052809291908181526020018280546108ec90613bd1565b80156109395780601f1061090e57610100808354040283529160200191610939565b820191906000526020600020905b81548152906001019060200180831161091c57829003601f168201915b5050505050905090565b600061094e826122aa565b61098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098490613c4f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109d382611043565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b90613cbb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a63612316565b73ffffffffffffffffffffffffffffffffffffffff161480610a925750610a9181610a8c612316565b611f75565b5b610ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac890613d27565b60405180910390fd5b610adb838361231e565b505050565b610ae8612316565b73ffffffffffffffffffffffffffffffffffffffff16610b066115bd565b73ffffffffffffffffffffffffffffffffffffffff1614610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390613d93565b60405180910390fd5b80600d8190555050565b6000600880549050905090565b610b84610b7e612316565b826123d7565b610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90613dff565b60405180910390fd5b610bce8383836124b5565b505050565b6000610bde836113d1565b8210610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690613e91565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ce05750601260009054906101000a900460ff165b610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1690613efd565b60405180910390fd5b600d5481610d2b610b66565b610d359190613f4c565b1115610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d90613fee565b60405180910390fd5b6032811115610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db19061405a565b60405180910390fd5b80600e54610dc8919061407a565b34101580610e235750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990614120565b60405180910390fd5b60005b81811015610e9157610e7e83610e79610b66565b612711565b8080610e8990614140565b915050610e65565b505050565b610eb183838360405180602001604052806000815250611de0565b505050565b6000610ec0610b66565b8210610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef8906141fb565b60405180910390fd5b60088281548110610f1557610f1461421b565b5b90600052602060002001549050919050565b610f2f612316565b73ffffffffffffffffffffffffffffffffffffffff16610f4d6115bd565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90613d93565b60405180910390fd5b8060119080519060200190610fb9929190613345565b5050565b610fc5612316565b73ffffffffffffffffffffffffffffffffffffffff16610fe36115bd565b73ffffffffffffffffffffffffffffffffffffffff1614611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103090613d93565b60405180910390fd5b80600f8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390614296565b60405180910390fd5b80915050919050565b600080600090506000601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111599190613616565b602060405180830381865afa158015611176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119a91906142cb565b67ffffffffffffffff8111156111b3576111b2613724565b5b6040519080825280602002602001820160405280156111e15781602001602082028036833780820191505090505b50905060005b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016112429190613616565b602060405180830381865afa15801561125f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128391906142cb565b8110156113ae57601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5986836040518363ffffffff1660e01b81526004016112e79291906142f8565b602060405180830381865afa158015611304573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132891906142cb565b82828151811061133b5761133a61421b565b5b6020026020010181815250506010600083838151811061135e5761135d61421b565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161561138c5761139b565b82806113979061433d565b9350505b80806113a690614140565b9150506111e7565b50816fffffffffffffffffffffffffffffffff1692505050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611442576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611439906143c2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606000611496836113d1565b905060008167ffffffffffffffff8111156114b4576114b3613724565b5b6040519080825280602002602001820160405280156114e25781602001602082028036833780820191505090505b50905060005b8281101561152c576114fa8582610bd3565b82828151811061150d5761150c61421b565b5b602002602001018181525050808061152490614140565b9150506114e8565b508092505050919050565b61153f612316565b73ffffffffffffffffffffffffffffffffffffffff1661155d6115bd565b73ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa90613d93565b60405180910390fd5b6115bb61272f565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b60106020528060005260406000206000915054906101000a900460ff1681565b60606001805461161c90613bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461164890613bd1565b80156116955780601f1061166a57610100808354040283529160200191611695565b820191906000526020600020905b81548152906001019060200180831161167857829003601f168201915b5050505050905090565b6116a7612316565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c9061442e565b60405180910390fd5b8060056000611722612316565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117cf612316565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611814919061349c565b60405180910390a35050565b60006010600083815260200190815260200160002060009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118b25750601260009054906101000a900460ff165b6118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890613efd565b60405180910390fd5b600d54816118fd610b66565b6119079190613f4c565b1115611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613fee565b60405180910390fd5b6000611953336110f5565b11611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a9061449a565b60405180910390fd5b61199c336110f5565b8111156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590613fee565b60405180910390fd5b80600f546119ec919061407a565b341015611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2590614120565b60405180910390fd5b600080601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611a8c9190613616565b602060405180830381865afa158015611aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acd91906142cb565b67ffffffffffffffff811115611ae657611ae5613724565b5b604051908082528060200260200182016040528015611b145781602001602082028036833780820191505090505b50905060005b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611b759190613616565b602060405180830381865afa158015611b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb691906142cb565b811015611d4157601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5933836040518363ffffffff1660e01b8152600401611c1a9291906142f8565b602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b91906142cb565b828281518110611c6e57611c6d61421b565b5b60200260200101818152505060106000838381518110611c9157611c9061421b565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615611cbf57611d2e565b83831015611d2d57611cd833611cd3610b66565b612711565b8280611ce390614140565b935050600160106000848481518110611cff57611cfe61421b565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b8080611d3990614140565b915050611b1a565b50505050565b611d4f612316565b73ffffffffffffffffffffffffffffffffffffffff16611d6d6115bd565b73ffffffffffffffffffffffffffffffffffffffff1614611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90613d93565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b611df1611deb612316565b836123d7565b611e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2790614506565b60405180910390fd5b611e3c848484846128a9565b50505050565b600e5481565b6060611e53826122aa565b611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990614572565b60405180910390fd5b6000611e9c612905565b90506000815111611ebc5760405180602001604052806000815250611ee7565b80611ec684612997565b604051602001611ed79291906145ce565b6040516020818303038152906040525b915050919050565b611ef7612316565b73ffffffffffffffffffffffffffffffffffffffff16611f156115bd565b73ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290613d93565b60405180910390fd5b80600e8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612011612316565b73ffffffffffffffffffffffffffffffffffffffff1661202f6115bd565b73ffffffffffffffffffffffffffffffffffffffff1614612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90613d93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec9061463e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061229357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122a357506122a282612af8565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661239183611043565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123e2826122aa565b612421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612418906146aa565b60405180910390fd5b600061242c83611043565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061249b57508373ffffffffffffffffffffffffffffffffffffffff1661248384610943565b73ffffffffffffffffffffffffffffffffffffffff16145b806124ac57506124ab8185611f75565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124d582611043565b73ffffffffffffffffffffffffffffffffffffffff161461252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252290614716565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614782565b60405180910390fd5b6125a6838383612b62565b6125b160008261231e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260191906147a2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126589190613f4c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61272b828260405180602001604052806000815250612c76565b5050565b60006064601447612740919061407a565b61274a9190614805565b905060006064600f4761275d919061407a565b6127679190614805565b9050600081834761277891906147a2565b61278291906147a2565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156127ec573d6000803e3d6000fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612855573d6000803e3d6000fd5b5061285e612316565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156128a3573d6000803e3d6000fd5b50505050565b6128b48484846124b5565b6128c084848484612cd1565b6128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f690614882565b60405180910390fd5b50505050565b60606011805461291490613bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461294090613bd1565b801561298d5780601f106129625761010080835404028352916020019161298d565b820191906000526020600020905b81548152906001019060200180831161297057829003601f168201915b5050505050905090565b606060008214156129df576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612af3565b600082905060005b60008214612a115780806129fa90614140565b915050600a82612a0a9190614805565b91506129e7565b60008167ffffffffffffffff811115612a2d57612a2c613724565b5b6040519080825280601f01601f191660200182016040528015612a5f5781602001600182028036833780820191505090505b5090505b60008514612aec57600182612a7891906147a2565b9150600a85612a8791906148a2565b6030612a939190613f4c565b60f81b818381518110612aa957612aa861421b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ae59190614805565b9450612a63565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b6d838383612e59565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bb057612bab81612e5e565b612bef565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bee57612bed8382612ea7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c3257612c2d81613014565b612c71565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c7057612c6f82826130e5565b5b5b505050565b612c808383613164565b612c8d6000848484612cd1565b612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc39061491f565b60405180910390fd5b505050565b6000612cf28473ffffffffffffffffffffffffffffffffffffffff16613332565b15612e4c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d1b612316565b8786866040518563ffffffff1660e01b8152600401612d3d9493929190614994565b6020604051808303816000875af1925050508015612d7957506040513d601f19601f82011682018060405250810190612d7691906149f5565b60015b612dfc573d8060008114612da9576040519150601f19603f3d011682016040523d82523d6000602084013e612dae565b606091505b50600081511415612df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612deb90614a6e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e51565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612eb4846113d1565b612ebe91906147a2565b9050600060076000848152602001908152602001600020549050818114612fa3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061302891906147a2565b90506000600960008481526020019081526020016000205490506000600883815481106130585761305761421b565b5b90600052602060002001549050806008838154811061307a5761307961421b565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130c9576130c8614a8e565b5b6001900381819060005260206000200160009055905550505050565b60006130f0836113d1565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cb90614b09565b60405180910390fd5b6131dd816122aa565b1561321d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321490614b75565b60405180910390fd5b61322960008383612b62565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132799190613f4c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461335190613bd1565b90600052602060002090601f01602090048101928261337357600085556133ba565b82601f1061338c57805160ff19168380011785556133ba565b828001600101855582156133ba579182015b828111156133b957825182559160200191906001019061339e565b5b5090506133c791906133cb565b5090565b5b808211156133e45760008160009055506001016133cc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613431816133fc565b811461343c57600080fd5b50565b60008135905061344e81613428565b92915050565b60006020828403121561346a576134696133f2565b5b60006134788482850161343f565b91505092915050565b60008115159050919050565b61349681613481565b82525050565b60006020820190506134b1600083018461348d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134f15780820151818401526020810190506134d6565b83811115613500576000848401525b50505050565b6000601f19601f8301169050919050565b6000613522826134b7565b61352c81856134c2565b935061353c8185602086016134d3565b61354581613506565b840191505092915050565b6000602082019050818103600083015261356a8184613517565b905092915050565b6000819050919050565b61358581613572565b811461359057600080fd5b50565b6000813590506135a28161357c565b92915050565b6000602082840312156135be576135bd6133f2565b5b60006135cc84828501613593565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613600826135d5565b9050919050565b613610816135f5565b82525050565b600060208201905061362b6000830184613607565b92915050565b61363a816135f5565b811461364557600080fd5b50565b60008135905061365781613631565b92915050565b60008060408385031215613674576136736133f2565b5b600061368285828601613648565b925050602061369385828601613593565b9150509250929050565b6136a681613572565b82525050565b60006020820190506136c1600083018461369d565b92915050565b6000806000606084860312156136e0576136df6133f2565b5b60006136ee86828701613648565b93505060206136ff86828701613648565b925050604061371086828701613593565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61375c82613506565b810181811067ffffffffffffffff8211171561377b5761377a613724565b5b80604052505050565b600061378e6133e8565b905061379a8282613753565b919050565b600067ffffffffffffffff8211156137ba576137b9613724565b5b6137c382613506565b9050602081019050919050565b82818337600083830152505050565b60006137f26137ed8461379f565b613784565b90508281526020810184848401111561380e5761380d61371f565b5b6138198482856137d0565b509392505050565b600082601f8301126138365761383561371a565b5b81356138468482602086016137df565b91505092915050565b600060208284031215613865576138646133f2565b5b600082013567ffffffffffffffff811115613883576138826133f7565b5b61388f84828501613821565b91505092915050565b6000602082840312156138ae576138ad6133f2565b5b60006138bc84828501613648565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138fa81613572565b82525050565b600061390c83836138f1565b60208301905092915050565b6000602082019050919050565b6000613930826138c5565b61393a81856138d0565b9350613945836138e1565b8060005b8381101561397657815161395d8882613900565b975061396883613918565b925050600181019050613949565b5085935050505092915050565b6000602082019050818103600083015261399d8184613925565b905092915050565b6139ae81613481565b81146139b957600080fd5b50565b6000813590506139cb816139a5565b92915050565b600080604083850312156139e8576139e76133f2565b5b60006139f685828601613648565b9250506020613a07858286016139bc565b9150509250929050565b600060208284031215613a2757613a266133f2565b5b6000613a35848285016139bc565b91505092915050565b600067ffffffffffffffff821115613a5957613a58613724565b5b613a6282613506565b9050602081019050919050565b6000613a82613a7d84613a3e565b613784565b905082815260208101848484011115613a9e57613a9d61371f565b5b613aa98482856137d0565b509392505050565b600082601f830112613ac657613ac561371a565b5b8135613ad6848260208601613a6f565b91505092915050565b60008060008060808587031215613af957613af86133f2565b5b6000613b0787828801613648565b9450506020613b1887828801613648565b9350506040613b2987828801613593565b925050606085013567ffffffffffffffff811115613b4a57613b496133f7565b5b613b5687828801613ab1565b91505092959194509250565b60008060408385031215613b7957613b786133f2565b5b6000613b8785828601613648565b9250506020613b9885828601613648565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613be957607f821691505b60208210811415613bfd57613bfc613ba2565b5b50919050565b7f2334390000000000000000000000000000000000000000000000000000000000600082015250565b6000613c396003836134c2565b9150613c4482613c03565b602082019050919050565b60006020820190508181036000830152613c6881613c2c565b9050919050565b7f2334370000000000000000000000000000000000000000000000000000000000600082015250565b6000613ca56003836134c2565b9150613cb082613c6f565b602082019050919050565b60006020820190508181036000830152613cd481613c98565b9050919050565b7f2334380000000000000000000000000000000000000000000000000000000000600082015250565b6000613d116003836134c2565b9150613d1c82613cdb565b602082019050919050565b60006020820190508181036000830152613d4081613d04565b9050919050565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b6000613d7d6003836134c2565b9150613d8882613d47565b602082019050919050565b60006020820190508181036000830152613dac81613d70565b9050919050565b7f2335310000000000000000000000000000000000000000000000000000000000600082015250565b6000613de96003836134c2565b9150613df482613db3565b602082019050919050565b60006020820190508181036000830152613e1881613ddc565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e7b602b836134c2565b9150613e8682613e1f565b604082019050919050565b60006020820190508181036000830152613eaa81613e6e565b9050919050565b7f53616c65206e6f7420656e61626c650000000000000000000000000000000000600082015250565b6000613ee7600f836134c2565b9150613ef282613eb1565b602082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f5782613572565b9150613f6283613572565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f9757613f96613f1d565b5b828201905092915050565b7f45786365656473206c696d697400000000000000000000000000000000000000600082015250565b6000613fd8600d836134c2565b9150613fe382613fa2565b602082019050919050565b6000602082019050818103600083015261400781613fcb565b9050919050565b7f4578636565647320353000000000000000000000000000000000000000000000600082015250565b6000614044600a836134c2565b915061404f8261400e565b602082019050919050565b6000602082019050818103600083015261407381614037565b9050919050565b600061408582613572565b915061409083613572565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140c9576140c8613f1d565b5b828202905092915050565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b600061410a6011836134c2565b9150614115826140d4565b602082019050919050565b60006020820190508181036000830152614139816140fd565b9050919050565b600061414b82613572565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561417e5761417d613f1d565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006141e5602c836134c2565b91506141f082614189565b604082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2334350000000000000000000000000000000000000000000000000000000000600082015250565b60006142806003836134c2565b915061428b8261424a565b602082019050919050565b600060208201905081810360008301526142af81614273565b9050919050565b6000815190506142c58161357c565b92915050565b6000602082840312156142e1576142e06133f2565b5b60006142ef848285016142b6565b91505092915050565b600060408201905061430d6000830185613607565b61431a602083018461369d565b9392505050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600061434882614321565b91506fffffffffffffffffffffffffffffffff82141561436b5761436a613f1d565b5b600182019050919050565b7f2334340000000000000000000000000000000000000000000000000000000000600082015250565b60006143ac6003836134c2565b91506143b782614376565b602082019050919050565b600060208201905081810360008301526143db8161439f565b9050919050565b7f2335300000000000000000000000000000000000000000000000000000000000600082015250565b60006144186003836134c2565b9150614423826143e2565b602082019050919050565b600060208201905081810360008301526144478161440b565b9050919050565b7f4e6f20617661696c61626c6520746f6b656e20666f72206d696e740000000000600082015250565b6000614484601b836134c2565b915061448f8261444e565b602082019050919050565b600060208201905081810360008301526144b381614477565b9050919050565b7f2335320000000000000000000000000000000000000000000000000000000000600082015250565b60006144f06003836134c2565b91506144fb826144ba565b602082019050919050565b6000602082019050818103600083015261451f816144e3565b9050919050565b7f2334360000000000000000000000000000000000000000000000000000000000600082015250565b600061455c6003836134c2565b915061456782614526565b602082019050919050565b6000602082019050818103600083015261458b8161454f565b9050919050565b600081905092915050565b60006145a8826134b7565b6145b28185614592565b93506145c28185602086016134d3565b80840191505092915050565b60006145da828561459d565b91506145e6828461459d565b91508190509392505050565b7f2334320000000000000000000000000000000000000000000000000000000000600082015250565b60006146286003836134c2565b9150614633826145f2565b602082019050919050565b600060208201905081810360008301526146578161461b565b9050919050565b7f2335340000000000000000000000000000000000000000000000000000000000600082015250565b60006146946003836134c2565b915061469f8261465e565b602082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f2335380000000000000000000000000000000000000000000000000000000000600082015250565b60006147006003836134c2565b915061470b826146ca565b602082019050919050565b6000602082019050818103600083015261472f816146f3565b9050919050565b7f2335390000000000000000000000000000000000000000000000000000000000600082015250565b600061476c6003836134c2565b915061477782614736565b602082019050919050565b6000602082019050818103600083015261479b8161475f565b9050919050565b60006147ad82613572565b91506147b883613572565b9250828210156147cb576147ca613f1d565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061481082613572565b915061481b83613572565b92508261482b5761482a6147d6565b5b828204905092915050565b7f2335330000000000000000000000000000000000000000000000000000000000600082015250565b600061486c6003836134c2565b915061487782614836565b602082019050919050565b6000602082019050818103600083015261489b8161485f565b9050919050565b60006148ad82613572565b91506148b883613572565b9250826148c8576148c76147d6565b5b828206905092915050565b7f2335350000000000000000000000000000000000000000000000000000000000600082015250565b60006149096003836134c2565b9150614914826148d3565b602082019050919050565b60006020820190508181036000830152614938816148fc565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006149668261493f565b614970818561494a565b93506149808185602086016134d3565b61498981613506565b840191505092915050565b60006080820190506149a96000830187613607565b6149b66020830186613607565b6149c3604083018561369d565b81810360608301526149d5818461495b565b905095945050505050565b6000815190506149ef81613428565b92915050565b600060208284031215614a0b57614a0a6133f2565b5b6000614a19848285016149e0565b91505092915050565b7f2336300000000000000000000000000000000000000000000000000000000000600082015250565b6000614a586003836134c2565b9150614a6382614a22565b602082019050919050565b60006020820190508181036000830152614a8781614a4b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f2335360000000000000000000000000000000000000000000000000000000000600082015250565b6000614af36003836134c2565b9150614afe82614abd565b602082019050919050565b60006020820190508181036000830152614b2281614ae6565b9050919050565b7f2335370000000000000000000000000000000000000000000000000000000000600082015250565b6000614b5f6003836134c2565b9150614b6a82614b29565b602082019050919050565b60006020820190508181036000830152614b8e81614b52565b905091905056fea26469706673582212204242ce89941d45e4fad20b55f2f3011ba5de2c29f7be4ccfeee117105270919664736f6c634300080a00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6170692e63686565726b61746d6565726b617473636c75622e636f6d2f000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101f95760003560e01c80638462151c1161010d578063af328893116100a0578063c87b56dd1161006f578063c87b56dd14610740578063de4b32621461077d578063e985e9c5146107a6578063f2fde38b146107e3578063fe4ca8471461080c576101f9565b8063af328893146106a7578063b02636fd146106c3578063b88d4fde146106ec578063c7876ea414610715576101f9565b806392642024116100dc57806392642024146105d957806395d89b4114610616578063a22cb46514610641578063a81893121461066a576101f9565b80638462151c1461053c578063853828b6146105795780638da5cb5b14610583578063901dda54146105ae576101f9565b806340c10f19116101905780635f7738791161015f5780635f773879146104315780636352211e1461045a5780636923aebc146104975780636e1bd323146104d457806370a08231146104ff576101f9565b806340c10f191461038657806342842e0e146103a25780634f6ccce7146103cb57806355f804b314610408576101f9565b806309acc2cb116101cc57806309acc2cb146102cc57806318160ddd146102f557806323b872dd146103205780632f745c5914610349576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613454565b610837565b604051610232919061349c565b60405180910390f35b34801561024757600080fd5b506102506108b1565b60405161025d9190613550565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906135a8565b610943565b60405161029a9190613616565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c5919061365d565b6109c8565b005b3480156102d857600080fd5b506102f360048036038101906102ee91906135a8565b610ae0565b005b34801561030157600080fd5b5061030a610b66565b60405161031791906136ac565b60405180910390f35b34801561032c57600080fd5b50610347600480360381019061034291906136c7565b610b73565b005b34801561035557600080fd5b50610370600480360381019061036b919061365d565b610bd3565b60405161037d91906136ac565b60405180910390f35b6103a0600480360381019061039b919061365d565b610c78565b005b3480156103ae57600080fd5b506103c960048036038101906103c491906136c7565b610e96565b005b3480156103d757600080fd5b506103f260048036038101906103ed91906135a8565b610eb6565b6040516103ff91906136ac565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a919061384f565b610f27565b005b34801561043d57600080fd5b50610458600480360381019061045391906135a8565b610fbd565b005b34801561046657600080fd5b50610481600480360381019061047c91906135a8565b611043565b60405161048e9190613616565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190613898565b6110f5565b6040516104cb91906136ac565b60405180910390f35b3480156104e057600080fd5b506104e96113cb565b6040516104f691906136ac565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190613898565b6113d1565b60405161053391906136ac565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190613898565b611489565b6040516105709190613983565b60405180910390f35b610581611537565b005b34801561058f57600080fd5b506105986115bd565b6040516105a59190613616565b60405180910390f35b3480156105ba57600080fd5b506105c36115e7565b6040516105d091906136ac565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb91906135a8565b6115ed565b60405161060d919061349c565b60405180910390f35b34801561062257600080fd5b5061062b61160d565b6040516106389190613550565b60405180910390f35b34801561064d57600080fd5b50610668600480360381019061066391906139d1565b61169f565b005b34801561067657600080fd5b50610691600480360381019061068c91906135a8565b611820565b60405161069e919061349c565b60405180910390f35b6106c160048036038101906106bc91906135a8565b61184a565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613a11565b611d47565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613adf565b611de0565b005b34801561072157600080fd5b5061072a611e42565b60405161073791906136ac565b60405180910390f35b34801561074c57600080fd5b50610767600480360381019061076291906135a8565b611e48565b6040516107749190613550565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f91906135a8565b611eef565b005b3480156107b257600080fd5b506107cd60048036038101906107c89190613b62565b611f75565b6040516107da919061349c565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190613898565b612009565b005b34801561081857600080fd5b506108216121b5565b60405161082e919061349c565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108aa57506108a9826121c8565b5b9050919050565b6060600080546108c090613bd1565b80601f01602080910402602001604051908101604052809291908181526020018280546108ec90613bd1565b80156109395780601f1061090e57610100808354040283529160200191610939565b820191906000526020600020905b81548152906001019060200180831161091c57829003601f168201915b5050505050905090565b600061094e826122aa565b61098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098490613c4f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109d382611043565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b90613cbb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a63612316565b73ffffffffffffffffffffffffffffffffffffffff161480610a925750610a9181610a8c612316565b611f75565b5b610ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac890613d27565b60405180910390fd5b610adb838361231e565b505050565b610ae8612316565b73ffffffffffffffffffffffffffffffffffffffff16610b066115bd565b73ffffffffffffffffffffffffffffffffffffffff1614610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390613d93565b60405180910390fd5b80600d8190555050565b6000600880549050905090565b610b84610b7e612316565b826123d7565b610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90613dff565b60405180910390fd5b610bce8383836124b5565b505050565b6000610bde836113d1565b8210610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690613e91565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ce05750601260009054906101000a900460ff165b610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1690613efd565b60405180910390fd5b600d5481610d2b610b66565b610d359190613f4c565b1115610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d90613fee565b60405180910390fd5b6032811115610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db19061405a565b60405180910390fd5b80600e54610dc8919061407a565b34101580610e235750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990614120565b60405180910390fd5b60005b81811015610e9157610e7e83610e79610b66565b612711565b8080610e8990614140565b915050610e65565b505050565b610eb183838360405180602001604052806000815250611de0565b505050565b6000610ec0610b66565b8210610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef8906141fb565b60405180910390fd5b60088281548110610f1557610f1461421b565b5b90600052602060002001549050919050565b610f2f612316565b73ffffffffffffffffffffffffffffffffffffffff16610f4d6115bd565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90613d93565b60405180910390fd5b8060119080519060200190610fb9929190613345565b5050565b610fc5612316565b73ffffffffffffffffffffffffffffffffffffffff16610fe36115bd565b73ffffffffffffffffffffffffffffffffffffffff1614611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103090613d93565b60405180910390fd5b80600f8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390614296565b60405180910390fd5b80915050919050565b600080600090506000601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111599190613616565b602060405180830381865afa158015611176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119a91906142cb565b67ffffffffffffffff8111156111b3576111b2613724565b5b6040519080825280602002602001820160405280156111e15781602001602082028036833780820191505090505b50905060005b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016112429190613616565b602060405180830381865afa15801561125f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128391906142cb565b8110156113ae57601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5986836040518363ffffffff1660e01b81526004016112e79291906142f8565b602060405180830381865afa158015611304573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132891906142cb565b82828151811061133b5761133a61421b565b5b6020026020010181815250506010600083838151811061135e5761135d61421b565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161561138c5761139b565b82806113979061433d565b9350505b80806113a690614140565b9150506111e7565b50816fffffffffffffffffffffffffffffffff1692505050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611442576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611439906143c2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606000611496836113d1565b905060008167ffffffffffffffff8111156114b4576114b3613724565b5b6040519080825280602002602001820160405280156114e25781602001602082028036833780820191505090505b50905060005b8281101561152c576114fa8582610bd3565b82828151811061150d5761150c61421b565b5b602002602001018181525050808061152490614140565b9150506114e8565b508092505050919050565b61153f612316565b73ffffffffffffffffffffffffffffffffffffffff1661155d6115bd565b73ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa90613d93565b60405180910390fd5b6115bb61272f565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b60106020528060005260406000206000915054906101000a900460ff1681565b60606001805461161c90613bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461164890613bd1565b80156116955780601f1061166a57610100808354040283529160200191611695565b820191906000526020600020905b81548152906001019060200180831161167857829003601f168201915b5050505050905090565b6116a7612316565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c9061442e565b60405180910390fd5b8060056000611722612316565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117cf612316565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611814919061349c565b60405180910390a35050565b60006010600083815260200190815260200160002060009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118b25750601260009054906101000a900460ff165b6118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890613efd565b60405180910390fd5b600d54816118fd610b66565b6119079190613f4c565b1115611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613fee565b60405180910390fd5b6000611953336110f5565b11611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a9061449a565b60405180910390fd5b61199c336110f5565b8111156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590613fee565b60405180910390fd5b80600f546119ec919061407a565b341015611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2590614120565b60405180910390fd5b600080601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611a8c9190613616565b602060405180830381865afa158015611aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acd91906142cb565b67ffffffffffffffff811115611ae657611ae5613724565b5b604051908082528060200260200182016040528015611b145781602001602082028036833780820191505090505b50905060005b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611b759190613616565b602060405180830381865afa158015611b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb691906142cb565b811015611d4157601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5933836040518363ffffffff1660e01b8152600401611c1a9291906142f8565b602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b91906142cb565b828281518110611c6e57611c6d61421b565b5b60200260200101818152505060106000838381518110611c9157611c9061421b565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615611cbf57611d2e565b83831015611d2d57611cd833611cd3610b66565b612711565b8280611ce390614140565b935050600160106000848481518110611cff57611cfe61421b565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b8080611d3990614140565b915050611b1a565b50505050565b611d4f612316565b73ffffffffffffffffffffffffffffffffffffffff16611d6d6115bd565b73ffffffffffffffffffffffffffffffffffffffff1614611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90613d93565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b611df1611deb612316565b836123d7565b611e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2790614506565b60405180910390fd5b611e3c848484846128a9565b50505050565b600e5481565b6060611e53826122aa565b611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990614572565b60405180910390fd5b6000611e9c612905565b90506000815111611ebc5760405180602001604052806000815250611ee7565b80611ec684612997565b604051602001611ed79291906145ce565b6040516020818303038152906040525b915050919050565b611ef7612316565b73ffffffffffffffffffffffffffffffffffffffff16611f156115bd565b73ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290613d93565b60405180910390fd5b80600e8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612011612316565b73ffffffffffffffffffffffffffffffffffffffff1661202f6115bd565b73ffffffffffffffffffffffffffffffffffffffff1614612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90613d93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec9061463e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061229357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122a357506122a282612af8565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661239183611043565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123e2826122aa565b612421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612418906146aa565b60405180910390fd5b600061242c83611043565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061249b57508373ffffffffffffffffffffffffffffffffffffffff1661248384610943565b73ffffffffffffffffffffffffffffffffffffffff16145b806124ac57506124ab8185611f75565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124d582611043565b73ffffffffffffffffffffffffffffffffffffffff161461252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252290614716565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614782565b60405180910390fd5b6125a6838383612b62565b6125b160008261231e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260191906147a2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126589190613f4c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61272b828260405180602001604052806000815250612c76565b5050565b60006064601447612740919061407a565b61274a9190614805565b905060006064600f4761275d919061407a565b6127679190614805565b9050600081834761277891906147a2565b61278291906147a2565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156127ec573d6000803e3d6000fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612855573d6000803e3d6000fd5b5061285e612316565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156128a3573d6000803e3d6000fd5b50505050565b6128b48484846124b5565b6128c084848484612cd1565b6128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f690614882565b60405180910390fd5b50505050565b60606011805461291490613bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461294090613bd1565b801561298d5780601f106129625761010080835404028352916020019161298d565b820191906000526020600020905b81548152906001019060200180831161297057829003601f168201915b5050505050905090565b606060008214156129df576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612af3565b600082905060005b60008214612a115780806129fa90614140565b915050600a82612a0a9190614805565b91506129e7565b60008167ffffffffffffffff811115612a2d57612a2c613724565b5b6040519080825280601f01601f191660200182016040528015612a5f5781602001600182028036833780820191505090505b5090505b60008514612aec57600182612a7891906147a2565b9150600a85612a8791906148a2565b6030612a939190613f4c565b60f81b818381518110612aa957612aa861421b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ae59190614805565b9450612a63565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b6d838383612e59565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bb057612bab81612e5e565b612bef565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bee57612bed8382612ea7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c3257612c2d81613014565b612c71565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c7057612c6f82826130e5565b5b5b505050565b612c808383613164565b612c8d6000848484612cd1565b612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc39061491f565b60405180910390fd5b505050565b6000612cf28473ffffffffffffffffffffffffffffffffffffffff16613332565b15612e4c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d1b612316565b8786866040518563ffffffff1660e01b8152600401612d3d9493929190614994565b6020604051808303816000875af1925050508015612d7957506040513d601f19601f82011682018060405250810190612d7691906149f5565b60015b612dfc573d8060008114612da9576040519150601f19603f3d011682016040523d82523d6000602084013e612dae565b606091505b50600081511415612df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612deb90614a6e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e51565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612eb4846113d1565b612ebe91906147a2565b9050600060076000848152602001908152602001600020549050818114612fa3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061302891906147a2565b90506000600960008481526020019081526020016000205490506000600883815481106130585761305761421b565b5b90600052602060002001549050806008838154811061307a5761307961421b565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130c9576130c8614a8e565b5b6001900381819060005260206000200160009055905550505050565b60006130f0836113d1565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cb90614b09565b60405180910390fd5b6131dd816122aa565b1561321d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321490614b75565b60405180910390fd5b61322960008383612b62565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132799190613f4c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461335190613bd1565b90600052602060002090601f01602090048101928261337357600085556133ba565b82601f1061338c57805160ff19168380011785556133ba565b828001600101855582156133ba579182015b828111156133b957825182559160200191906001019061339e565b5b5090506133c791906133cb565b5090565b5b808211156133e45760008160009055506001016133cc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613431816133fc565b811461343c57600080fd5b50565b60008135905061344e81613428565b92915050565b60006020828403121561346a576134696133f2565b5b60006134788482850161343f565b91505092915050565b60008115159050919050565b61349681613481565b82525050565b60006020820190506134b1600083018461348d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134f15780820151818401526020810190506134d6565b83811115613500576000848401525b50505050565b6000601f19601f8301169050919050565b6000613522826134b7565b61352c81856134c2565b935061353c8185602086016134d3565b61354581613506565b840191505092915050565b6000602082019050818103600083015261356a8184613517565b905092915050565b6000819050919050565b61358581613572565b811461359057600080fd5b50565b6000813590506135a28161357c565b92915050565b6000602082840312156135be576135bd6133f2565b5b60006135cc84828501613593565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613600826135d5565b9050919050565b613610816135f5565b82525050565b600060208201905061362b6000830184613607565b92915050565b61363a816135f5565b811461364557600080fd5b50565b60008135905061365781613631565b92915050565b60008060408385031215613674576136736133f2565b5b600061368285828601613648565b925050602061369385828601613593565b9150509250929050565b6136a681613572565b82525050565b60006020820190506136c1600083018461369d565b92915050565b6000806000606084860312156136e0576136df6133f2565b5b60006136ee86828701613648565b93505060206136ff86828701613648565b925050604061371086828701613593565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61375c82613506565b810181811067ffffffffffffffff8211171561377b5761377a613724565b5b80604052505050565b600061378e6133e8565b905061379a8282613753565b919050565b600067ffffffffffffffff8211156137ba576137b9613724565b5b6137c382613506565b9050602081019050919050565b82818337600083830152505050565b60006137f26137ed8461379f565b613784565b90508281526020810184848401111561380e5761380d61371f565b5b6138198482856137d0565b509392505050565b600082601f8301126138365761383561371a565b5b81356138468482602086016137df565b91505092915050565b600060208284031215613865576138646133f2565b5b600082013567ffffffffffffffff811115613883576138826133f7565b5b61388f84828501613821565b91505092915050565b6000602082840312156138ae576138ad6133f2565b5b60006138bc84828501613648565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138fa81613572565b82525050565b600061390c83836138f1565b60208301905092915050565b6000602082019050919050565b6000613930826138c5565b61393a81856138d0565b9350613945836138e1565b8060005b8381101561397657815161395d8882613900565b975061396883613918565b925050600181019050613949565b5085935050505092915050565b6000602082019050818103600083015261399d8184613925565b905092915050565b6139ae81613481565b81146139b957600080fd5b50565b6000813590506139cb816139a5565b92915050565b600080604083850312156139e8576139e76133f2565b5b60006139f685828601613648565b9250506020613a07858286016139bc565b9150509250929050565b600060208284031215613a2757613a266133f2565b5b6000613a35848285016139bc565b91505092915050565b600067ffffffffffffffff821115613a5957613a58613724565b5b613a6282613506565b9050602081019050919050565b6000613a82613a7d84613a3e565b613784565b905082815260208101848484011115613a9e57613a9d61371f565b5b613aa98482856137d0565b509392505050565b600082601f830112613ac657613ac561371a565b5b8135613ad6848260208601613a6f565b91505092915050565b60008060008060808587031215613af957613af86133f2565b5b6000613b0787828801613648565b9450506020613b1887828801613648565b9350506040613b2987828801613593565b925050606085013567ffffffffffffffff811115613b4a57613b496133f7565b5b613b5687828801613ab1565b91505092959194509250565b60008060408385031215613b7957613b786133f2565b5b6000613b8785828601613648565b9250506020613b9885828601613648565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613be957607f821691505b60208210811415613bfd57613bfc613ba2565b5b50919050565b7f2334390000000000000000000000000000000000000000000000000000000000600082015250565b6000613c396003836134c2565b9150613c4482613c03565b602082019050919050565b60006020820190508181036000830152613c6881613c2c565b9050919050565b7f2334370000000000000000000000000000000000000000000000000000000000600082015250565b6000613ca56003836134c2565b9150613cb082613c6f565b602082019050919050565b60006020820190508181036000830152613cd481613c98565b9050919050565b7f2334380000000000000000000000000000000000000000000000000000000000600082015250565b6000613d116003836134c2565b9150613d1c82613cdb565b602082019050919050565b60006020820190508181036000830152613d4081613d04565b9050919050565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b6000613d7d6003836134c2565b9150613d8882613d47565b602082019050919050565b60006020820190508181036000830152613dac81613d70565b9050919050565b7f2335310000000000000000000000000000000000000000000000000000000000600082015250565b6000613de96003836134c2565b9150613df482613db3565b602082019050919050565b60006020820190508181036000830152613e1881613ddc565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e7b602b836134c2565b9150613e8682613e1f565b604082019050919050565b60006020820190508181036000830152613eaa81613e6e565b9050919050565b7f53616c65206e6f7420656e61626c650000000000000000000000000000000000600082015250565b6000613ee7600f836134c2565b9150613ef282613eb1565b602082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f5782613572565b9150613f6283613572565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f9757613f96613f1d565b5b828201905092915050565b7f45786365656473206c696d697400000000000000000000000000000000000000600082015250565b6000613fd8600d836134c2565b9150613fe382613fa2565b602082019050919050565b6000602082019050818103600083015261400781613fcb565b9050919050565b7f4578636565647320353000000000000000000000000000000000000000000000600082015250565b6000614044600a836134c2565b915061404f8261400e565b602082019050919050565b6000602082019050818103600083015261407381614037565b9050919050565b600061408582613572565b915061409083613572565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140c9576140c8613f1d565b5b828202905092915050565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b600061410a6011836134c2565b9150614115826140d4565b602082019050919050565b60006020820190508181036000830152614139816140fd565b9050919050565b600061414b82613572565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561417e5761417d613f1d565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006141e5602c836134c2565b91506141f082614189565b604082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2334350000000000000000000000000000000000000000000000000000000000600082015250565b60006142806003836134c2565b915061428b8261424a565b602082019050919050565b600060208201905081810360008301526142af81614273565b9050919050565b6000815190506142c58161357c565b92915050565b6000602082840312156142e1576142e06133f2565b5b60006142ef848285016142b6565b91505092915050565b600060408201905061430d6000830185613607565b61431a602083018461369d565b9392505050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600061434882614321565b91506fffffffffffffffffffffffffffffffff82141561436b5761436a613f1d565b5b600182019050919050565b7f2334340000000000000000000000000000000000000000000000000000000000600082015250565b60006143ac6003836134c2565b91506143b782614376565b602082019050919050565b600060208201905081810360008301526143db8161439f565b9050919050565b7f2335300000000000000000000000000000000000000000000000000000000000600082015250565b60006144186003836134c2565b9150614423826143e2565b602082019050919050565b600060208201905081810360008301526144478161440b565b9050919050565b7f4e6f20617661696c61626c6520746f6b656e20666f72206d696e740000000000600082015250565b6000614484601b836134c2565b915061448f8261444e565b602082019050919050565b600060208201905081810360008301526144b381614477565b9050919050565b7f2335320000000000000000000000000000000000000000000000000000000000600082015250565b60006144f06003836134c2565b91506144fb826144ba565b602082019050919050565b6000602082019050818103600083015261451f816144e3565b9050919050565b7f2334360000000000000000000000000000000000000000000000000000000000600082015250565b600061455c6003836134c2565b915061456782614526565b602082019050919050565b6000602082019050818103600083015261458b8161454f565b9050919050565b600081905092915050565b60006145a8826134b7565b6145b28185614592565b93506145c28185602086016134d3565b80840191505092915050565b60006145da828561459d565b91506145e6828461459d565b91508190509392505050565b7f2334320000000000000000000000000000000000000000000000000000000000600082015250565b60006146286003836134c2565b9150614633826145f2565b602082019050919050565b600060208201905081810360008301526146578161461b565b9050919050565b7f2335340000000000000000000000000000000000000000000000000000000000600082015250565b60006146946003836134c2565b915061469f8261465e565b602082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f2335380000000000000000000000000000000000000000000000000000000000600082015250565b60006147006003836134c2565b915061470b826146ca565b602082019050919050565b6000602082019050818103600083015261472f816146f3565b9050919050565b7f2335390000000000000000000000000000000000000000000000000000000000600082015250565b600061476c6003836134c2565b915061477782614736565b602082019050919050565b6000602082019050818103600083015261479b8161475f565b9050919050565b60006147ad82613572565b91506147b883613572565b9250828210156147cb576147ca613f1d565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061481082613572565b915061481b83613572565b92508261482b5761482a6147d6565b5b828204905092915050565b7f2335330000000000000000000000000000000000000000000000000000000000600082015250565b600061486c6003836134c2565b915061487782614836565b602082019050919050565b6000602082019050818103600083015261489b8161485f565b9050919050565b60006148ad82613572565b91506148b883613572565b9250826148c8576148c76147d6565b5b828206905092915050565b7f2335350000000000000000000000000000000000000000000000000000000000600082015250565b60006149096003836134c2565b9150614914826148d3565b602082019050919050565b60006020820190508181036000830152614938816148fc565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006149668261493f565b614970818561494a565b93506149808185602086016134d3565b61498981613506565b840191505092915050565b60006080820190506149a96000830187613607565b6149b66020830186613607565b6149c3604083018561369d565b81810360608301526149d5818461495b565b905095945050505050565b6000815190506149ef81613428565b92915050565b600060208284031215614a0b57614a0a6133f2565b5b6000614a19848285016149e0565b91505092915050565b7f2336300000000000000000000000000000000000000000000000000000000000600082015250565b6000614a586003836134c2565b9150614a6382614a22565b602082019050919050565b60006020820190508181036000830152614a8781614a4b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f2335360000000000000000000000000000000000000000000000000000000000600082015250565b6000614af36003836134c2565b9150614afe82614abd565b602082019050919050565b60006020820190508181036000830152614b2281614ae6565b9050919050565b7f2335370000000000000000000000000000000000000000000000000000000000600082015250565b6000614b5f6003836134c2565b9150614b6a82614b29565b602082019050919050565b60006020820190508181036000830152614b8e81614b52565b905091905056fea26469706673582212204242ce89941d45e4fad20b55f2f3011ba5de2c29f7be4ccfeee117105270919664736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6170692e63686565726b61746d6565726b617473636c75622e636f6d2f000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://api.cheerkatmeerkatsclub.com/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [2] : 68747470733a2f2f6170692e63686565726b61746d6565726b617473636c7562
Arg [3] : 2e636f6d2f000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
38852:4178:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32725:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19920:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21260:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20873:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39446:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33378:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22087:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33046:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39904:470;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22417:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33568:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40516:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39659:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19652:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41230:533;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38923:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19421:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40626:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40978:81;;;:::i;:::-;;14139:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39005:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39053:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20089:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21512:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41091:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41779:1238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39331:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22639:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38960:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20264:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39552:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21856:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15656:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39129:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32725:237;32827:4;32866:35;32851:50;;;:11;:50;;;;:103;;;;32918:36;32942:11;32918:23;:36::i;:::-;32851:103;32844:110;;32725:237;;;:::o;19920:100::-;19974:13;20007:5;20000:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19920:100;:::o;21260:180::-;21336:7;21364:16;21372:7;21364;:16::i;:::-;21356:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;21408:15;:24;21424:7;21408:24;;;;;;;;;;;;;;;;;;;;;21401:31;;21260:180;;;:::o;20873:321::-;20954:13;20970:23;20985:7;20970:14;:23::i;:::-;20954:39;;21018:5;21012:11;;:2;:11;;;;21004:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;21068:5;21052:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;21077:44;21101:5;21108:12;:10;:12::i;:::-;21077:23;:44::i;:::-;21052:69;21044:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;21165:21;21174:2;21178:7;21165:8;:21::i;:::-;20943:251;20873:321;;:::o;39446:98::-;14370:12;:10;:12::i;:::-;14359:23;;:7;:5;:7::i;:::-;:23;;;14351:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;39526:10:::1;39514:9;:22;;;;39446:98:::0;:::o;33378:113::-;33439:7;33466:10;:17;;;;33459:24;;33378:113;:::o;22087:259::-;22248:41;22267:12;:10;:12::i;:::-;22281:7;22248:18;:41::i;:::-;22240:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22310:28;22320:4;22326:2;22330:7;22310:9;:28::i;:::-;22087:259;;;:::o;33046:256::-;33143:7;33179:23;33196:5;33179:16;:23::i;:::-;33171:5;:31;33163:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33268:12;:19;33281:5;33268:19;;;;;;;;;;;;;;;:26;33288:5;33268:26;;;;;;;;;;;;33261:33;;33046:256;;;;:::o;39904:470::-;39992:6;;;;;;;;;;;39978:20;;:10;:20;;;:34;;;;40002:10;;;;;;;;;;;39978:34;39970:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40076:9;;40066:6;40051:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;40043:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40132:2;40122:6;:12;;40114:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;40193:6;40181:9;;:18;;;;:::i;:::-;40168:9;:31;;:55;;;;40217:6;;;;;;;;;;;40203:20;;:10;:20;;;40168:55;40160:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;40269:6;40265:92;40285:6;40281:1;:10;40265:92;;;40312:29;40322:3;40327:13;:11;:13::i;:::-;40312:9;:29::i;:::-;40293:3;;;;;:::i;:::-;;;;40265:92;;;;39904:470;;:::o;22417:151::-;22521:39;22538:4;22544:2;22548:7;22521:39;;;;;;;;;;;;:16;:39::i;:::-;22417:151;;;:::o;33568:233::-;33643:7;33679:30;:28;:30::i;:::-;33671:5;:38;33663:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33776:10;33787:5;33776:17;;;;;;;;:::i;:::-;;;;;;;;;;33769:24;;33568:233;;;:::o;40516:102::-;14370:12;:10;:12::i;:::-;14359:23;;:7;:5;:7::i;:::-;:23;;;14351:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;40603:7:::1;40587:13;:23;;;;;;;;;;;;:::i;:::-;;40516:102:::0;:::o;39659:111::-;14370:12;:10;:12::i;:::-;14359:23;;:7;:5;:7::i;:::-;:23;;;14351:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;39749:13:::1;39734:12;:28;;;;39659:111:::0;:::o;19652:201::-;19724:7;19744:13;19760:7;:16;19768:7;19760:16;;;;;;;;;;;;;;;;;;;;;19744:32;;19812:1;19795:19;;:5;:19;;;;19787:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;19840:5;19833:12;;;19652:201;;;:::o;41230:533::-;41307:7;41327:23;41353:1;41327:27;;41365:25;41407:3;;;;;;;;;;;:13;;;41421:7;41407:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41393:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41365:65;;41445:6;41441:277;41461:3;;;;;;;;;;;:13;;;41475:7;41461:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41457:1;:26;41441:277;;;41518:3;;;;;;;;;;;:23;;;41542:7;41551:1;41518:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41504:8;41513:1;41504:11;;;;;;;;:::i;:::-;;;;;;;:49;;;;;41586:13;:26;41600:8;41609:1;41600:11;;;;;;;;:::i;:::-;;;;;;;;41586:26;;;;;;;;;;;;;;;;;;;;;41582:111;;;;;;41659:16;;;;;:::i;:::-;;;;41582:111;41485:3;;;;;:::i;:::-;;;;41441:277;;;;41741:14;41734:21;;;;;;41230:533;;;:::o;38923:30::-;;;;:::o;19421:169::-;19493:7;19538:1;19521:19;;:5;:19;;;;19513:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;19566:9;:16;19576:5;19566:16;;;;;;;;;;;;;;;;19559:23;;19421:169;;;:::o;40626:344::-;40687:16;40716:15;40734:17;40744:6;40734:9;:17::i;:::-;40716:35;;40764:25;40806:10;40792:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40764:53;;40832:6;40828:107;40848:10;40844:1;:14;40828:107;;;40893:30;40913:6;40921:1;40893:19;:30::i;:::-;40879:8;40888:1;40879:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;40860:3;;;;;:::i;:::-;;;;40828:107;;;;40954:8;40947:15;;;;40626:344;;;:::o;40978:81::-;14370:12;:10;:12::i;:::-;14359:23;;:7;:5;:7::i;:::-;:23;;;14351:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41037:14:::1;:12;:14::i;:::-;40978:81::o:0;14139:87::-;14185:7;14212:6;;;;;;;;;;;14205:13;;14139:87;:::o;39005:37::-;;;;:::o;39053:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;20089:104::-;20145:13;20178:7;20171:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20089:104;:::o;21512:273::-;21627:12;:10;:12::i;:::-;21615:24;;:8;:24;;;;21607:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;21705:8;21660:18;:32;21679:12;:10;:12::i;:::-;21660:32;;;;;;;;;;;;;;;:42;21693:8;21660:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21758:8;21729:48;;21744:12;:10;:12::i;:::-;21729:48;;;21768:8;21729:48;;;;;;:::i;:::-;;;;;;;;21512:273;;:::o;41091:128::-;41165:4;41190:13;:21;41204:6;41190:21;;;;;;;;;;;;;;;;;;;;;41183:28;;41091:128;;;:::o;41779:1238::-;41860:6;;;;;;;;;;;41846:20;;:10;:20;;;:34;;;;41870:10;;;;;;;;;;;41846:34;41838:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41944:9;;41934:6;41919:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;41911:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42026:1;41990:33;42012:10;41990:21;:33::i;:::-;:37;41982:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;42088:33;42110:10;42088:21;:33::i;:::-;42078:6;:43;;42070:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42186:6;42171:12;;:21;;;;:::i;:::-;42158:9;:34;;42150:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42276:20;42359:25;42401:3;;;;;;;;;;;:13;;;42415:10;42401:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42387:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42359:68;;42442:6;42438:566;42458:3;;;;;;;;;;;:13;;;42472:10;42458:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42454:1;:29;42438:566;;;42518:3;;;;;;;;;;;:23;;;42542:10;42554:1;42518:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42504:8;42513:1;42504:11;;;;;;;;:::i;:::-;;;;;;;:52;;;;;42630:13;:26;42644:8;42653:1;42644:11;;;;;;;;:::i;:::-;;;;;;;;42630:26;;;;;;;;;;;;;;;;;;;;;42626:362;;;;;;42736:6;42719:14;:23;42716:253;;;42791:36;42801:10;42813:13;:11;:13::i;:::-;42791:9;:36::i;:::-;42852:16;;;;;:::i;:::-;;;;42922:4;42893:13;:26;42907:8;42916:1;42907:11;;;;;;;;:::i;:::-;;;;;;;;42893:26;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;42716:253;42626:362;42485:3;;;;;:::i;:::-;;;;42438:566;;;;41827:1190;;41779:1238;:::o;39331:103::-;14370:12;:10;:12::i;:::-;14359:23;;:7;:5;:7::i;:::-;:23;;;14351:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;39415:11:::1;39402:10;;:24;;;;;;;;;;;;;;;;;;39331:103:::0;:::o;22639:239::-;22771:41;22790:12;:10;:12::i;:::-;22804:7;22771:18;:41::i;:::-;22763:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22831:39;22845:4;22851:2;22855:7;22864:5;22831:13;:39::i;:::-;22639:239;;;;:::o;38960:34::-;;;;:::o;20264:316::-;20337:13;20371:16;20379:7;20371;:16::i;:::-;20363:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;20408:21;20432:10;:8;:10::i;:::-;20408:34;;20484:1;20466:7;20460:21;:25;:112;;;;;;;;;;;;;;;;;20525:7;20534:18;:7;:16;:18::i;:::-;20508:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20460:112;20453:119;;;20264:316;;;:::o;39552:99::-;14370:12;:10;:12::i;:::-;14359:23;;:7;:5;:7::i;:::-;:23;;;14351:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;39633:10:::1;39621:9;:22;;;;39552:99:::0;:::o;21856:164::-;21953:4;21977:18;:25;21996:5;21977:25;;;;;;;;;;;;;;;:35;22003:8;21977:35;;;;;;;;;;;;;;;;;;;;;;;;;21970:42;;21856:164;;;;:::o;15656:209::-;14370:12;:10;:12::i;:::-;14359:23;;:7;:5;:7::i;:::-;:23;;;14351:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;15765:1:::1;15745:22;;:8;:22;;;;15737:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15820:8;15791:38;;15812:6;;;;;;;;;;;15791:38;;;;;;;;;;;;15849:8;15840:6;;:17;;;;;;;;;;;;;;;;;;15656:209:::0;:::o;39129:30::-;;;;;;;;;;;;;:::o;19065:292::-;19167:4;19206:25;19191:40;;;:11;:40;;;;:105;;;;19263:33;19248:48;;;:11;:48;;;;19191:105;:158;;;;19313:36;19337:11;19313:23;:36::i;:::-;19191:158;19184:165;;19065:292;;;:::o;24298:127::-;24363:4;24415:1;24387:30;;:7;:16;24395:7;24387:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24380:37;;24298:127;;;:::o;4907:98::-;4960:7;4987:10;4980:17;;4907:98;:::o;27969:174::-;28071:2;28044:15;:24;28060:7;28044:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28127:7;28123:2;28089:46;;28098:23;28113:7;28098:14;:23::i;:::-;28089:46;;;;;;;;;;;;27969:174;;:::o;24592:314::-;24685:4;24710:16;24718:7;24710;:16::i;:::-;24702:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;24745:13;24761:23;24776:7;24761:14;:23::i;:::-;24745:39;;24814:5;24803:16;;:7;:16;;;:51;;;;24847:7;24823:31;;:20;24835:7;24823:11;:20::i;:::-;:31;;;24803:51;:94;;;;24858:39;24882:5;24889:7;24858:23;:39::i;:::-;24803:94;24795:103;;;24592:314;;;;:::o;27378:473::-;27503:4;27476:31;;:23;27491:7;27476:14;:23::i;:::-;:31;;;27468:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;27548:1;27534:16;;:2;:16;;;;27526:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;27571:39;27592:4;27598:2;27602:7;27571:20;:39::i;:::-;27675:29;27692:1;27696:7;27675:8;:29::i;:::-;27736:1;27717:9;:15;27727:4;27717:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;27765:1;27748:9;:13;27758:2;27748:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27796:2;27777:7;:16;27785:7;27777:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27835:7;27831:2;27816:27;;27825:4;27816:27;;;;;;;;;;;;27378:473;;;:::o;25248:110::-;25324:26;25334:2;25338:7;25324:26;;;;;;;;;;;;:9;:26::i;:::-;25248:110;;:::o;15105:382::-;15157:18;15203:3;15200:2;15178:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;15157:49;;15216:17;15261:3;15258:2;15236:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;15216:48;;15274:20;15330:9;15319:10;15297:21;:32;;;;:::i;:::-;:42;;;;:::i;:::-;15274:65;;15357:3;;;;;;;;;;;15349:21;;:33;15371:10;15349:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15400:2;;;;;;;;;;;15392:20;;:31;15413:9;15392:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15441:12;:10;:12::i;:::-;15433:30;;:44;15464:12;15433:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15147:340;;;15105:382::o;23760:225::-;23874:28;23884:4;23890:2;23894:7;23874:9;:28::i;:::-;23921:48;23944:4;23950:2;23954:7;23963:5;23921:22;:48::i;:::-;23913:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23760:225;;;;:::o;40390:114::-;40450:13;40483;40476:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40390:114;:::o;16100:723::-;16156:13;16386:1;16377:5;:10;16373:53;;;16404:10;;;;;;;;;;;;;;;;;;;;;16373:53;16436:12;16451:5;16436:20;;16467:14;16492:78;16507:1;16499:4;:9;16492:78;;16525:8;;;;;:::i;:::-;;;;16556:2;16548:10;;;;;:::i;:::-;;;16492:78;;;16580:19;16612:6;16602:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16580:39;;16630:154;16646:1;16637:5;:10;16630:154;;16674:1;16664:11;;;;;:::i;:::-;;;16741:2;16733:5;:10;;;;:::i;:::-;16720:2;:24;;;;:::i;:::-;16707:39;;16690:6;16697;16690:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16770:2;16761:11;;;;;:::i;:::-;;;16630:154;;;16808:6;16794:21;;;;;16100:723;;;;:::o;5955:157::-;6040:4;6079:25;6064:40;;;:11;:40;;;;6057:47;;5955:157;;;:::o;34414:555::-;34524:45;34551:4;34557:2;34561:7;34524:26;:45::i;:::-;34602:1;34586:18;;:4;:18;;;34582:187;;;34621:40;34653:7;34621:31;:40::i;:::-;34582:187;;;34691:2;34683:10;;:4;:10;;;34679:90;;34710:47;34743:4;34749:7;34710:32;:47::i;:::-;34679:90;34582:187;34797:1;34783:16;;:2;:16;;;34779:183;;;34816:45;34853:7;34816:36;:45::i;:::-;34779:183;;;34889:4;34883:10;;:2;:10;;;34879:83;;34910:40;34938:2;34942:7;34910:27;:40::i;:::-;34879:83;34779:183;34414:555;;;:::o;25585:203::-;25681:18;25687:2;25691:7;25681:5;:18::i;:::-;25718:54;25749:1;25753:2;25757:7;25766:5;25718:22;:54::i;:::-;25710:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25585:203;;;:::o;28708:796::-;28829:4;28855:15;:2;:13;;;:15::i;:::-;28851:646;;;28907:2;28891:36;;;28928:12;:10;:12::i;:::-;28942:4;28948:7;28957:5;28891:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28887:555;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29154:1;29137:6;:13;:18;29133:294;;;29180:13;;;;;;;;;;:::i;:::-;;;;;;;;29133:294;29377:6;29371:13;29362:6;29358:2;29354:15;29347:38;28887:555;29024:45;;;29014:55;;;:6;:55;;;;29007:62;;;;;28851:646;29481:4;29474:11;;28708:796;;;;;;;:::o;30117:93::-;;;;:::o;35692:164::-;35796:10;:17;;;;35769:15;:24;35785:7;35769:24;;;;;;;;;;;:44;;;;35824:10;35840:7;35824:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35692:164;:::o;36483:988::-;36749:22;36799:1;36774:22;36791:4;36774:16;:22::i;:::-;:26;;;;:::i;:::-;36749:51;;36811:18;36832:17;:26;36850:7;36832:26;;;;;;;;;;;;36811:47;;36979:14;36965:10;:28;36961:328;;37010:19;37032:12;:18;37045:4;37032:18;;;;;;;;;;;;;;;:34;37051:14;37032:34;;;;;;;;;;;;37010:56;;37116:11;37083:12;:18;37096:4;37083:18;;;;;;;;;;;;;;;:30;37102:10;37083:30;;;;;;;;;;;:44;;;;37233:10;37200:17;:30;37218:11;37200:30;;;;;;;;;;;:43;;;;36995:294;36961:328;37385:17;:26;37403:7;37385:26;;;;;;;;;;;37378:33;;;37429:12;:18;37442:4;37429:18;;;;;;;;;;;;;;;:34;37448:14;37429:34;;;;;;;;;;;37422:41;;;36564:907;;36483:988;;:::o;37766:1079::-;38019:22;38064:1;38044:10;:17;;;;:21;;;;:::i;:::-;38019:46;;38076:18;38097:15;:24;38113:7;38097:24;;;;;;;;;;;;38076:45;;38448:19;38470:10;38481:14;38470:26;;;;;;;;:::i;:::-;;;;;;;;;;38448:48;;38534:11;38509:10;38520;38509:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;38645:10;38614:15;:28;38630:11;38614:28;;;;;;;;;;;:41;;;;38786:15;:24;38802:7;38786:24;;;;;;;;;;;38779:31;;;38821:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37837:1008;;;37766:1079;:::o;35270:221::-;35355:14;35372:20;35389:2;35372:16;:20::i;:::-;35355:37;;35430:7;35403:12;:16;35416:2;35403:16;;;;;;;;;;;;;;;:24;35420:6;35403:24;;;;;;;;;;;:34;;;;35477:6;35448:17;:26;35466:7;35448:26;;;;;;;;;;;:35;;;;35344:147;35270:221;;:::o;26124:328::-;26218:1;26204:16;;:2;:16;;;;26196:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;26248:16;26256:7;26248;:16::i;:::-;26247:17;26239:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;26285:45;26314:1;26318:2;26322:7;26285:20;:45::i;:::-;26360:1;26343:9;:13;26353:2;26343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26391:2;26372:7;:16;26380:7;26372:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26436:7;26432:2;26411:33;;26428:1;26411:33;;;;;;;;;;;;26124:328;;:::o;90:239::-;150:4;175:12;286:7;274:20;266:28;;320:1;313:4;:8;306:15;;;90:239;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:114::-;8938:6;8972:5;8966:12;8956:22;;8871:114;;;:::o;8991:184::-;9090:11;9124:6;9119:3;9112:19;9164:4;9159:3;9155:14;9140:29;;8991:184;;;;:::o;9181:132::-;9248:4;9271:3;9263:11;;9301:4;9296:3;9292:14;9284:22;;9181:132;;;:::o;9319:108::-;9396:24;9414:5;9396:24;:::i;:::-;9391:3;9384:37;9319:108;;:::o;9433:179::-;9502:10;9523:46;9565:3;9557:6;9523:46;:::i;:::-;9601:4;9596:3;9592:14;9578:28;;9433:179;;;;:::o;9618:113::-;9688:4;9720;9715:3;9711:14;9703:22;;9618:113;;;:::o;9767:732::-;9886:3;9915:54;9963:5;9915:54;:::i;:::-;9985:86;10064:6;10059:3;9985:86;:::i;:::-;9978:93;;10095:56;10145:5;10095:56;:::i;:::-;10174:7;10205:1;10190:284;10215:6;10212:1;10209:13;10190:284;;;10291:6;10285:13;10318:63;10377:3;10362:13;10318:63;:::i;:::-;10311:70;;10404:60;10457:6;10404:60;:::i;:::-;10394:70;;10250:224;10237:1;10234;10230:9;10225:14;;10190:284;;;10194:14;10490:3;10483:10;;9891:608;;;9767:732;;;;:::o;10505:373::-;10648:4;10686:2;10675:9;10671:18;10663:26;;10735:9;10729:4;10725:20;10721:1;10710:9;10706:17;10699:47;10763:108;10866:4;10857:6;10763:108;:::i;:::-;10755:116;;10505:373;;;;:::o;10884:116::-;10954:21;10969:5;10954:21;:::i;:::-;10947:5;10944:32;10934:60;;10990:1;10987;10980:12;10934:60;10884:116;:::o;11006:133::-;11049:5;11087:6;11074:20;11065:29;;11103:30;11127:5;11103:30;:::i;:::-;11006:133;;;;:::o;11145:468::-;11210:6;11218;11267:2;11255:9;11246:7;11242:23;11238:32;11235:119;;;11273:79;;:::i;:::-;11235:119;11393:1;11418:53;11463:7;11454:6;11443:9;11439:22;11418:53;:::i;:::-;11408:63;;11364:117;11520:2;11546:50;11588:7;11579:6;11568:9;11564:22;11546:50;:::i;:::-;11536:60;;11491:115;11145:468;;;;;:::o;11619:323::-;11675:6;11724:2;11712:9;11703:7;11699:23;11695:32;11692:119;;;11730:79;;:::i;:::-;11692:119;11850:1;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11821:114;11619:323;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:180::-;14511:77;14508:1;14501:88;14608:4;14605:1;14598:15;14632:4;14629:1;14622:15;14649:320;14693:6;14730:1;14724:4;14720:12;14710:22;;14777:1;14771:4;14767:12;14798:18;14788:81;;14854:4;14846:6;14842:17;14832:27;;14788:81;14916:2;14908:6;14905:14;14885:18;14882:38;14879:84;;;14935:18;;:::i;:::-;14879:84;14700:269;14649:320;;;:::o;14975:153::-;15115:5;15111:1;15103:6;15099:14;15092:29;14975:153;:::o;15134:365::-;15276:3;15297:66;15361:1;15356:3;15297:66;:::i;:::-;15290:73;;15372:93;15461:3;15372:93;:::i;:::-;15490:2;15485:3;15481:12;15474:19;;15134:365;;;:::o;15505:419::-;15671:4;15709:2;15698:9;15694:18;15686:26;;15758:9;15752:4;15748:20;15744:1;15733:9;15729:17;15722:47;15786:131;15912:4;15786:131;:::i;:::-;15778:139;;15505:419;;;:::o;15930:153::-;16070:5;16066:1;16058:6;16054:14;16047:29;15930:153;:::o;16089:365::-;16231:3;16252:66;16316:1;16311:3;16252:66;:::i;:::-;16245:73;;16327:93;16416:3;16327:93;:::i;:::-;16445:2;16440:3;16436:12;16429:19;;16089:365;;;:::o;16460:419::-;16626:4;16664:2;16653:9;16649:18;16641:26;;16713:9;16707:4;16703:20;16699:1;16688:9;16684:17;16677:47;16741:131;16867:4;16741:131;:::i;:::-;16733:139;;16460:419;;;:::o;16885:153::-;17025:5;17021:1;17013:6;17009:14;17002:29;16885:153;:::o;17044:365::-;17186:3;17207:66;17271:1;17266:3;17207:66;:::i;:::-;17200:73;;17282:93;17371:3;17282:93;:::i;:::-;17400:2;17395:3;17391:12;17384:19;;17044:365;;;:::o;17415:419::-;17581:4;17619:2;17608:9;17604:18;17596:26;;17668:9;17662:4;17658:20;17654:1;17643:9;17639:17;17632:47;17696:131;17822:4;17696:131;:::i;:::-;17688:139;;17415:419;;;:::o;17840:153::-;17980:5;17976:1;17968:6;17964:14;17957:29;17840:153;:::o;17999:365::-;18141:3;18162:66;18226:1;18221:3;18162:66;:::i;:::-;18155:73;;18237:93;18326:3;18237:93;:::i;:::-;18355:2;18350:3;18346:12;18339:19;;17999:365;;;:::o;18370:419::-;18536:4;18574:2;18563:9;18559:18;18551:26;;18623:9;18617:4;18613:20;18609:1;18598:9;18594:17;18587:47;18651:131;18777:4;18651:131;:::i;:::-;18643:139;;18370:419;;;:::o;18795:153::-;18935:5;18931:1;18923:6;18919:14;18912:29;18795:153;:::o;18954:365::-;19096:3;19117:66;19181:1;19176:3;19117:66;:::i;:::-;19110:73;;19192:93;19281:3;19192:93;:::i;:::-;19310:2;19305:3;19301:12;19294:19;;18954:365;;;:::o;19325:419::-;19491:4;19529:2;19518:9;19514:18;19506:26;;19578:9;19572:4;19568:20;19564:1;19553:9;19549:17;19542:47;19606:131;19732:4;19606:131;:::i;:::-;19598:139;;19325:419;;;:::o;19750:230::-;19890:34;19886:1;19878:6;19874:14;19867:58;19959:13;19954:2;19946:6;19942:15;19935:38;19750:230;:::o;19986:366::-;20128:3;20149:67;20213:2;20208:3;20149:67;:::i;:::-;20142:74;;20225:93;20314:3;20225:93;:::i;:::-;20343:2;20338:3;20334:12;20327:19;;19986:366;;;:::o;20358:419::-;20524:4;20562:2;20551:9;20547:18;20539:26;;20611:9;20605:4;20601:20;20597:1;20586:9;20582:17;20575:47;20639:131;20765:4;20639:131;:::i;:::-;20631:139;;20358:419;;;:::o;20783:165::-;20923:17;20919:1;20911:6;20907:14;20900:41;20783:165;:::o;20954:366::-;21096:3;21117:67;21181:2;21176:3;21117:67;:::i;:::-;21110:74;;21193:93;21282:3;21193:93;:::i;:::-;21311:2;21306:3;21302:12;21295:19;;20954:366;;;:::o;21326:419::-;21492:4;21530:2;21519:9;21515:18;21507:26;;21579:9;21573:4;21569:20;21565:1;21554:9;21550:17;21543:47;21607:131;21733:4;21607:131;:::i;:::-;21599:139;;21326:419;;;:::o;21751:180::-;21799:77;21796:1;21789:88;21896:4;21893:1;21886:15;21920:4;21917:1;21910:15;21937:305;21977:3;21996:20;22014:1;21996:20;:::i;:::-;21991:25;;22030:20;22048:1;22030:20;:::i;:::-;22025:25;;22184:1;22116:66;22112:74;22109:1;22106:81;22103:107;;;22190:18;;:::i;:::-;22103:107;22234:1;22231;22227:9;22220:16;;21937:305;;;;:::o;22248:163::-;22388:15;22384:1;22376:6;22372:14;22365:39;22248:163;:::o;22417:366::-;22559:3;22580:67;22644:2;22639:3;22580:67;:::i;:::-;22573:74;;22656:93;22745:3;22656:93;:::i;:::-;22774:2;22769:3;22765:12;22758:19;;22417:366;;;:::o;22789:419::-;22955:4;22993:2;22982:9;22978:18;22970:26;;23042:9;23036:4;23032:20;23028:1;23017:9;23013:17;23006:47;23070:131;23196:4;23070:131;:::i;:::-;23062:139;;22789:419;;;:::o;23214:160::-;23354:12;23350:1;23342:6;23338:14;23331:36;23214:160;:::o;23380:366::-;23522:3;23543:67;23607:2;23602:3;23543:67;:::i;:::-;23536:74;;23619:93;23708:3;23619:93;:::i;:::-;23737:2;23732:3;23728:12;23721:19;;23380:366;;;:::o;23752:419::-;23918:4;23956:2;23945:9;23941:18;23933:26;;24005:9;23999:4;23995:20;23991:1;23980:9;23976:17;23969:47;24033:131;24159:4;24033:131;:::i;:::-;24025:139;;23752:419;;;:::o;24177:348::-;24217:7;24240:20;24258:1;24240:20;:::i;:::-;24235:25;;24274:20;24292:1;24274:20;:::i;:::-;24269:25;;24462:1;24394:66;24390:74;24387:1;24384:81;24379:1;24372:9;24365:17;24361:105;24358:131;;;24469:18;;:::i;:::-;24358:131;24517:1;24514;24510:9;24499:20;;24177:348;;;;:::o;24531:167::-;24671:19;24667:1;24659:6;24655:14;24648:43;24531:167;:::o;24704:366::-;24846:3;24867:67;24931:2;24926:3;24867:67;:::i;:::-;24860:74;;24943:93;25032:3;24943:93;:::i;:::-;25061:2;25056:3;25052:12;25045:19;;24704:366;;;:::o;25076:419::-;25242:4;25280:2;25269:9;25265:18;25257:26;;25329:9;25323:4;25319:20;25315:1;25304:9;25300:17;25293:47;25357:131;25483:4;25357:131;:::i;:::-;25349:139;;25076:419;;;:::o;25501:233::-;25540:3;25563:24;25581:5;25563:24;:::i;:::-;25554:33;;25609:66;25602:5;25599:77;25596:103;;;25679:18;;:::i;:::-;25596:103;25726:1;25719:5;25715:13;25708:20;;25501:233;;;:::o;25740:231::-;25880:34;25876:1;25868:6;25864:14;25857:58;25949:14;25944:2;25936:6;25932:15;25925:39;25740:231;:::o;25977:366::-;26119:3;26140:67;26204:2;26199:3;26140:67;:::i;:::-;26133:74;;26216:93;26305:3;26216:93;:::i;:::-;26334:2;26329:3;26325:12;26318:19;;25977:366;;;:::o;26349:419::-;26515:4;26553:2;26542:9;26538:18;26530:26;;26602:9;26596:4;26592:20;26588:1;26577:9;26573:17;26566:47;26630:131;26756:4;26630:131;:::i;:::-;26622:139;;26349:419;;;:::o;26774:180::-;26822:77;26819:1;26812:88;26919:4;26916:1;26909:15;26943:4;26940:1;26933:15;26960:153;27100:5;27096:1;27088:6;27084:14;27077:29;26960:153;:::o;27119:365::-;27261:3;27282:66;27346:1;27341:3;27282:66;:::i;:::-;27275:73;;27357:93;27446:3;27357:93;:::i;:::-;27475:2;27470:3;27466:12;27459:19;;27119:365;;;:::o;27490:419::-;27656:4;27694:2;27683:9;27679:18;27671:26;;27743:9;27737:4;27733:20;27729:1;27718:9;27714:17;27707:47;27771:131;27897:4;27771:131;:::i;:::-;27763:139;;27490:419;;;:::o;27915:143::-;27972:5;28003:6;27997:13;27988:22;;28019:33;28046:5;28019:33;:::i;:::-;27915:143;;;;:::o;28064:351::-;28134:6;28183:2;28171:9;28162:7;28158:23;28154:32;28151:119;;;28189:79;;:::i;:::-;28151:119;28309:1;28334:64;28390:7;28381:6;28370:9;28366:22;28334:64;:::i;:::-;28324:74;;28280:128;28064:351;;;;:::o;28421:332::-;28542:4;28580:2;28569:9;28565:18;28557:26;;28593:71;28661:1;28650:9;28646:17;28637:6;28593:71;:::i;:::-;28674:72;28742:2;28731:9;28727:18;28718:6;28674:72;:::i;:::-;28421:332;;;;;:::o;28759:118::-;28796:7;28836:34;28829:5;28825:46;28814:57;;28759:118;;;:::o;28883:201::-;28922:3;28945:24;28963:5;28945:24;:::i;:::-;28936:33;;28991:34;28984:5;28981:45;28978:71;;;29029:18;;:::i;:::-;28978:71;29076:1;29069:5;29065:13;29058:20;;28883:201;;;:::o;29090:153::-;29230:5;29226:1;29218:6;29214:14;29207:29;29090:153;:::o;29249:365::-;29391:3;29412:66;29476:1;29471:3;29412:66;:::i;:::-;29405:73;;29487:93;29576:3;29487:93;:::i;:::-;29605:2;29600:3;29596:12;29589:19;;29249:365;;;:::o;29620:419::-;29786:4;29824:2;29813:9;29809:18;29801:26;;29873:9;29867:4;29863:20;29859:1;29848:9;29844:17;29837:47;29901:131;30027:4;29901:131;:::i;:::-;29893:139;;29620:419;;;:::o;30045:153::-;30185:5;30181:1;30173:6;30169:14;30162:29;30045:153;:::o;30204:365::-;30346:3;30367:66;30431:1;30426:3;30367:66;:::i;:::-;30360:73;;30442:93;30531:3;30442:93;:::i;:::-;30560:2;30555:3;30551:12;30544:19;;30204:365;;;:::o;30575:419::-;30741:4;30779:2;30768:9;30764:18;30756:26;;30828:9;30822:4;30818:20;30814:1;30803:9;30799:17;30792:47;30856:131;30982:4;30856:131;:::i;:::-;30848:139;;30575:419;;;:::o;31000:177::-;31140:29;31136:1;31128:6;31124:14;31117:53;31000:177;:::o;31183:366::-;31325:3;31346:67;31410:2;31405:3;31346:67;:::i;:::-;31339:74;;31422:93;31511:3;31422:93;:::i;:::-;31540:2;31535:3;31531:12;31524:19;;31183:366;;;:::o;31555:419::-;31721:4;31759:2;31748:9;31744:18;31736:26;;31808:9;31802:4;31798:20;31794:1;31783:9;31779:17;31772:47;31836:131;31962:4;31836:131;:::i;:::-;31828:139;;31555:419;;;:::o;31980:153::-;32120:5;32116:1;32108:6;32104:14;32097:29;31980:153;:::o;32139:365::-;32281:3;32302:66;32366:1;32361:3;32302:66;:::i;:::-;32295:73;;32377:93;32466:3;32377:93;:::i;:::-;32495:2;32490:3;32486:12;32479:19;;32139:365;;;:::o;32510:419::-;32676:4;32714:2;32703:9;32699:18;32691:26;;32763:9;32757:4;32753:20;32749:1;32738:9;32734:17;32727:47;32791:131;32917:4;32791:131;:::i;:::-;32783:139;;32510:419;;;:::o;32935:153::-;33075:5;33071:1;33063:6;33059:14;33052:29;32935:153;:::o;33094:365::-;33236:3;33257:66;33321:1;33316:3;33257:66;:::i;:::-;33250:73;;33332:93;33421:3;33332:93;:::i;:::-;33450:2;33445:3;33441:12;33434:19;;33094:365;;;:::o;33465:419::-;33631:4;33669:2;33658:9;33654:18;33646:26;;33718:9;33712:4;33708:20;33704:1;33693:9;33689:17;33682:47;33746:131;33872:4;33746:131;:::i;:::-;33738:139;;33465:419;;;:::o;33890:148::-;33992:11;34029:3;34014:18;;33890:148;;;;:::o;34044:377::-;34150:3;34178:39;34211:5;34178:39;:::i;:::-;34233:89;34315:6;34310:3;34233:89;:::i;:::-;34226:96;;34331:52;34376:6;34371:3;34364:4;34357:5;34353:16;34331:52;:::i;:::-;34408:6;34403:3;34399:16;34392:23;;34154:267;34044:377;;;;:::o;34427:435::-;34607:3;34629:95;34720:3;34711:6;34629:95;:::i;:::-;34622:102;;34741:95;34832:3;34823:6;34741:95;:::i;:::-;34734:102;;34853:3;34846:10;;34427:435;;;;;:::o;34868:153::-;35008:5;35004:1;34996:6;34992:14;34985:29;34868:153;:::o;35027:365::-;35169:3;35190:66;35254:1;35249:3;35190:66;:::i;:::-;35183:73;;35265:93;35354:3;35265:93;:::i;:::-;35383:2;35378:3;35374:12;35367:19;;35027:365;;;:::o;35398:419::-;35564:4;35602:2;35591:9;35587:18;35579:26;;35651:9;35645:4;35641:20;35637:1;35626:9;35622:17;35615:47;35679:131;35805:4;35679:131;:::i;:::-;35671:139;;35398:419;;;:::o;35823:153::-;35963:5;35959:1;35951:6;35947:14;35940:29;35823:153;:::o;35982:365::-;36124:3;36145:66;36209:1;36204:3;36145:66;:::i;:::-;36138:73;;36220:93;36309:3;36220:93;:::i;:::-;36338:2;36333:3;36329:12;36322:19;;35982:365;;;:::o;36353:419::-;36519:4;36557:2;36546:9;36542:18;36534:26;;36606:9;36600:4;36596:20;36592:1;36581:9;36577:17;36570:47;36634:131;36760:4;36634:131;:::i;:::-;36626:139;;36353:419;;;:::o;36778:153::-;36918:5;36914:1;36906:6;36902:14;36895:29;36778:153;:::o;36937:365::-;37079:3;37100:66;37164:1;37159:3;37100:66;:::i;:::-;37093:73;;37175:93;37264:3;37175:93;:::i;:::-;37293:2;37288:3;37284:12;37277:19;;36937:365;;;:::o;37308:419::-;37474:4;37512:2;37501:9;37497:18;37489:26;;37561:9;37555:4;37551:20;37547:1;37536:9;37532:17;37525:47;37589:131;37715:4;37589:131;:::i;:::-;37581:139;;37308:419;;;:::o;37733:153::-;37873:5;37869:1;37861:6;37857:14;37850:29;37733:153;:::o;37892:365::-;38034:3;38055:66;38119:1;38114:3;38055:66;:::i;:::-;38048:73;;38130:93;38219:3;38130:93;:::i;:::-;38248:2;38243:3;38239:12;38232:19;;37892:365;;;:::o;38263:419::-;38429:4;38467:2;38456:9;38452:18;38444:26;;38516:9;38510:4;38506:20;38502:1;38491:9;38487:17;38480:47;38544:131;38670:4;38544:131;:::i;:::-;38536:139;;38263:419;;;:::o;38688:191::-;38728:4;38748:20;38766:1;38748:20;:::i;:::-;38743:25;;38782:20;38800:1;38782:20;:::i;:::-;38777:25;;38821:1;38818;38815:8;38812:34;;;38826:18;;:::i;:::-;38812:34;38871:1;38868;38864:9;38856:17;;38688:191;;;;:::o;38885:180::-;38933:77;38930:1;38923:88;39030:4;39027:1;39020:15;39054:4;39051:1;39044:15;39071:185;39111:1;39128:20;39146:1;39128:20;:::i;:::-;39123:25;;39162:20;39180:1;39162:20;:::i;:::-;39157:25;;39201:1;39191:35;;39206:18;;:::i;:::-;39191:35;39248:1;39245;39241:9;39236:14;;39071:185;;;;:::o;39262:153::-;39402:5;39398:1;39390:6;39386:14;39379:29;39262:153;:::o;39421:365::-;39563:3;39584:66;39648:1;39643:3;39584:66;:::i;:::-;39577:73;;39659:93;39748:3;39659:93;:::i;:::-;39777:2;39772:3;39768:12;39761:19;;39421:365;;;:::o;39792:419::-;39958:4;39996:2;39985:9;39981:18;39973:26;;40045:9;40039:4;40035:20;40031:1;40020:9;40016:17;40009:47;40073:131;40199:4;40073:131;:::i;:::-;40065:139;;39792:419;;;:::o;40217:176::-;40249:1;40266:20;40284:1;40266:20;:::i;:::-;40261:25;;40300:20;40318:1;40300:20;:::i;:::-;40295:25;;40339:1;40329:35;;40344:18;;:::i;:::-;40329:35;40385:1;40382;40378:9;40373:14;;40217:176;;;;:::o;40399:153::-;40539:5;40535:1;40527:6;40523:14;40516:29;40399:153;:::o;40558:365::-;40700:3;40721:66;40785:1;40780:3;40721:66;:::i;:::-;40714:73;;40796:93;40885:3;40796:93;:::i;:::-;40914:2;40909:3;40905:12;40898:19;;40558:365;;;:::o;40929:419::-;41095:4;41133:2;41122:9;41118:18;41110:26;;41182:9;41176:4;41172:20;41168:1;41157:9;41153:17;41146:47;41210:131;41336:4;41210:131;:::i;:::-;41202:139;;40929:419;;;:::o;41354:98::-;41405:6;41439:5;41433:12;41423:22;;41354:98;;;:::o;41458:168::-;41541:11;41575:6;41570:3;41563:19;41615:4;41610:3;41606:14;41591:29;;41458:168;;;;:::o;41632:360::-;41718:3;41746:38;41778:5;41746:38;:::i;:::-;41800:70;41863:6;41858:3;41800:70;:::i;:::-;41793:77;;41879:52;41924:6;41919:3;41912:4;41905:5;41901:16;41879:52;:::i;:::-;41956:29;41978:6;41956:29;:::i;:::-;41951:3;41947:39;41940:46;;41722:270;41632:360;;;;:::o;41998:640::-;42193:4;42231:3;42220:9;42216:19;42208:27;;42245:71;42313:1;42302:9;42298:17;42289:6;42245:71;:::i;:::-;42326:72;42394:2;42383:9;42379:18;42370:6;42326:72;:::i;:::-;42408;42476:2;42465:9;42461:18;42452:6;42408:72;:::i;:::-;42527:9;42521:4;42517:20;42512:2;42501:9;42497:18;42490:48;42555:76;42626:4;42617:6;42555:76;:::i;:::-;42547:84;;41998:640;;;;;;;:::o;42644:141::-;42700:5;42731:6;42725:13;42716:22;;42747:32;42773:5;42747:32;:::i;:::-;42644:141;;;;:::o;42791:349::-;42860:6;42909:2;42897:9;42888:7;42884:23;42880:32;42877:119;;;42915:79;;:::i;:::-;42877:119;43035:1;43060:63;43115:7;43106:6;43095:9;43091:22;43060:63;:::i;:::-;43050:73;;43006:127;42791:349;;;;:::o;43146:153::-;43286:5;43282:1;43274:6;43270:14;43263:29;43146:153;:::o;43305:365::-;43447:3;43468:66;43532:1;43527:3;43468:66;:::i;:::-;43461:73;;43543:93;43632:3;43543:93;:::i;:::-;43661:2;43656:3;43652:12;43645:19;;43305:365;;;:::o;43676:419::-;43842:4;43880:2;43869:9;43865:18;43857:26;;43929:9;43923:4;43919:20;43915:1;43904:9;43900:17;43893:47;43957:131;44083:4;43957:131;:::i;:::-;43949:139;;43676:419;;;:::o;44101:180::-;44149:77;44146:1;44139:88;44246:4;44243:1;44236:15;44270:4;44267:1;44260:15;44287:153;44427:5;44423:1;44415:6;44411:14;44404:29;44287:153;:::o;44446:365::-;44588:3;44609:66;44673:1;44668:3;44609:66;:::i;:::-;44602:73;;44684:93;44773:3;44684:93;:::i;:::-;44802:2;44797:3;44793:12;44786:19;;44446:365;;;:::o;44817:419::-;44983:4;45021:2;45010:9;45006:18;44998:26;;45070:9;45064:4;45060:20;45056:1;45045:9;45041:17;45034:47;45098:131;45224:4;45098:131;:::i;:::-;45090:139;;44817:419;;;:::o;45242:153::-;45382:5;45378:1;45370:6;45366:14;45359:29;45242:153;:::o;45401:365::-;45543:3;45564:66;45628:1;45623:3;45564:66;:::i;:::-;45557:73;;45639:93;45728:3;45639:93;:::i;:::-;45757:2;45752:3;45748:12;45741:19;;45401:365;;;:::o;45772:419::-;45938:4;45976:2;45965:9;45961:18;45953:26;;46025:9;46019:4;46015:20;46011:1;46000:9;45996:17;45989:47;46053:131;46179:4;46053:131;:::i;:::-;46045:139;;45772:419;;;:::o
Swarm Source
ipfs://4242ce89941d45e4fad20b55f2f3011ba5de2c29f7be4ccfeee1171052709196
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.