ETH Price: $3,385.86 (-1.77%)
Gas: 1 Gwei

Token

Animoon Potion (Potion)
 

Overview

Max Total Supply

1,000 Potion

Holders

870

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 Potion
0x59ac7b748d68497477ff9b7c229c8b6d886121b2
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AnimoonPotion

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-16
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @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) {
        return msg.data;
    }
}
pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "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] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
pragma solidity ^0.8.0;

/**
 * @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);
}
pragma solidity ^0.8.0;

/**
 * @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);
}
pragma solidity ^0.8.0;


/**
 * @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 private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_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(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @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() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @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), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
pragma solidity ^0.8.0;


/**
 * @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;
    }
}
pragma solidity ^0.8.0;


/**
 * @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;
}


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
}

pragma solidity ^0.8.0;


/**
 * @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);
}
pragma solidity ^0.8.0;


/**
 * @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), "ERC721: balance query for the zero address");
        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), "ERC721: owner query for nonexistent token");
        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), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. 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, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _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), "ERC721: transfer caller is not owner nor approved");

        _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), "ERC721: transfer caller is not owner nor approved");
        _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), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @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), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || 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),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @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), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _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, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    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` and `to` are never both zero.
     *
     * 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 {}
}


pragma solidity ^0.8.0;


contract AnimoonPotion is Ownable, ERC721 {
    

    uint constant maxSupply = 1000;
    uint public totalSupply = 0;
    bool public public_sale_status = false;
    uint public minimumrequired = 2;
    string public baseURI;
    uint public maxPerTransaction = 1;  //Max Limit for Sale
    uint public maxPerWallet = 1; //Max Limit perwallet
         
    constructor() ERC721("Animoon Potion", "Potion"){}

   function buy(uint _count) public payable {
         require(public_sale_status == true, "Sale is Paused.");
        require(_count == 1, "mint at least one token");
         require(checknftholder(msg.sender) >= minimumrequired, "You do not have enough Animoon nfts");
        require(balanceOf(msg.sender) < 1, "you already minted");
        require(totalSupply + _count <= maxSupply, "Not enough tokens left");
        
        for(uint i = 0; i < _count; i++)
            _safeMint(msg.sender, totalSupply + 1 + i);
        totalSupply += _count;
    }


    function sendGifts(address[] memory _wallets) public onlyOwner{
        require(_wallets.length > 0, "mint at least one token");
        require(_wallets.length <= maxPerTransaction, "max per transaction 20");
        require(totalSupply + _wallets.length <= maxSupply, "not enough tokens left");
        for(uint i = 0; i < _wallets.length; i++)
            _safeMint(_wallets[i], totalSupply + 1 + i);
        totalSupply += _wallets.length;
    }

    function setBaseUri(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }

    function publicSale_status(bool temp) external onlyOwner {
        public_sale_status = temp;
    }
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
   function withdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

 function checknftholder(address recnft) public view returns(uint) {
    address othercontractadd = 0x988a3e9834f1a4977e6F727E18EA167089349bA2;
    IERC20 tokenob = IERC20(othercontractadd);
    return tokenob.balanceOf(recnft);
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"recnft","type":"address"}],"name":"checknftholder","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":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumrequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"publicSale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"public_sale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"sendGifts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006007556000600860006101000a81548160ff02191690831515021790555060026009556001600b556001600c553480156200004057600080fd5b506040518060400160405280600e81526020017f416e696d6f6f6e20506f74696f6e0000000000000000000000000000000000008152506040518060400160405280600681526020017f506f74696f6e0000000000000000000000000000000000000000000000000000815250620000cd620000c16200010760201b60201c565b6200010f60201b60201c565b8160019080519060200190620000e5929190620001d3565b508060029080519060200190620000fe929190620001d3565b505050620002e8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001e19062000283565b90600052602060002090601f01602090048101928262000205576000855562000251565b82601f106200022057805160ff191683800117855562000251565b8280016001018555821562000251579182015b828111156200025057825182559160200191906001019062000233565b5b50905062000260919062000264565b5090565b5b808211156200027f57600081600090555060010162000265565b5090565b600060028204905060018216806200029c57607f821691505b60208210811415620002b357620002b2620002b9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613c0180620002f86000396000f3fe6080604052600436106101b75760003560e01c806370a08231116100ec578063a0bcfc7f1161008a578063c87b56dd11610064578063c87b56dd146105e6578063d96a094a14610623578063e985e9c51461063f578063f2fde38b1461067c576101b7565b8063a0bcfc7f1461056b578063a22cb46514610594578063b88d4fde146105bd576101b7565b806389b52e65116100c657806389b52e65146104ad5780638da5cb5b146104ea57806395d89b411461051557806395ea5e6714610540576101b7565b806370a0823114610430578063715018a61461046d5780637c8255db14610484576101b7565b80633c28081111610159578063453c231011610133578063453c2310146103725780634b980d671461039d5780636352211e146103c85780636c0360eb14610405576101b7565b80633c280811146103075780633ccfd60b1461033257806342842e0e14610349576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631cef37e4146102b557806323b872dd146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de91906128c4565b6106a5565b6040516101f09190612e41565b60405180910390f35b34801561020557600080fd5b5061020e610787565b60405161021b9190612e5c565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612967565b610819565b6040516102589190612dda565b60405180910390f35b34801561026d57600080fd5b506102886004803603810190610283919061280e565b61089e565b005b34801561029657600080fd5b5061029f6109b6565b6040516102ac919061315e565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612897565b6109bc565b005b3480156102ea57600080fd5b50610305600480360381019061030091906126f8565b610a55565b005b34801561031357600080fd5b5061031c610ab5565b604051610329919061315e565b60405180910390f35b34801561033e57600080fd5b50610347610abb565b005b34801561035557600080fd5b50610370600480360381019061036b91906126f8565b610b87565b005b34801561037e57600080fd5b50610387610ba7565b604051610394919061315e565b60405180910390f35b3480156103a957600080fd5b506103b2610bad565b6040516103bf919061315e565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190612967565b610bb3565b6040516103fc9190612dda565b60405180910390f35b34801561041157600080fd5b5061041a610c65565b6040516104279190612e5c565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061268b565b610cf3565b604051610464919061315e565b60405180910390f35b34801561047957600080fd5b50610482610dab565b005b34801561049057600080fd5b506104ab60048036038101906104a6919061284e565b610e33565b005b3480156104b957600080fd5b506104d460048036038101906104cf919061268b565b611006565b6040516104e1919061315e565b60405180910390f35b3480156104f657600080fd5b506104ff6110b7565b60405161050c9190612dda565b60405180910390f35b34801561052157600080fd5b5061052a6110e0565b6040516105379190612e5c565b60405180910390f35b34801561054c57600080fd5b50610555611172565b6040516105629190612e41565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d919061291e565b611185565b005b3480156105a057600080fd5b506105bb60048036038101906105b691906127ce565b61121b565b005b3480156105c957600080fd5b506105e460048036038101906105df919061274b565b61139c565b005b3480156105f257600080fd5b5061060d60048036038101906106089190612967565b6113fe565b60405161061a9190612e5c565b60405180910390f35b61063d60048036038101906106389190612967565b6114a5565b005b34801561064b57600080fd5b50610666600480360381019061066191906126b8565b611686565b6040516106739190612e41565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e919061268b565b61171a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610780575061077f82611812565b5b9050919050565b606060018054610796906133e0565b80601f01602080910402602001604051908101604052809291908181526020018280546107c2906133e0565b801561080f5780601f106107e45761010080835404028352916020019161080f565b820191906000526020600020905b8154815290600101906020018083116107f257829003601f168201915b5050505050905090565b60006108248261187c565b610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085a9061301e565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a982610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561091a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109119061309e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109396118e8565b73ffffffffffffffffffffffffffffffffffffffff1614806109685750610967816109626118e8565b611686565b5b6109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e90612f5e565b60405180910390fd5b6109b183836118f0565b505050565b60075481565b6109c46118e8565b73ffffffffffffffffffffffffffffffffffffffff166109e26110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f9061303e565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b610a66610a606118e8565b826119a9565b610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c906130be565b60405180910390fd5b610ab0838383611a87565b505050565b60095481565b610ac36118e8565b73ffffffffffffffffffffffffffffffffffffffff16610ae16110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e9061303e565b60405180910390fd5b610b3f6110b7565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b84573d6000803e3d6000fd5b50565b610ba28383836040518060200160405280600081525061139c565b505050565b600c5481565b600b5481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390612f9e565b60405180910390fd5b80915050919050565b600a8054610c72906133e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e906133e0565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90612f7e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610db36118e8565b73ffffffffffffffffffffffffffffffffffffffff16610dd16110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e9061303e565b60405180910390fd5b610e316000611ce3565b565b610e3b6118e8565b73ffffffffffffffffffffffffffffffffffffffff16610e596110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea69061303e565b60405180910390fd5b6000815111610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea906130de565b60405180910390fd5b600b5481511115610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f30906130fe565b60405180910390fd5b6103e88151600754610f4b919061326f565b1115610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f839061311e565b60405180910390fd5b60005b8151811015610fe857610fd5828281518110610fae57610fad61354a565b5b6020026020010151826001600754610fc6919061326f565b610fd0919061326f565b611da7565b8080610fe090613443565b915050610f8f565b50805160076000828254610ffc919061326f565b9250508190555050565b60008073988a3e9834f1a4977e6f727e18ea167089349ba2905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161105e9190612dda565b60206040518083038186803b15801561107657600080fd5b505afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190612994565b92505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546110ef906133e0565b80601f016020809104026020016040519081016040528092919081815260200182805461111b906133e0565b80156111685780601f1061113d57610100808354040283529160200191611168565b820191906000526020600020905b81548152906001019060200180831161114b57829003601f168201915b5050505050905090565b600860009054906101000a900460ff1681565b61118d6118e8565b73ffffffffffffffffffffffffffffffffffffffff166111ab6110b7565b73ffffffffffffffffffffffffffffffffffffffff1614611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f89061303e565b60405180910390fd5b80600a90805190602001906112179291906123ec565b5050565b6112236118e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890612efe565b60405180910390fd5b806006600061129e6118e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661134b6118e8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113909190612e41565b60405180910390a35050565b6113ad6113a76118e8565b836119a9565b6113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906130be565b60405180910390fd5b6113f884848484611dc5565b50505050565b60606114098261187c565b611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f9061307e565b60405180910390fd5b6000611452611e21565b90506000815111611472576040518060200160405280600081525061149d565b8061147c84611eb3565b60405160200161148d929190612db6565b6040516020818303038152906040525b915050919050565b60011515600860009054906101000a900460ff161515146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f29061313e565b60405180910390fd5b6001811461153e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611535906130de565b60405180910390fd5b60095461154a33611006565b101561158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158290612fde565b60405180910390fd5b600161159633610cf3565b106115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90612f3e565b60405180910390fd5b6103e8816007546115e7919061326f565b1115611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90612fbe565b60405180910390fd5b60005b818110156116695761165633826001600754611647919061326f565b611651919061326f565b611da7565b808061166190613443565b91505061162b565b50806007600082825461167c919061326f565b9250508190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117226118e8565b73ffffffffffffffffffffffffffffffffffffffff166117406110b7565b73ffffffffffffffffffffffffffffffffffffffff1614611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d9061303e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fd90612e9e565b60405180910390fd5b61180f81611ce3565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661196383610bb3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119b48261187c565b6119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90612f1e565b60405180910390fd5b60006119fe83610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a6d57508373ffffffffffffffffffffffffffffffffffffffff16611a5584610819565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a7e5750611a7d8185611686565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aa782610bb3565b73ffffffffffffffffffffffffffffffffffffffff1614611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af49061305e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490612ede565b60405180910390fd5b611b78838383612014565b611b836000826118f0565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd391906132f6565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c2a919061326f565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611dc1828260405180602001604052806000815250612019565b5050565b611dd0848484611a87565b611ddc84848484612074565b611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290612e7e565b60405180910390fd5b50505050565b6060600a8054611e30906133e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5c906133e0565b8015611ea95780601f10611e7e57610100808354040283529160200191611ea9565b820191906000526020600020905b815481529060010190602001808311611e8c57829003601f168201915b5050505050905090565b60606000821415611efb576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061200f565b600082905060005b60008214611f2d578080611f1690613443565b915050600a82611f2691906132c5565b9150611f03565b60008167ffffffffffffffff811115611f4957611f48613579565b5b6040519080825280601f01601f191660200182016040528015611f7b5781602001600182028036833780820191505090505b5090505b6000851461200857600182611f9491906132f6565b9150600a85611fa3919061348c565b6030611faf919061326f565b60f81b818381518110611fc557611fc461354a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561200191906132c5565b9450611f7f565b8093505050505b919050565b505050565b612023838361220b565b6120306000848484612074565b61206f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206690612e7e565b60405180910390fd5b505050565b60006120958473ffffffffffffffffffffffffffffffffffffffff166123d9565b156121fe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120be6118e8565b8786866040518563ffffffff1660e01b81526004016120e09493929190612df5565b602060405180830381600087803b1580156120fa57600080fd5b505af192505050801561212b57506040513d601f19601f8201168201806040525081019061212891906128f1565b60015b6121ae573d806000811461215b576040519150601f19603f3d011682016040523d82523d6000602084013e612160565b606091505b506000815114156121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219d90612e7e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612203565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227290612ffe565b60405180910390fd5b6122848161187c565b156122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90612ebe565b60405180910390fd5b6122d060008383612014565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612320919061326f565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546123f8906133e0565b90600052602060002090601f01602090048101928261241a5760008555612461565b82601f1061243357805160ff1916838001178555612461565b82800160010185558215612461579182015b82811115612460578251825591602001919060010190612445565b5b50905061246e9190612472565b5090565b5b8082111561248b576000816000905550600101612473565b5090565b60006124a261249d8461319e565b613179565b905080838252602082019050828560208602820111156124c5576124c46135ad565b5b60005b858110156124f557816124db8882612583565b8452602084019350602083019250506001810190506124c8565b5050509392505050565b600061251261250d846131ca565b613179565b90508281526020810184848401111561252e5761252d6135b2565b5b61253984828561339e565b509392505050565b600061255461254f846131fb565b613179565b9050828152602081018484840111156125705761256f6135b2565b5b61257b84828561339e565b509392505050565b60008135905061259281613b6f565b92915050565b600082601f8301126125ad576125ac6135a8565b5b81356125bd84826020860161248f565b91505092915050565b6000813590506125d581613b86565b92915050565b6000813590506125ea81613b9d565b92915050565b6000815190506125ff81613b9d565b92915050565b600082601f83011261261a576126196135a8565b5b813561262a8482602086016124ff565b91505092915050565b600082601f830112612648576126476135a8565b5b8135612658848260208601612541565b91505092915050565b60008135905061267081613bb4565b92915050565b60008151905061268581613bb4565b92915050565b6000602082840312156126a1576126a06135bc565b5b60006126af84828501612583565b91505092915050565b600080604083850312156126cf576126ce6135bc565b5b60006126dd85828601612583565b92505060206126ee85828601612583565b9150509250929050565b600080600060608486031215612711576127106135bc565b5b600061271f86828701612583565b935050602061273086828701612583565b925050604061274186828701612661565b9150509250925092565b60008060008060808587031215612765576127646135bc565b5b600061277387828801612583565b945050602061278487828801612583565b935050604061279587828801612661565b925050606085013567ffffffffffffffff8111156127b6576127b56135b7565b5b6127c287828801612605565b91505092959194509250565b600080604083850312156127e5576127e46135bc565b5b60006127f385828601612583565b9250506020612804858286016125c6565b9150509250929050565b60008060408385031215612825576128246135bc565b5b600061283385828601612583565b925050602061284485828601612661565b9150509250929050565b600060208284031215612864576128636135bc565b5b600082013567ffffffffffffffff811115612882576128816135b7565b5b61288e84828501612598565b91505092915050565b6000602082840312156128ad576128ac6135bc565b5b60006128bb848285016125c6565b91505092915050565b6000602082840312156128da576128d96135bc565b5b60006128e8848285016125db565b91505092915050565b600060208284031215612907576129066135bc565b5b6000612915848285016125f0565b91505092915050565b600060208284031215612934576129336135bc565b5b600082013567ffffffffffffffff811115612952576129516135b7565b5b61295e84828501612633565b91505092915050565b60006020828403121561297d5761297c6135bc565b5b600061298b84828501612661565b91505092915050565b6000602082840312156129aa576129a96135bc565b5b60006129b884828501612676565b91505092915050565b6129ca8161332a565b82525050565b6129d98161333c565b82525050565b60006129ea8261322c565b6129f48185613242565b9350612a048185602086016133ad565b612a0d816135c1565b840191505092915050565b6000612a2382613237565b612a2d8185613253565b9350612a3d8185602086016133ad565b612a46816135c1565b840191505092915050565b6000612a5c82613237565b612a668185613264565b9350612a768185602086016133ad565b80840191505092915050565b6000612a8f603283613253565b9150612a9a826135d2565b604082019050919050565b6000612ab2602683613253565b9150612abd82613621565b604082019050919050565b6000612ad5601c83613253565b9150612ae082613670565b602082019050919050565b6000612af8602483613253565b9150612b0382613699565b604082019050919050565b6000612b1b601983613253565b9150612b26826136e8565b602082019050919050565b6000612b3e602c83613253565b9150612b4982613711565b604082019050919050565b6000612b61601283613253565b9150612b6c82613760565b602082019050919050565b6000612b84603883613253565b9150612b8f82613789565b604082019050919050565b6000612ba7602a83613253565b9150612bb2826137d8565b604082019050919050565b6000612bca602983613253565b9150612bd582613827565b604082019050919050565b6000612bed601683613253565b9150612bf882613876565b602082019050919050565b6000612c10602383613253565b9150612c1b8261389f565b604082019050919050565b6000612c33602083613253565b9150612c3e826138ee565b602082019050919050565b6000612c56602c83613253565b9150612c6182613917565b604082019050919050565b6000612c79602083613253565b9150612c8482613966565b602082019050919050565b6000612c9c602983613253565b9150612ca78261398f565b604082019050919050565b6000612cbf602f83613253565b9150612cca826139de565b604082019050919050565b6000612ce2602183613253565b9150612ced82613a2d565b604082019050919050565b6000612d05603183613253565b9150612d1082613a7c565b604082019050919050565b6000612d28601783613253565b9150612d3382613acb565b602082019050919050565b6000612d4b601683613253565b9150612d5682613af4565b602082019050919050565b6000612d6e601683613253565b9150612d7982613b1d565b602082019050919050565b6000612d91600f83613253565b9150612d9c82613b46565b602082019050919050565b612db081613394565b82525050565b6000612dc28285612a51565b9150612dce8284612a51565b91508190509392505050565b6000602082019050612def60008301846129c1565b92915050565b6000608082019050612e0a60008301876129c1565b612e1760208301866129c1565b612e246040830185612da7565b8181036060830152612e3681846129df565b905095945050505050565b6000602082019050612e5660008301846129d0565b92915050565b60006020820190508181036000830152612e768184612a18565b905092915050565b60006020820190508181036000830152612e9781612a82565b9050919050565b60006020820190508181036000830152612eb781612aa5565b9050919050565b60006020820190508181036000830152612ed781612ac8565b9050919050565b60006020820190508181036000830152612ef781612aeb565b9050919050565b60006020820190508181036000830152612f1781612b0e565b9050919050565b60006020820190508181036000830152612f3781612b31565b9050919050565b60006020820190508181036000830152612f5781612b54565b9050919050565b60006020820190508181036000830152612f7781612b77565b9050919050565b60006020820190508181036000830152612f9781612b9a565b9050919050565b60006020820190508181036000830152612fb781612bbd565b9050919050565b60006020820190508181036000830152612fd781612be0565b9050919050565b60006020820190508181036000830152612ff781612c03565b9050919050565b6000602082019050818103600083015261301781612c26565b9050919050565b6000602082019050818103600083015261303781612c49565b9050919050565b6000602082019050818103600083015261305781612c6c565b9050919050565b6000602082019050818103600083015261307781612c8f565b9050919050565b6000602082019050818103600083015261309781612cb2565b9050919050565b600060208201905081810360008301526130b781612cd5565b9050919050565b600060208201905081810360008301526130d781612cf8565b9050919050565b600060208201905081810360008301526130f781612d1b565b9050919050565b6000602082019050818103600083015261311781612d3e565b9050919050565b6000602082019050818103600083015261313781612d61565b9050919050565b6000602082019050818103600083015261315781612d84565b9050919050565b60006020820190506131736000830184612da7565b92915050565b6000613183613194565b905061318f8282613412565b919050565b6000604051905090565b600067ffffffffffffffff8211156131b9576131b8613579565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156131e5576131e4613579565b5b6131ee826135c1565b9050602081019050919050565b600067ffffffffffffffff82111561321657613215613579565b5b61321f826135c1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061327a82613394565b915061328583613394565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132ba576132b96134bd565b5b828201905092915050565b60006132d082613394565b91506132db83613394565b9250826132eb576132ea6134ec565b5b828204905092915050565b600061330182613394565b915061330c83613394565b92508282101561331f5761331e6134bd565b5b828203905092915050565b600061333582613374565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156133cb5780820151818401526020810190506133b0565b838111156133da576000848401525b50505050565b600060028204905060018216806133f857607f821691505b6020821081141561340c5761340b61351b565b5b50919050565b61341b826135c1565b810181811067ffffffffffffffff8211171561343a57613439613579565b5b80604052505050565b600061344e82613394565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613481576134806134bd565b5b600182019050919050565b600061349782613394565b91506134a283613394565b9250826134b2576134b16134ec565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f796f7520616c7265616479206d696e7465640000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f596f7520646f206e6f74206861766520656e6f75676820416e696d6f6f6e206e60008201527f6674730000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20323000000000000000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b613b788161332a565b8114613b8357600080fd5b50565b613b8f8161333c565b8114613b9a57600080fd5b50565b613ba681613348565b8114613bb157600080fd5b50565b613bbd81613394565b8114613bc857600080fd5b5056fea2646970667358221220fa005b6fced8950fc9703ee853e67a7c4a8b3f096916f28a7674c0da5b98030064736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101b75760003560e01c806370a08231116100ec578063a0bcfc7f1161008a578063c87b56dd11610064578063c87b56dd146105e6578063d96a094a14610623578063e985e9c51461063f578063f2fde38b1461067c576101b7565b8063a0bcfc7f1461056b578063a22cb46514610594578063b88d4fde146105bd576101b7565b806389b52e65116100c657806389b52e65146104ad5780638da5cb5b146104ea57806395d89b411461051557806395ea5e6714610540576101b7565b806370a0823114610430578063715018a61461046d5780637c8255db14610484576101b7565b80633c28081111610159578063453c231011610133578063453c2310146103725780634b980d671461039d5780636352211e146103c85780636c0360eb14610405576101b7565b80633c280811146103075780633ccfd60b1461033257806342842e0e14610349576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631cef37e4146102b557806323b872dd146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de91906128c4565b6106a5565b6040516101f09190612e41565b60405180910390f35b34801561020557600080fd5b5061020e610787565b60405161021b9190612e5c565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612967565b610819565b6040516102589190612dda565b60405180910390f35b34801561026d57600080fd5b506102886004803603810190610283919061280e565b61089e565b005b34801561029657600080fd5b5061029f6109b6565b6040516102ac919061315e565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612897565b6109bc565b005b3480156102ea57600080fd5b50610305600480360381019061030091906126f8565b610a55565b005b34801561031357600080fd5b5061031c610ab5565b604051610329919061315e565b60405180910390f35b34801561033e57600080fd5b50610347610abb565b005b34801561035557600080fd5b50610370600480360381019061036b91906126f8565b610b87565b005b34801561037e57600080fd5b50610387610ba7565b604051610394919061315e565b60405180910390f35b3480156103a957600080fd5b506103b2610bad565b6040516103bf919061315e565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190612967565b610bb3565b6040516103fc9190612dda565b60405180910390f35b34801561041157600080fd5b5061041a610c65565b6040516104279190612e5c565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061268b565b610cf3565b604051610464919061315e565b60405180910390f35b34801561047957600080fd5b50610482610dab565b005b34801561049057600080fd5b506104ab60048036038101906104a6919061284e565b610e33565b005b3480156104b957600080fd5b506104d460048036038101906104cf919061268b565b611006565b6040516104e1919061315e565b60405180910390f35b3480156104f657600080fd5b506104ff6110b7565b60405161050c9190612dda565b60405180910390f35b34801561052157600080fd5b5061052a6110e0565b6040516105379190612e5c565b60405180910390f35b34801561054c57600080fd5b50610555611172565b6040516105629190612e41565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d919061291e565b611185565b005b3480156105a057600080fd5b506105bb60048036038101906105b691906127ce565b61121b565b005b3480156105c957600080fd5b506105e460048036038101906105df919061274b565b61139c565b005b3480156105f257600080fd5b5061060d60048036038101906106089190612967565b6113fe565b60405161061a9190612e5c565b60405180910390f35b61063d60048036038101906106389190612967565b6114a5565b005b34801561064b57600080fd5b50610666600480360381019061066191906126b8565b611686565b6040516106739190612e41565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e919061268b565b61171a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610780575061077f82611812565b5b9050919050565b606060018054610796906133e0565b80601f01602080910402602001604051908101604052809291908181526020018280546107c2906133e0565b801561080f5780601f106107e45761010080835404028352916020019161080f565b820191906000526020600020905b8154815290600101906020018083116107f257829003601f168201915b5050505050905090565b60006108248261187c565b610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085a9061301e565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a982610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561091a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109119061309e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109396118e8565b73ffffffffffffffffffffffffffffffffffffffff1614806109685750610967816109626118e8565b611686565b5b6109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e90612f5e565b60405180910390fd5b6109b183836118f0565b505050565b60075481565b6109c46118e8565b73ffffffffffffffffffffffffffffffffffffffff166109e26110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f9061303e565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b610a66610a606118e8565b826119a9565b610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c906130be565b60405180910390fd5b610ab0838383611a87565b505050565b60095481565b610ac36118e8565b73ffffffffffffffffffffffffffffffffffffffff16610ae16110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e9061303e565b60405180910390fd5b610b3f6110b7565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b84573d6000803e3d6000fd5b50565b610ba28383836040518060200160405280600081525061139c565b505050565b600c5481565b600b5481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390612f9e565b60405180910390fd5b80915050919050565b600a8054610c72906133e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e906133e0565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90612f7e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610db36118e8565b73ffffffffffffffffffffffffffffffffffffffff16610dd16110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e9061303e565b60405180910390fd5b610e316000611ce3565b565b610e3b6118e8565b73ffffffffffffffffffffffffffffffffffffffff16610e596110b7565b73ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea69061303e565b60405180910390fd5b6000815111610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea906130de565b60405180910390fd5b600b5481511115610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f30906130fe565b60405180910390fd5b6103e88151600754610f4b919061326f565b1115610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f839061311e565b60405180910390fd5b60005b8151811015610fe857610fd5828281518110610fae57610fad61354a565b5b6020026020010151826001600754610fc6919061326f565b610fd0919061326f565b611da7565b8080610fe090613443565b915050610f8f565b50805160076000828254610ffc919061326f565b9250508190555050565b60008073988a3e9834f1a4977e6f727e18ea167089349ba2905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161105e9190612dda565b60206040518083038186803b15801561107657600080fd5b505afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190612994565b92505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546110ef906133e0565b80601f016020809104026020016040519081016040528092919081815260200182805461111b906133e0565b80156111685780601f1061113d57610100808354040283529160200191611168565b820191906000526020600020905b81548152906001019060200180831161114b57829003601f168201915b5050505050905090565b600860009054906101000a900460ff1681565b61118d6118e8565b73ffffffffffffffffffffffffffffffffffffffff166111ab6110b7565b73ffffffffffffffffffffffffffffffffffffffff1614611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f89061303e565b60405180910390fd5b80600a90805190602001906112179291906123ec565b5050565b6112236118e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890612efe565b60405180910390fd5b806006600061129e6118e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661134b6118e8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113909190612e41565b60405180910390a35050565b6113ad6113a76118e8565b836119a9565b6113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906130be565b60405180910390fd5b6113f884848484611dc5565b50505050565b60606114098261187c565b611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f9061307e565b60405180910390fd5b6000611452611e21565b90506000815111611472576040518060200160405280600081525061149d565b8061147c84611eb3565b60405160200161148d929190612db6565b6040516020818303038152906040525b915050919050565b60011515600860009054906101000a900460ff161515146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f29061313e565b60405180910390fd5b6001811461153e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611535906130de565b60405180910390fd5b60095461154a33611006565b101561158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158290612fde565b60405180910390fd5b600161159633610cf3565b106115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90612f3e565b60405180910390fd5b6103e8816007546115e7919061326f565b1115611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90612fbe565b60405180910390fd5b60005b818110156116695761165633826001600754611647919061326f565b611651919061326f565b611da7565b808061166190613443565b91505061162b565b50806007600082825461167c919061326f565b9250508190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117226118e8565b73ffffffffffffffffffffffffffffffffffffffff166117406110b7565b73ffffffffffffffffffffffffffffffffffffffff1614611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d9061303e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fd90612e9e565b60405180910390fd5b61180f81611ce3565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661196383610bb3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119b48261187c565b6119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90612f1e565b60405180910390fd5b60006119fe83610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a6d57508373ffffffffffffffffffffffffffffffffffffffff16611a5584610819565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a7e5750611a7d8185611686565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aa782610bb3565b73ffffffffffffffffffffffffffffffffffffffff1614611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af49061305e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490612ede565b60405180910390fd5b611b78838383612014565b611b836000826118f0565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd391906132f6565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c2a919061326f565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611dc1828260405180602001604052806000815250612019565b5050565b611dd0848484611a87565b611ddc84848484612074565b611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290612e7e565b60405180910390fd5b50505050565b6060600a8054611e30906133e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5c906133e0565b8015611ea95780601f10611e7e57610100808354040283529160200191611ea9565b820191906000526020600020905b815481529060010190602001808311611e8c57829003601f168201915b5050505050905090565b60606000821415611efb576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061200f565b600082905060005b60008214611f2d578080611f1690613443565b915050600a82611f2691906132c5565b9150611f03565b60008167ffffffffffffffff811115611f4957611f48613579565b5b6040519080825280601f01601f191660200182016040528015611f7b5781602001600182028036833780820191505090505b5090505b6000851461200857600182611f9491906132f6565b9150600a85611fa3919061348c565b6030611faf919061326f565b60f81b818381518110611fc557611fc461354a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561200191906132c5565b9450611f7f565b8093505050505b919050565b505050565b612023838361220b565b6120306000848484612074565b61206f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206690612e7e565b60405180910390fd5b505050565b60006120958473ffffffffffffffffffffffffffffffffffffffff166123d9565b156121fe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120be6118e8565b8786866040518563ffffffff1660e01b81526004016120e09493929190612df5565b602060405180830381600087803b1580156120fa57600080fd5b505af192505050801561212b57506040513d601f19601f8201168201806040525081019061212891906128f1565b60015b6121ae573d806000811461215b576040519150601f19603f3d011682016040523d82523d6000602084013e612160565b606091505b506000815114156121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219d90612e7e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612203565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227290612ffe565b60405180910390fd5b6122848161187c565b156122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90612ebe565b60405180910390fd5b6122d060008383612014565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612320919061326f565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546123f8906133e0565b90600052602060002090601f01602090048101928261241a5760008555612461565b82601f1061243357805160ff1916838001178555612461565b82800160010185558215612461579182015b82811115612460578251825591602001919060010190612445565b5b50905061246e9190612472565b5090565b5b8082111561248b576000816000905550600101612473565b5090565b60006124a261249d8461319e565b613179565b905080838252602082019050828560208602820111156124c5576124c46135ad565b5b60005b858110156124f557816124db8882612583565b8452602084019350602083019250506001810190506124c8565b5050509392505050565b600061251261250d846131ca565b613179565b90508281526020810184848401111561252e5761252d6135b2565b5b61253984828561339e565b509392505050565b600061255461254f846131fb565b613179565b9050828152602081018484840111156125705761256f6135b2565b5b61257b84828561339e565b509392505050565b60008135905061259281613b6f565b92915050565b600082601f8301126125ad576125ac6135a8565b5b81356125bd84826020860161248f565b91505092915050565b6000813590506125d581613b86565b92915050565b6000813590506125ea81613b9d565b92915050565b6000815190506125ff81613b9d565b92915050565b600082601f83011261261a576126196135a8565b5b813561262a8482602086016124ff565b91505092915050565b600082601f830112612648576126476135a8565b5b8135612658848260208601612541565b91505092915050565b60008135905061267081613bb4565b92915050565b60008151905061268581613bb4565b92915050565b6000602082840312156126a1576126a06135bc565b5b60006126af84828501612583565b91505092915050565b600080604083850312156126cf576126ce6135bc565b5b60006126dd85828601612583565b92505060206126ee85828601612583565b9150509250929050565b600080600060608486031215612711576127106135bc565b5b600061271f86828701612583565b935050602061273086828701612583565b925050604061274186828701612661565b9150509250925092565b60008060008060808587031215612765576127646135bc565b5b600061277387828801612583565b945050602061278487828801612583565b935050604061279587828801612661565b925050606085013567ffffffffffffffff8111156127b6576127b56135b7565b5b6127c287828801612605565b91505092959194509250565b600080604083850312156127e5576127e46135bc565b5b60006127f385828601612583565b9250506020612804858286016125c6565b9150509250929050565b60008060408385031215612825576128246135bc565b5b600061283385828601612583565b925050602061284485828601612661565b9150509250929050565b600060208284031215612864576128636135bc565b5b600082013567ffffffffffffffff811115612882576128816135b7565b5b61288e84828501612598565b91505092915050565b6000602082840312156128ad576128ac6135bc565b5b60006128bb848285016125c6565b91505092915050565b6000602082840312156128da576128d96135bc565b5b60006128e8848285016125db565b91505092915050565b600060208284031215612907576129066135bc565b5b6000612915848285016125f0565b91505092915050565b600060208284031215612934576129336135bc565b5b600082013567ffffffffffffffff811115612952576129516135b7565b5b61295e84828501612633565b91505092915050565b60006020828403121561297d5761297c6135bc565b5b600061298b84828501612661565b91505092915050565b6000602082840312156129aa576129a96135bc565b5b60006129b884828501612676565b91505092915050565b6129ca8161332a565b82525050565b6129d98161333c565b82525050565b60006129ea8261322c565b6129f48185613242565b9350612a048185602086016133ad565b612a0d816135c1565b840191505092915050565b6000612a2382613237565b612a2d8185613253565b9350612a3d8185602086016133ad565b612a46816135c1565b840191505092915050565b6000612a5c82613237565b612a668185613264565b9350612a768185602086016133ad565b80840191505092915050565b6000612a8f603283613253565b9150612a9a826135d2565b604082019050919050565b6000612ab2602683613253565b9150612abd82613621565b604082019050919050565b6000612ad5601c83613253565b9150612ae082613670565b602082019050919050565b6000612af8602483613253565b9150612b0382613699565b604082019050919050565b6000612b1b601983613253565b9150612b26826136e8565b602082019050919050565b6000612b3e602c83613253565b9150612b4982613711565b604082019050919050565b6000612b61601283613253565b9150612b6c82613760565b602082019050919050565b6000612b84603883613253565b9150612b8f82613789565b604082019050919050565b6000612ba7602a83613253565b9150612bb2826137d8565b604082019050919050565b6000612bca602983613253565b9150612bd582613827565b604082019050919050565b6000612bed601683613253565b9150612bf882613876565b602082019050919050565b6000612c10602383613253565b9150612c1b8261389f565b604082019050919050565b6000612c33602083613253565b9150612c3e826138ee565b602082019050919050565b6000612c56602c83613253565b9150612c6182613917565b604082019050919050565b6000612c79602083613253565b9150612c8482613966565b602082019050919050565b6000612c9c602983613253565b9150612ca78261398f565b604082019050919050565b6000612cbf602f83613253565b9150612cca826139de565b604082019050919050565b6000612ce2602183613253565b9150612ced82613a2d565b604082019050919050565b6000612d05603183613253565b9150612d1082613a7c565b604082019050919050565b6000612d28601783613253565b9150612d3382613acb565b602082019050919050565b6000612d4b601683613253565b9150612d5682613af4565b602082019050919050565b6000612d6e601683613253565b9150612d7982613b1d565b602082019050919050565b6000612d91600f83613253565b9150612d9c82613b46565b602082019050919050565b612db081613394565b82525050565b6000612dc28285612a51565b9150612dce8284612a51565b91508190509392505050565b6000602082019050612def60008301846129c1565b92915050565b6000608082019050612e0a60008301876129c1565b612e1760208301866129c1565b612e246040830185612da7565b8181036060830152612e3681846129df565b905095945050505050565b6000602082019050612e5660008301846129d0565b92915050565b60006020820190508181036000830152612e768184612a18565b905092915050565b60006020820190508181036000830152612e9781612a82565b9050919050565b60006020820190508181036000830152612eb781612aa5565b9050919050565b60006020820190508181036000830152612ed781612ac8565b9050919050565b60006020820190508181036000830152612ef781612aeb565b9050919050565b60006020820190508181036000830152612f1781612b0e565b9050919050565b60006020820190508181036000830152612f3781612b31565b9050919050565b60006020820190508181036000830152612f5781612b54565b9050919050565b60006020820190508181036000830152612f7781612b77565b9050919050565b60006020820190508181036000830152612f9781612b9a565b9050919050565b60006020820190508181036000830152612fb781612bbd565b9050919050565b60006020820190508181036000830152612fd781612be0565b9050919050565b60006020820190508181036000830152612ff781612c03565b9050919050565b6000602082019050818103600083015261301781612c26565b9050919050565b6000602082019050818103600083015261303781612c49565b9050919050565b6000602082019050818103600083015261305781612c6c565b9050919050565b6000602082019050818103600083015261307781612c8f565b9050919050565b6000602082019050818103600083015261309781612cb2565b9050919050565b600060208201905081810360008301526130b781612cd5565b9050919050565b600060208201905081810360008301526130d781612cf8565b9050919050565b600060208201905081810360008301526130f781612d1b565b9050919050565b6000602082019050818103600083015261311781612d3e565b9050919050565b6000602082019050818103600083015261313781612d61565b9050919050565b6000602082019050818103600083015261315781612d84565b9050919050565b60006020820190506131736000830184612da7565b92915050565b6000613183613194565b905061318f8282613412565b919050565b6000604051905090565b600067ffffffffffffffff8211156131b9576131b8613579565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156131e5576131e4613579565b5b6131ee826135c1565b9050602081019050919050565b600067ffffffffffffffff82111561321657613215613579565b5b61321f826135c1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061327a82613394565b915061328583613394565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132ba576132b96134bd565b5b828201905092915050565b60006132d082613394565b91506132db83613394565b9250826132eb576132ea6134ec565b5b828204905092915050565b600061330182613394565b915061330c83613394565b92508282101561331f5761331e6134bd565b5b828203905092915050565b600061333582613374565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156133cb5780820151818401526020810190506133b0565b838111156133da576000848401525b50505050565b600060028204905060018216806133f857607f821691505b6020821081141561340c5761340b61351b565b5b50919050565b61341b826135c1565b810181811067ffffffffffffffff8211171561343a57613439613579565b5b80604052505050565b600061344e82613394565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613481576134806134bd565b5b600182019050919050565b600061349782613394565b91506134a283613394565b9250826134b2576134b16134ec565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f796f7520616c7265616479206d696e7465640000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f596f7520646f206e6f74206861766520656e6f75676820416e696d6f6f6e206e60008201527f6674730000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20323000000000000000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b613b788161332a565b8114613b8357600080fd5b50565b613b8f8161333c565b8114613b9a57600080fd5b50565b613ba681613348565b8114613bb157600080fd5b50565b613bbd81613394565b8114613bc857600080fd5b5056fea2646970667358221220fa005b6fced8950fc9703ee853e67a7c4a8b3f096916f28a7674c0da5b98030064736f6c63430008070033

Deployed Bytecode Sourcemap

34767:2136:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22613:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23558:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25117:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24640:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34861:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36332:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26007:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34940:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36552:106;;;;;;;;;;;;;:::i;:::-;;26417:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35068:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35006:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23252:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34978:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22982:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14113:94;;;;;;;;;;;;;:::i;:::-;;35768:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36663:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13462:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23727:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34895:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36232:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25410:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26673:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23902:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35193:565;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25776:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14362:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22613:305;22715:4;22767:25;22752:40;;;:11;:40;;;;:105;;;;22824:33;22809:48;;;:11;:48;;;;22752:105;:158;;;;22874:36;22898:11;22874:23;:36::i;:::-;22752:158;22732:178;;22613:305;;;:::o;23558:100::-;23612:13;23645:5;23638:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23558:100;:::o;25117:221::-;25193:7;25221:16;25229:7;25221;:16::i;:::-;25213:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25306:15;:24;25322:7;25306:24;;;;;;;;;;;;;;;;;;;;;25299:31;;25117:221;;;:::o;24640:411::-;24721:13;24737:23;24752:7;24737:14;:23::i;:::-;24721:39;;24785:5;24779:11;;:2;:11;;;;24771:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24879:5;24863:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24888:37;24905:5;24912:12;:10;:12::i;:::-;24888:16;:37::i;:::-;24863:62;24841:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25022:21;25031:2;25035:7;25022:8;:21::i;:::-;24710:341;24640:411;;:::o;34861:27::-;;;;:::o;36332:101::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36421:4:::1;36400:18;;:25;;;;;;;;;;;;;;;;;;36332:101:::0;:::o;26007:339::-;26202:41;26221:12;:10;:12::i;:::-;26235:7;26202:18;:41::i;:::-;26194:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26310:28;26320:4;26326:2;26330:7;26310:9;:28::i;:::-;26007:339;;;:::o;34940:31::-;;;;:::o;36552:106::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36610:7:::1;:5;:7::i;:::-;36602:25;;:48;36628:21;36602:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36552:106::o:0;26417:185::-;26555:39;26572:4;26578:2;26582:7;26555:39;;;;;;;;;;;;:16;:39::i;:::-;26417:185;;;:::o;35068:28::-;;;;:::o;35006:33::-;;;;:::o;23252:239::-;23324:7;23344:13;23360:7;:16;23368:7;23360:16;;;;;;;;;;;;;;;;;;;;;23344:32;;23412:1;23395:19;;:5;:19;;;;23387:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23478:5;23471:12;;;23252:239;;;:::o;34978:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22982:208::-;23054:7;23099:1;23082:19;;:5;:19;;;;23074:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23166:9;:16;23176:5;23166:16;;;;;;;;;;;;;;;;23159:23;;22982:208;;;:::o;14113:94::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14178:21:::1;14196:1;14178:9;:21::i;:::-;14113:94::o:0;35768:456::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35867:1:::1;35849:8;:15;:19;35841:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35934:17;;35915:8;:15;:36;;35907:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34850:4;36011:8;:15;35997:11;;:29;;;;:::i;:::-;:42;;35989:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;36081:6;36077:98;36097:8;:15;36093:1;:19;36077:98;;;36132:43;36142:8;36151:1;36142:11;;;;;;;;:::i;:::-;;;;;;;;36173:1;36169;36155:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;36132:9;:43::i;:::-;36114:3;;;;;:::i;:::-;;;;36077:98;;;;36201:8;:15;36186:11;;:30;;;;;;;:::i;:::-;;;;;;;;35768:456:::0;:::o;36663:235::-;36723:4;36736:24;36763:42;36736:69;;36812:14;36836:16;36812:41;;36867:7;:17;;;36885:6;36867:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36860:32;;;;36663:235;;;:::o;13462:87::-;13508:7;13535:6;;;;;;;;;;;13528:13;;13462:87;:::o;23727:104::-;23783:13;23816:7;23809:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23727:104;:::o;34895:38::-;;;;;;;;;;;;;:::o;36232:92::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36312:4:::1;36302:7;:14;;;;;;;;;;;;:::i;:::-;;36232:92:::0;:::o;25410:295::-;25525:12;:10;:12::i;:::-;25513:24;;:8;:24;;;;25505:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25625:8;25580:18;:32;25599:12;:10;:12::i;:::-;25580:32;;;;;;;;;;;;;;;:42;25613:8;25580:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25678:8;25649:48;;25664:12;:10;:12::i;:::-;25649:48;;;25688:8;25649:48;;;;;;:::i;:::-;;;;;;;;25410:295;;:::o;26673:328::-;26848:41;26867:12;:10;:12::i;:::-;26881:7;26848:18;:41::i;:::-;26840:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26954:39;26968:4;26974:2;26978:7;26987:5;26954:13;:39::i;:::-;26673:328;;;;:::o;23902:334::-;23975:13;24009:16;24017:7;24009;:16::i;:::-;24001:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24090:21;24114:10;:8;:10::i;:::-;24090:34;;24166:1;24148:7;24142:21;:25;:86;;;;;;;;;;;;;;;;;24194:7;24203:18;:7;:16;:18::i;:::-;24177:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24142:86;24135:93;;;23902:334;;;:::o;35193:565::-;35276:4;35254:26;;:18;;;;;;;;;;;:26;;;35246:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;35329:1;35319:6;:11;35311:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;35408:15;;35378:26;35393:10;35378:14;:26::i;:::-;:45;;35370:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;35506:1;35482:21;35492:10;35482:9;:21::i;:::-;:25;35474:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34850:4;35563:6;35549:11;;:20;;;;:::i;:::-;:33;;35541:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35634:6;35630:88;35650:6;35646:1;:10;35630:88;;;35676:42;35686:10;35716:1;35712;35698:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;35676:9;:42::i;:::-;35658:3;;;;;:::i;:::-;;;;35630:88;;;;35744:6;35729:11;;:21;;;;;;;:::i;:::-;;;;;;;;35193:565;:::o;25776:164::-;25873:4;25897:18;:25;25916:5;25897:25;;;;;;;;;;;;;;;:35;25923:8;25897:35;;;;;;;;;;;;;;;;;;;;;;;;;25890:42;;25776:164;;;;:::o;14362:192::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14471:1:::1;14451:22;;:8;:22;;;;14443:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14527:19;14537:8;14527:9;:19::i;:::-;14362:192:::0;:::o;15467:157::-;15552:4;15591:25;15576:40;;;:11;:40;;;;15569:47;;15467:157;;;:::o;28511:127::-;28576:4;28628:1;28600:30;;:7;:16;28608:7;28600:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28593:37;;28511:127;;;:::o;602:98::-;655:7;682:10;675:17;;602:98;:::o;32493:174::-;32595:2;32568:15;:24;32584:7;32568:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32651:7;32647:2;32613:46;;32622:23;32637:7;32622:14;:23::i;:::-;32613:46;;;;;;;;;;;;32493:174;;:::o;28805:348::-;28898:4;28923:16;28931:7;28923;:16::i;:::-;28915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28999:13;29015:23;29030:7;29015:14;:23::i;:::-;28999:39;;29068:5;29057:16;;:7;:16;;;:51;;;;29101:7;29077:31;;:20;29089:7;29077:11;:20::i;:::-;:31;;;29057:51;:87;;;;29112:32;29129:5;29136:7;29112:16;:32::i;:::-;29057:87;29049:96;;;28805:348;;;;:::o;31797:578::-;31956:4;31929:31;;:23;31944:7;31929:14;:23::i;:::-;:31;;;31921:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32039:1;32025:16;;:2;:16;;;;32017:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32095:39;32116:4;32122:2;32126:7;32095:20;:39::i;:::-;32199:29;32216:1;32220:7;32199:8;:29::i;:::-;32260:1;32241:9;:15;32251:4;32241:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32289:1;32272:9;:13;32282:2;32272:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32320:2;32301:7;:16;32309:7;32301:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32359:7;32355:2;32340:27;;32349:4;32340:27;;;;;;;;;;;;31797:578;;;:::o;14562:173::-;14618:16;14637:6;;;;;;;;;;;14618:25;;14663:8;14654:6;;:17;;;;;;;;;;;;;;;;;;14718:8;14687:40;;14708:8;14687:40;;;;;;;;;;;;14607:128;14562:173;:::o;29495:110::-;29571:26;29581:2;29585:7;29571:26;;;;;;;;;;;;:9;:26::i;:::-;29495:110;;:::o;27883:315::-;28040:28;28050:4;28056:2;28060:7;28040:9;:28::i;:::-;28087:48;28110:4;28116:2;28120:7;28129:5;28087:22;:48::i;:::-;28079:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27883:315;;;;:::o;36439:108::-;36499:13;36532:7;36525:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36439:108;:::o;1067:723::-;1123:13;1353:1;1344:5;:10;1340:53;;;1371:10;;;;;;;;;;;;;;;;;;;;;1340:53;1403:12;1418:5;1403:20;;1434:14;1459:78;1474:1;1466:4;:9;1459:78;;1492:8;;;;;:::i;:::-;;;;1523:2;1515:10;;;;;:::i;:::-;;;1459:78;;;1547:19;1579:6;1569:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1547:39;;1597:154;1613:1;1604:5;:10;1597:154;;1641:1;1631:11;;;;;:::i;:::-;;;1708:2;1700:5;:10;;;;:::i;:::-;1687:2;:24;;;;:::i;:::-;1674:39;;1657:6;1664;1657:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1737:2;1728:11;;;;;:::i;:::-;;;1597:154;;;1775:6;1761:21;;;;;1067:723;;;;:::o;34603:126::-;;;;:::o;29832:321::-;29962:18;29968:2;29972:7;29962:5;:18::i;:::-;30013:54;30044:1;30048:2;30052:7;30061:5;30013:22;:54::i;:::-;29991:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29832:321;;;:::o;33232:799::-;33387:4;33408:15;:2;:13;;;:15::i;:::-;33404:620;;;33460:2;33444:36;;;33481:12;:10;:12::i;:::-;33495:4;33501:7;33510:5;33444:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33440:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33703:1;33686:6;:13;:18;33682:272;;;33729:60;;;;;;;;;;:::i;:::-;;;;;;;;33682:272;33904:6;33898:13;33889:6;33885:2;33881:15;33874:38;33440:529;33577:41;;;33567:51;;;:6;:51;;;;33560:58;;;;;33404:620;34008:4;34001:11;;33232:799;;;;;;;:::o;30489:382::-;30583:1;30569:16;;:2;:16;;;;30561:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30642:16;30650:7;30642;:16::i;:::-;30641:17;30633:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:45;30733:1;30737:2;30741:7;30704:20;:45::i;:::-;30779:1;30762:9;:13;30772:2;30762:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30810:2;30791:7;:16;30799:7;30791:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30855:7;30851:2;30830:33;;30847:1;30830:33;;;;;;;;;;;;30489:382;;:::o;3532:387::-;3592:4;3800:12;3867:7;3855:20;3847:28;;3910:1;3903:4;:8;3896:15;;;3532:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:143::-;3472:5;3503:6;3497:13;3488:22;;3519:33;3546:5;3519:33;:::i;:::-;3415:143;;;;:::o;3564:329::-;3623:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:119;;;3678:79;;:::i;:::-;3640:119;3798:1;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3769:117;3564:329;;;;:::o;3899:474::-;3967:6;3975;4024:2;4012:9;4003:7;3999:23;3995:32;3992:119;;;4030:79;;:::i;:::-;3992:119;4150:1;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4121:117;4277:2;4303:53;4348:7;4339:6;4328:9;4324:22;4303:53;:::i;:::-;4293:63;;4248:118;3899:474;;;;;:::o;4379:619::-;4456:6;4464;4472;4521:2;4509:9;4500:7;4496:23;4492:32;4489:119;;;4527:79;;:::i;:::-;4489:119;4647:1;4672:53;4717:7;4708:6;4697:9;4693:22;4672:53;:::i;:::-;4662:63;;4618:117;4774:2;4800:53;4845:7;4836:6;4825:9;4821:22;4800:53;:::i;:::-;4790:63;;4745:118;4902:2;4928:53;4973:7;4964:6;4953:9;4949:22;4928:53;:::i;:::-;4918:63;;4873:118;4379:619;;;;;:::o;5004:943::-;5099:6;5107;5115;5123;5172:3;5160:9;5151:7;5147:23;5143:33;5140:120;;;5179:79;;:::i;:::-;5140:120;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5710:2;5699:9;5695:18;5682:32;5741:18;5733:6;5730:30;5727:117;;;5763:79;;:::i;:::-;5727:117;5868:62;5922:7;5913:6;5902:9;5898:22;5868:62;:::i;:::-;5858:72;;5653:287;5004:943;;;;;;;:::o;5953:468::-;6018:6;6026;6075:2;6063:9;6054:7;6050:23;6046:32;6043:119;;;6081:79;;:::i;:::-;6043:119;6201:1;6226:53;6271:7;6262:6;6251:9;6247:22;6226:53;:::i;:::-;6216:63;;6172:117;6328:2;6354:50;6396:7;6387:6;6376:9;6372:22;6354:50;:::i;:::-;6344:60;;6299:115;5953:468;;;;;:::o;6427:474::-;6495:6;6503;6552:2;6540:9;6531:7;6527:23;6523:32;6520:119;;;6558:79;;:::i;:::-;6520:119;6678:1;6703:53;6748:7;6739:6;6728:9;6724:22;6703:53;:::i;:::-;6693:63;;6649:117;6805:2;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6776:118;6427:474;;;;;:::o;6907:539::-;6991:6;7040:2;7028:9;7019:7;7015:23;7011:32;7008:119;;;7046:79;;:::i;:::-;7008:119;7194:1;7183:9;7179:17;7166:31;7224:18;7216:6;7213:30;7210:117;;;7246:79;;:::i;:::-;7210:117;7351:78;7421:7;7412:6;7401:9;7397:22;7351:78;:::i;:::-;7341:88;;7137:302;6907:539;;;;:::o;7452:323::-;7508:6;7557:2;7545:9;7536:7;7532:23;7528:32;7525:119;;;7563:79;;:::i;:::-;7525:119;7683:1;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7654:114;7452:323;;;;:::o;7781:327::-;7839:6;7888:2;7876:9;7867:7;7863:23;7859:32;7856:119;;;7894:79;;:::i;:::-;7856:119;8014:1;8039:52;8083:7;8074:6;8063:9;8059:22;8039:52;:::i;:::-;8029:62;;7985:116;7781:327;;;;:::o;8114:349::-;8183:6;8232:2;8220:9;8211:7;8207:23;8203:32;8200:119;;;8238:79;;:::i;:::-;8200:119;8358:1;8383:63;8438:7;8429:6;8418:9;8414:22;8383:63;:::i;:::-;8373:73;;8329:127;8114:349;;;;:::o;8469:509::-;8538:6;8587:2;8575:9;8566:7;8562:23;8558:32;8555:119;;;8593:79;;:::i;:::-;8555:119;8741:1;8730:9;8726:17;8713:31;8771:18;8763:6;8760:30;8757:117;;;8793:79;;:::i;:::-;8757:117;8898:63;8953:7;8944:6;8933:9;8929:22;8898:63;:::i;:::-;8888:73;;8684:287;8469:509;;;;:::o;8984:329::-;9043:6;9092:2;9080:9;9071:7;9067:23;9063:32;9060:119;;;9098:79;;:::i;:::-;9060:119;9218:1;9243:53;9288:7;9279:6;9268:9;9264:22;9243:53;:::i;:::-;9233:63;;9189:117;8984:329;;;;:::o;9319:351::-;9389:6;9438:2;9426:9;9417:7;9413:23;9409:32;9406:119;;;9444:79;;:::i;:::-;9406:119;9564:1;9589:64;9645:7;9636:6;9625:9;9621:22;9589:64;:::i;:::-;9579:74;;9535:128;9319:351;;;;:::o;9676:118::-;9763:24;9781:5;9763:24;:::i;:::-;9758:3;9751:37;9676:118;;:::o;9800:109::-;9881:21;9896:5;9881:21;:::i;:::-;9876:3;9869:34;9800:109;;:::o;9915:360::-;10001:3;10029:38;10061:5;10029:38;:::i;:::-;10083:70;10146:6;10141:3;10083:70;:::i;:::-;10076:77;;10162:52;10207:6;10202:3;10195:4;10188:5;10184:16;10162:52;:::i;:::-;10239:29;10261:6;10239:29;:::i;:::-;10234:3;10230:39;10223:46;;10005:270;9915:360;;;;:::o;10281:364::-;10369:3;10397:39;10430:5;10397:39;:::i;:::-;10452:71;10516:6;10511:3;10452:71;:::i;:::-;10445:78;;10532:52;10577:6;10572:3;10565:4;10558:5;10554:16;10532:52;:::i;:::-;10609:29;10631:6;10609:29;:::i;:::-;10604:3;10600:39;10593:46;;10373:272;10281:364;;;;:::o;10651:377::-;10757:3;10785:39;10818:5;10785:39;:::i;:::-;10840:89;10922:6;10917:3;10840:89;:::i;:::-;10833:96;;10938:52;10983:6;10978:3;10971:4;10964:5;10960:16;10938:52;:::i;:::-;11015:6;11010:3;11006:16;10999:23;;10761:267;10651:377;;;;:::o;11034:366::-;11176:3;11197:67;11261:2;11256:3;11197:67;:::i;:::-;11190:74;;11273:93;11362:3;11273:93;:::i;:::-;11391:2;11386:3;11382:12;11375:19;;11034:366;;;:::o;11406:::-;11548:3;11569:67;11633:2;11628:3;11569:67;:::i;:::-;11562:74;;11645:93;11734:3;11645:93;:::i;:::-;11763:2;11758:3;11754:12;11747:19;;11406:366;;;:::o;11778:::-;11920:3;11941:67;12005:2;12000:3;11941:67;:::i;:::-;11934:74;;12017:93;12106:3;12017:93;:::i;:::-;12135:2;12130:3;12126:12;12119:19;;11778:366;;;:::o;12150:::-;12292:3;12313:67;12377:2;12372:3;12313:67;:::i;:::-;12306:74;;12389:93;12478:3;12389:93;:::i;:::-;12507:2;12502:3;12498:12;12491:19;;12150:366;;;:::o;12522:::-;12664:3;12685:67;12749:2;12744:3;12685:67;:::i;:::-;12678:74;;12761:93;12850:3;12761:93;:::i;:::-;12879:2;12874:3;12870:12;12863:19;;12522:366;;;:::o;12894:::-;13036:3;13057:67;13121:2;13116:3;13057:67;:::i;:::-;13050:74;;13133:93;13222:3;13133:93;:::i;:::-;13251:2;13246:3;13242:12;13235:19;;12894:366;;;:::o;13266:::-;13408:3;13429:67;13493:2;13488:3;13429:67;:::i;:::-;13422:74;;13505:93;13594:3;13505:93;:::i;:::-;13623:2;13618:3;13614:12;13607:19;;13266:366;;;:::o;13638:::-;13780:3;13801:67;13865:2;13860:3;13801:67;:::i;:::-;13794:74;;13877:93;13966:3;13877:93;:::i;:::-;13995:2;13990:3;13986:12;13979:19;;13638:366;;;:::o;14010:::-;14152:3;14173:67;14237:2;14232:3;14173:67;:::i;:::-;14166:74;;14249:93;14338:3;14249:93;:::i;:::-;14367:2;14362:3;14358:12;14351:19;;14010:366;;;:::o;14382:::-;14524:3;14545:67;14609:2;14604:3;14545:67;:::i;:::-;14538:74;;14621:93;14710:3;14621:93;:::i;:::-;14739:2;14734:3;14730:12;14723:19;;14382:366;;;:::o;14754:::-;14896:3;14917:67;14981:2;14976:3;14917:67;:::i;:::-;14910:74;;14993:93;15082:3;14993:93;:::i;:::-;15111:2;15106:3;15102:12;15095:19;;14754:366;;;:::o;15126:::-;15268:3;15289:67;15353:2;15348:3;15289:67;:::i;:::-;15282:74;;15365:93;15454:3;15365:93;:::i;:::-;15483:2;15478:3;15474:12;15467:19;;15126:366;;;:::o;15498:::-;15640:3;15661:67;15725:2;15720:3;15661:67;:::i;:::-;15654:74;;15737:93;15826:3;15737:93;:::i;:::-;15855:2;15850:3;15846:12;15839:19;;15498:366;;;:::o;15870:::-;16012:3;16033:67;16097:2;16092:3;16033:67;:::i;:::-;16026:74;;16109:93;16198:3;16109:93;:::i;:::-;16227:2;16222:3;16218:12;16211:19;;15870:366;;;:::o;16242:::-;16384:3;16405:67;16469:2;16464:3;16405:67;:::i;:::-;16398:74;;16481:93;16570:3;16481:93;:::i;:::-;16599:2;16594:3;16590:12;16583:19;;16242:366;;;:::o;16614:::-;16756:3;16777:67;16841:2;16836:3;16777:67;:::i;:::-;16770:74;;16853:93;16942:3;16853:93;:::i;:::-;16971:2;16966:3;16962:12;16955:19;;16614:366;;;:::o;16986:::-;17128:3;17149:67;17213:2;17208:3;17149:67;:::i;:::-;17142:74;;17225:93;17314:3;17225:93;:::i;:::-;17343:2;17338:3;17334:12;17327:19;;16986:366;;;:::o;17358:::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17358:366;;;:::o;17730:::-;17872:3;17893:67;17957:2;17952:3;17893:67;:::i;:::-;17886:74;;17969:93;18058:3;17969:93;:::i;:::-;18087:2;18082:3;18078:12;18071:19;;17730:366;;;:::o;18102:::-;18244:3;18265:67;18329:2;18324:3;18265:67;:::i;:::-;18258:74;;18341:93;18430:3;18341:93;:::i;:::-;18459:2;18454:3;18450:12;18443:19;;18102:366;;;:::o;18474:::-;18616:3;18637:67;18701:2;18696:3;18637:67;:::i;:::-;18630:74;;18713:93;18802:3;18713:93;:::i;:::-;18831:2;18826:3;18822:12;18815:19;;18474:366;;;:::o;18846:::-;18988:3;19009:67;19073:2;19068:3;19009:67;:::i;:::-;19002:74;;19085:93;19174:3;19085:93;:::i;:::-;19203:2;19198:3;19194:12;19187:19;;18846:366;;;:::o;19218:::-;19360:3;19381:67;19445:2;19440:3;19381:67;:::i;:::-;19374:74;;19457:93;19546:3;19457:93;:::i;:::-;19575:2;19570:3;19566:12;19559:19;;19218:366;;;:::o;19590:118::-;19677:24;19695:5;19677:24;:::i;:::-;19672:3;19665:37;19590:118;;:::o;19714:435::-;19894:3;19916:95;20007:3;19998:6;19916:95;:::i;:::-;19909:102;;20028:95;20119:3;20110:6;20028:95;:::i;:::-;20021:102;;20140:3;20133:10;;19714:435;;;;;:::o;20155:222::-;20248:4;20286:2;20275:9;20271:18;20263:26;;20299:71;20367:1;20356:9;20352:17;20343:6;20299:71;:::i;:::-;20155:222;;;;:::o;20383:640::-;20578:4;20616:3;20605:9;20601:19;20593:27;;20630:71;20698:1;20687:9;20683:17;20674:6;20630:71;:::i;:::-;20711:72;20779:2;20768:9;20764:18;20755:6;20711:72;:::i;:::-;20793;20861:2;20850:9;20846:18;20837:6;20793:72;:::i;:::-;20912:9;20906:4;20902:20;20897:2;20886:9;20882:18;20875:48;20940:76;21011:4;21002:6;20940:76;:::i;:::-;20932:84;;20383:640;;;;;;;:::o;21029:210::-;21116:4;21154:2;21143:9;21139:18;21131:26;;21167:65;21229:1;21218:9;21214:17;21205:6;21167:65;:::i;:::-;21029:210;;;;:::o;21245:313::-;21358:4;21396:2;21385:9;21381:18;21373:26;;21445:9;21439:4;21435:20;21431:1;21420:9;21416:17;21409:47;21473:78;21546:4;21537:6;21473:78;:::i;:::-;21465:86;;21245:313;;;;:::o;21564:419::-;21730:4;21768:2;21757:9;21753:18;21745:26;;21817:9;21811:4;21807:20;21803:1;21792:9;21788:17;21781:47;21845:131;21971:4;21845:131;:::i;:::-;21837:139;;21564:419;;;:::o;21989:::-;22155:4;22193:2;22182:9;22178:18;22170:26;;22242:9;22236:4;22232:20;22228:1;22217:9;22213:17;22206:47;22270:131;22396:4;22270:131;:::i;:::-;22262:139;;21989:419;;;:::o;22414:::-;22580:4;22618:2;22607:9;22603:18;22595:26;;22667:9;22661:4;22657:20;22653:1;22642:9;22638:17;22631:47;22695:131;22821:4;22695:131;:::i;:::-;22687:139;;22414:419;;;:::o;22839:::-;23005:4;23043:2;23032:9;23028:18;23020:26;;23092:9;23086:4;23082:20;23078:1;23067:9;23063:17;23056:47;23120:131;23246:4;23120:131;:::i;:::-;23112:139;;22839:419;;;:::o;23264:::-;23430:4;23468:2;23457:9;23453:18;23445:26;;23517:9;23511:4;23507:20;23503:1;23492:9;23488:17;23481:47;23545:131;23671:4;23545:131;:::i;:::-;23537:139;;23264:419;;;:::o;23689:::-;23855:4;23893:2;23882:9;23878:18;23870:26;;23942:9;23936:4;23932:20;23928:1;23917:9;23913:17;23906:47;23970:131;24096:4;23970:131;:::i;:::-;23962:139;;23689:419;;;:::o;24114:::-;24280:4;24318:2;24307:9;24303:18;24295:26;;24367:9;24361:4;24357:20;24353:1;24342:9;24338:17;24331:47;24395:131;24521:4;24395:131;:::i;:::-;24387:139;;24114:419;;;:::o;24539:::-;24705:4;24743:2;24732:9;24728:18;24720:26;;24792:9;24786:4;24782:20;24778:1;24767:9;24763:17;24756:47;24820:131;24946:4;24820:131;:::i;:::-;24812:139;;24539:419;;;:::o;24964:::-;25130:4;25168:2;25157:9;25153:18;25145:26;;25217:9;25211:4;25207:20;25203:1;25192:9;25188:17;25181:47;25245:131;25371:4;25245:131;:::i;:::-;25237:139;;24964:419;;;:::o;25389:::-;25555:4;25593:2;25582:9;25578:18;25570:26;;25642:9;25636:4;25632:20;25628:1;25617:9;25613:17;25606:47;25670:131;25796:4;25670:131;:::i;:::-;25662:139;;25389:419;;;:::o;25814:::-;25980:4;26018:2;26007:9;26003:18;25995:26;;26067:9;26061:4;26057:20;26053:1;26042:9;26038:17;26031:47;26095:131;26221:4;26095:131;:::i;:::-;26087:139;;25814:419;;;:::o;26239:::-;26405:4;26443:2;26432:9;26428:18;26420:26;;26492:9;26486:4;26482:20;26478:1;26467:9;26463:17;26456:47;26520:131;26646:4;26520:131;:::i;:::-;26512:139;;26239:419;;;:::o;26664:::-;26830:4;26868:2;26857:9;26853:18;26845:26;;26917:9;26911:4;26907:20;26903:1;26892:9;26888:17;26881:47;26945:131;27071:4;26945:131;:::i;:::-;26937:139;;26664:419;;;:::o;27089:::-;27255:4;27293:2;27282:9;27278:18;27270:26;;27342:9;27336:4;27332:20;27328:1;27317:9;27313:17;27306:47;27370:131;27496:4;27370:131;:::i;:::-;27362:139;;27089:419;;;:::o;27514:::-;27680:4;27718:2;27707:9;27703:18;27695:26;;27767:9;27761:4;27757:20;27753:1;27742:9;27738:17;27731:47;27795:131;27921:4;27795:131;:::i;:::-;27787:139;;27514:419;;;:::o;27939:::-;28105:4;28143:2;28132:9;28128:18;28120:26;;28192:9;28186:4;28182:20;28178:1;28167:9;28163:17;28156:47;28220:131;28346:4;28220:131;:::i;:::-;28212:139;;27939:419;;;:::o;28364:::-;28530:4;28568:2;28557:9;28553:18;28545:26;;28617:9;28611:4;28607:20;28603:1;28592:9;28588:17;28581:47;28645:131;28771:4;28645:131;:::i;:::-;28637:139;;28364:419;;;:::o;28789:::-;28955:4;28993:2;28982:9;28978:18;28970:26;;29042:9;29036:4;29032:20;29028:1;29017:9;29013:17;29006:47;29070:131;29196:4;29070:131;:::i;:::-;29062:139;;28789:419;;;:::o;29214:::-;29380:4;29418:2;29407:9;29403:18;29395:26;;29467:9;29461:4;29457:20;29453:1;29442:9;29438:17;29431:47;29495:131;29621:4;29495:131;:::i;:::-;29487:139;;29214:419;;;:::o;29639:::-;29805:4;29843:2;29832:9;29828:18;29820:26;;29892:9;29886:4;29882:20;29878:1;29867:9;29863:17;29856:47;29920:131;30046:4;29920:131;:::i;:::-;29912:139;;29639:419;;;:::o;30064:::-;30230:4;30268:2;30257:9;30253:18;30245:26;;30317:9;30311:4;30307:20;30303:1;30292:9;30288:17;30281:47;30345:131;30471:4;30345:131;:::i;:::-;30337:139;;30064:419;;;:::o;30489:::-;30655:4;30693:2;30682:9;30678:18;30670:26;;30742:9;30736:4;30732:20;30728:1;30717:9;30713:17;30706:47;30770:131;30896:4;30770:131;:::i;:::-;30762:139;;30489:419;;;:::o;30914:::-;31080:4;31118:2;31107:9;31103:18;31095:26;;31167:9;31161:4;31157:20;31153:1;31142:9;31138:17;31131:47;31195:131;31321:4;31195:131;:::i;:::-;31187:139;;30914:419;;;:::o;31339:222::-;31432:4;31470:2;31459:9;31455:18;31447:26;;31483:71;31551:1;31540:9;31536:17;31527:6;31483:71;:::i;:::-;31339:222;;;;:::o;31567:129::-;31601:6;31628:20;;:::i;:::-;31618:30;;31657:33;31685:4;31677:6;31657:33;:::i;:::-;31567:129;;;:::o;31702:75::-;31735:6;31768:2;31762:9;31752:19;;31702:75;:::o;31783:311::-;31860:4;31950:18;31942:6;31939:30;31936:56;;;31972:18;;:::i;:::-;31936:56;32022:4;32014:6;32010:17;32002:25;;32082:4;32076;32072:15;32064:23;;31783:311;;;:::o;32100:307::-;32161:4;32251:18;32243:6;32240:30;32237:56;;;32273:18;;:::i;:::-;32237:56;32311:29;32333:6;32311:29;:::i;:::-;32303:37;;32395:4;32389;32385:15;32377:23;;32100:307;;;:::o;32413:308::-;32475:4;32565:18;32557:6;32554:30;32551:56;;;32587:18;;:::i;:::-;32551:56;32625:29;32647:6;32625:29;:::i;:::-;32617:37;;32709:4;32703;32699:15;32691:23;;32413:308;;;:::o;32727:98::-;32778:6;32812:5;32806:12;32796:22;;32727:98;;;:::o;32831:99::-;32883:6;32917:5;32911:12;32901:22;;32831:99;;;:::o;32936:168::-;33019:11;33053:6;33048:3;33041:19;33093:4;33088:3;33084:14;33069:29;;32936:168;;;;:::o;33110:169::-;33194:11;33228:6;33223:3;33216:19;33268:4;33263:3;33259:14;33244:29;;33110:169;;;;:::o;33285:148::-;33387:11;33424:3;33409:18;;33285:148;;;;:::o;33439:305::-;33479:3;33498:20;33516:1;33498:20;:::i;:::-;33493:25;;33532:20;33550:1;33532:20;:::i;:::-;33527:25;;33686:1;33618:66;33614:74;33611:1;33608:81;33605:107;;;33692:18;;:::i;:::-;33605:107;33736:1;33733;33729:9;33722:16;;33439:305;;;;:::o;33750:185::-;33790:1;33807:20;33825:1;33807:20;:::i;:::-;33802:25;;33841:20;33859:1;33841:20;:::i;:::-;33836:25;;33880:1;33870:35;;33885:18;;:::i;:::-;33870:35;33927:1;33924;33920:9;33915:14;;33750:185;;;;:::o;33941:191::-;33981:4;34001:20;34019:1;34001:20;:::i;:::-;33996:25;;34035:20;34053:1;34035:20;:::i;:::-;34030:25;;34074:1;34071;34068:8;34065:34;;;34079:18;;:::i;:::-;34065:34;34124:1;34121;34117:9;34109:17;;33941:191;;;;:::o;34138:96::-;34175:7;34204:24;34222:5;34204:24;:::i;:::-;34193:35;;34138:96;;;:::o;34240:90::-;34274:7;34317:5;34310:13;34303:21;34292:32;;34240:90;;;:::o;34336:149::-;34372:7;34412:66;34405:5;34401:78;34390:89;;34336:149;;;:::o;34491:126::-;34528:7;34568:42;34561:5;34557:54;34546:65;;34491:126;;;:::o;34623:77::-;34660:7;34689:5;34678:16;;34623:77;;;:::o;34706:154::-;34790:6;34785:3;34780;34767:30;34852:1;34843:6;34838:3;34834:16;34827:27;34706:154;;;:::o;34866:307::-;34934:1;34944:113;34958:6;34955:1;34952:13;34944:113;;;35043:1;35038:3;35034:11;35028:18;35024:1;35019:3;35015:11;35008:39;34980:2;34977:1;34973:10;34968:15;;34944:113;;;35075:6;35072:1;35069:13;35066:101;;;35155:1;35146:6;35141:3;35137:16;35130:27;35066:101;34915:258;34866:307;;;:::o;35179:320::-;35223:6;35260:1;35254:4;35250:12;35240:22;;35307:1;35301:4;35297:12;35328:18;35318:81;;35384:4;35376:6;35372:17;35362:27;;35318:81;35446:2;35438:6;35435:14;35415:18;35412:38;35409:84;;;35465:18;;:::i;:::-;35409:84;35230:269;35179:320;;;:::o;35505:281::-;35588:27;35610:4;35588:27;:::i;:::-;35580:6;35576:40;35718:6;35706:10;35703:22;35682:18;35670:10;35667:34;35664:62;35661:88;;;35729:18;;:::i;:::-;35661:88;35769:10;35765:2;35758:22;35548:238;35505:281;;:::o;35792:233::-;35831:3;35854:24;35872:5;35854:24;:::i;:::-;35845:33;;35900:66;35893:5;35890:77;35887:103;;;35970:18;;:::i;:::-;35887:103;36017:1;36010:5;36006:13;35999:20;;35792:233;;;:::o;36031:176::-;36063:1;36080:20;36098:1;36080:20;:::i;:::-;36075:25;;36114:20;36132:1;36114:20;:::i;:::-;36109:25;;36153:1;36143:35;;36158:18;;:::i;:::-;36143:35;36199:1;36196;36192:9;36187:14;;36031:176;;;;:::o;36213:180::-;36261:77;36258:1;36251:88;36358:4;36355:1;36348:15;36382:4;36379:1;36372:15;36399:180;36447:77;36444:1;36437:88;36544:4;36541:1;36534:15;36568:4;36565:1;36558:15;36585:180;36633:77;36630:1;36623:88;36730:4;36727:1;36720:15;36754:4;36751:1;36744:15;36771:180;36819:77;36816:1;36809:88;36916:4;36913:1;36906:15;36940:4;36937:1;36930:15;36957:180;37005:77;37002:1;36995:88;37102:4;37099:1;37092:15;37126:4;37123:1;37116:15;37143:117;37252:1;37249;37242:12;37266:117;37375:1;37372;37365:12;37389:117;37498:1;37495;37488:12;37512:117;37621:1;37618;37611:12;37635:117;37744:1;37741;37734:12;37758:102;37799:6;37850:2;37846:7;37841:2;37834:5;37830:14;37826:28;37816:38;;37758:102;;;:::o;37866:237::-;38006:34;38002:1;37994:6;37990:14;37983:58;38075:20;38070:2;38062:6;38058:15;38051:45;37866:237;:::o;38109:225::-;38249:34;38245:1;38237:6;38233:14;38226:58;38318:8;38313:2;38305:6;38301:15;38294:33;38109:225;:::o;38340:178::-;38480:30;38476:1;38468:6;38464:14;38457:54;38340:178;:::o;38524:223::-;38664:34;38660:1;38652:6;38648:14;38641:58;38733:6;38728:2;38720:6;38716:15;38709:31;38524:223;:::o;38753:175::-;38893:27;38889:1;38881:6;38877:14;38870:51;38753:175;:::o;38934:231::-;39074:34;39070:1;39062:6;39058:14;39051:58;39143:14;39138:2;39130:6;39126:15;39119:39;38934:231;:::o;39171:168::-;39311:20;39307:1;39299:6;39295:14;39288:44;39171:168;:::o;39345:243::-;39485:34;39481:1;39473:6;39469:14;39462:58;39554:26;39549:2;39541:6;39537:15;39530:51;39345:243;:::o;39594:229::-;39734:34;39730:1;39722:6;39718:14;39711:58;39803:12;39798:2;39790:6;39786:15;39779:37;39594:229;:::o;39829:228::-;39969:34;39965:1;39957:6;39953:14;39946:58;40038:11;40033:2;40025:6;40021:15;40014:36;39829:228;:::o;40063:172::-;40203:24;40199:1;40191:6;40187:14;40180:48;40063:172;:::o;40241:222::-;40381:34;40377:1;40369:6;40365:14;40358:58;40450:5;40445:2;40437:6;40433:15;40426:30;40241:222;:::o;40469:182::-;40609:34;40605:1;40597:6;40593:14;40586:58;40469:182;:::o;40657:231::-;40797:34;40793:1;40785:6;40781:14;40774:58;40866:14;40861:2;40853:6;40849:15;40842:39;40657:231;:::o;40894:182::-;41034:34;41030:1;41022:6;41018:14;41011:58;40894:182;:::o;41082:228::-;41222:34;41218:1;41210:6;41206:14;41199:58;41291:11;41286:2;41278:6;41274:15;41267:36;41082:228;:::o;41316:234::-;41456:34;41452:1;41444:6;41440:14;41433:58;41525:17;41520:2;41512:6;41508:15;41501:42;41316:234;:::o;41556:220::-;41696:34;41692:1;41684:6;41680:14;41673:58;41765:3;41760:2;41752:6;41748:15;41741:28;41556:220;:::o;41782:236::-;41922:34;41918:1;41910:6;41906:14;41899:58;41991:19;41986:2;41978:6;41974:15;41967:44;41782:236;:::o;42024:173::-;42164:25;42160:1;42152:6;42148:14;42141:49;42024:173;:::o;42203:172::-;42343:24;42339:1;42331:6;42327:14;42320:48;42203:172;:::o;42381:::-;42521:24;42517:1;42509:6;42505:14;42498:48;42381:172;:::o;42559:165::-;42699:17;42695:1;42687:6;42683:14;42676:41;42559:165;:::o;42730:122::-;42803:24;42821:5;42803:24;:::i;:::-;42796:5;42793:35;42783:63;;42842:1;42839;42832:12;42783:63;42730:122;:::o;42858:116::-;42928:21;42943:5;42928:21;:::i;:::-;42921:5;42918:32;42908:60;;42964:1;42961;42954:12;42908:60;42858:116;:::o;42980:120::-;43052:23;43069:5;43052:23;:::i;:::-;43045:5;43042:34;43032:62;;43090:1;43087;43080:12;43032:62;42980:120;:::o;43106:122::-;43179:24;43197:5;43179:24;:::i;:::-;43172:5;43169:35;43159:63;;43218:1;43215;43208:12;43159:63;43106:122;:::o

Swarm Source

ipfs://fa005b6fced8950fc9703ee853e67a7c4a8b3f096916f28a7674c0da5b980300
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.