ETH Price: $3,201.51 (+2.26%)

Token

Cool Sheep (CLSP)
 

Overview

Max Total Supply

1,206 CLSP

Holders

741

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 CLSP
0x9eace0b413844bf82f6a88b91d054fd4ad966c2d
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:
CoolSheep

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-13
*/

// 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;
}
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 CoolSheep is Ownable, ERC721 {
    uint constant maxPerFreeMint = 1;
    uint public reservedSupply = 3000;
    uint constant tokenPrice = .02 ether;
    uint constant maxSupply = 10000;
    uint public totalSupply = 0;
    uint8 public saleStatus = 0;
    address public referenceContract = 0xb5e366c938fe38De600A7fe2F3949A9F41157FD6;

    ERC721 AlienFrens = ERC721(0x123b30E25973FeCd8354dd5f41Cc45A3065eF88C);
    ERC721 CoolDogs = ERC721(0x56681458E00CafE1206313D2D033946f458FDEfD);
    ERC721 CoolCats = ERC721(0x1A92f7381B9F03921564a437210bB9396471050C);
    ERC721 BabySpookles = ERC721(0x87e8AeE88AE939465dA795D6C32963854Bb5fBA0);

    string private baseURI;
    mapping(address => bool) private presaleList;
    mapping(address => bool) private winnerList;

    modifier mutualCheck() {
        require(saleStatus != 0, "sale is not active");
        require(totalSupply + reservedSupply < maxSupply, "all tokens have been minted");
        _;
    }

    constructor() ERC721("Cool Sheep", "CLSP"){}

    function gift() public mutualCheck{

        require(CoolCats.balanceOf(msg.sender) > 0 || CoolDogs.balanceOf(msg.sender) > 0 || AlienFrens.balanceOf(msg.sender) > 0 || BabySpookles.balanceOf(msg.sender)> 0 || ERC721(referenceContract).balanceOf(msg.sender) > 0, "You are not CoolCats, Cool Dogs, Alien frens holder");
        require(balanceOf(msg.sender) < maxPerFreeMint, "One token per wallet for holders");
        
        reservedSupply = reservedSupply - 1;
        _safeMint(msg.sender,++totalSupply);
    }

    function mint(uint _count) public payable mutualCheck{
        require(_count > 0, "mint at least one token");
        require(totalSupply + reservedSupply + _count <= maxSupply, "not enough tokens left");
        require(msg.value == tokenPrice * _count, "incorrect ether amount");
        for(uint i = 0; i < _count; i++)
            _safeMint(msg.sender, totalSupply + 1 + i);
        totalSupply += _count;
    }

    function sendGifts(address[] memory _wallets) public onlyOwner{
        require(totalSupply + reservedSupply + _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 checkGift() public view returns(bool){
        return CoolCats.balanceOf(msg.sender) > 0 || CoolDogs.balanceOf(msg.sender) > 0 || AlienFrens.balanceOf(msg.sender) > 0 || BabySpookles.balanceOf(msg.sender)> 0 || ERC721(referenceContract).balanceOf(msg.sender) > 0;
    }
    function checkMaxFreeMint() public view returns(bool) {
        return balanceOf(msg.sender) < maxPerFreeMint;
        
    }

    function addWinnerList(address[] memory _wallets) public onlyOwner{
        for(uint i; i < _wallets.length; i++)
            winnerList[_wallets[i]] = true;
    }

    function addPresaleList(address[] memory _wallets) public onlyOwner{
        for(uint i; i < _wallets.length; i++)
            presaleList[_wallets[i]] = true;
    }

      function setReservedSupply(uint _reservedSupply) external onlyOwner {
        reservedSupply = _reservedSupply;
    }

    function setReferenceContract(address _reference) public onlyOwner{
        referenceContract = _reference;
    }

    function setSaleStatus(uint8 _status) public onlyOwner{
        saleStatus = _status;
    }

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

    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function withdraw() public onlyOwner{
        uint _balance = address(this).balance;
        payable(0xef265de68010bfC2445A66BbEd80d4C09c1E2530).transfer(_balance * 95 / 100);
        payable(0xbE60e7f33d3Bb37f4d1cEd1521A0896730bE8cE3).transfer(_balance * 3 / 100);
        payable(0xDF4f13CEb3215f39f602744284aB598AeA43CcBd).transfer(_balance * 2 / 100);
    }
}

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":"_wallets","type":"address[]"}],"name":"addPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"addWinnerList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkGift","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkMaxFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referenceContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedSupply","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStatus","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"address","name":"_reference","type":"address"}],"name":"setReferenceContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reservedSupply","type":"uint256"}],"name":"setReservedSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_status","type":"uint8"}],"name":"setSaleStatus","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"}]

6080604052610bb860075560006008556000600960006101000a81548160ff021916908360ff16021790555073b5e366c938fe38de600a7fe2f3949a9f41157fd6600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073123b30e25973fecd8354dd5f41cc45a3065ef88c600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507356681458e00cafe1206313d2d033946f458fdefd600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731a92f7381b9f03921564a437210bb9396471050c600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507387e8aee88ae939465da795d6c32963854bb5fba0600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001e157600080fd5b506040518060400160405280600a81526020017f436f6f6c205368656570000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f434c5350000000000000000000000000000000000000000000000000000000008152506200026e62000262620002a860201b60201c565b620002b060201b60201c565b81600190805190602001906200028692919062000374565b5080600290805190602001906200029f92919062000374565b50505062000489565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003829062000424565b90600052602060002090601f016020900481019282620003a65760008555620003f2565b82601f10620003c157805160ff1916838001178555620003f2565b82800160010185558215620003f2579182015b82811115620003f1578251825591602001919060010190620003d4565b5b50905062000401919062000405565b5090565b5b808211156200042057600081600090555060010162000406565b5090565b600060028204905060018216806200043d57607f821691505b602082108114156200045457620004536200045a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6148e180620004996000396000f3fe6080604052600436106101e35760003560e01c806370a0823111610102578063a22cb46511610095578063ebb3151011610064578063ebb31510146106a7578063eda5d30f146106d0578063f2fde38b146106fb578063f9020e3314610724576101e3565b8063a22cb465146105db578063b88d4fde14610604578063c87b56dd1461062d578063e985e9c51461066a576101e3565b80638da5cb5b116100d15780638da5cb5b1461054057806395d89b411461056b578063a0712d6814610596578063a0bcfc7f146105b2576101e3565b806370a0823114610498578063715018a6146104d55780637c8255db146104ec5780638737fa3f14610515576101e3565b806324b049051161017a57806344d19d2b1161014957806344d19d2b146103de57806345e51173146104095780634891ad88146104325780636352211e1461045b576101e3565b806324b049051461035e5780633ccfd60b146103755780633cf8a6971461038c57806342842e0e146103b5576101e3565b806310e36abc116101b657806310e36abc146102b657806318160ddd146102e15780631e13f86b1461030c57806323b872dd14610335576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a91906134cf565b61074f565b60405161021c9190613a88565b60405180910390f35b34801561023157600080fd5b5061023a610831565b6040516102479190613aa3565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190613572565b6108c3565b6040516102849190613a21565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613446565b610948565b005b3480156102c257600080fd5b506102cb610a60565b6040516102d89190613a88565b60405180910390f35b3480156102ed57600080fd5b506102f6610a73565b6040516103039190613da5565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613572565b610a79565b005b34801561034157600080fd5b5061035c60048036038101906103579190613330565b610aff565b005b34801561036a57600080fd5b50610373610b5f565b005b34801561038157600080fd5b5061038a611049565b005b34801561039857600080fd5b506103b360048036038101906103ae91906132c3565b611226565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190613330565b6112e6565b005b3480156103ea57600080fd5b506103f3611306565b6040516104009190613da5565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613486565b61130c565b005b34801561043e57600080fd5b50610459600480360381019061045491906135cc565b61141d565b005b34801561046757600080fd5b50610482600480360381019061047d9190613572565b6114b7565b60405161048f9190613a21565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba91906132c3565b611569565b6040516104cc9190613da5565b60405180910390f35b3480156104e157600080fd5b506104ea611621565b005b3480156104f857600080fd5b50610513600480360381019061050e9190613486565b6116a9565b005b34801561052157600080fd5b5061052a6117ff565b6040516105379190613a88565b60405180910390f35b34801561054c57600080fd5b50610555611b87565b6040516105629190613a21565b60405180910390f35b34801561057757600080fd5b50610580611bb0565b60405161058d9190613aa3565b60405180910390f35b6105b060048036038101906105ab9190613572565b611c42565b005b3480156105be57600080fd5b506105d960048036038101906105d49190613529565b611e3f565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190613406565b611ed5565b005b34801561061057600080fd5b5061062b60048036038101906106269190613383565b612056565b005b34801561063957600080fd5b50610654600480360381019061064f9190613572565b6120b8565b6040516106619190613aa3565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c91906132f0565b61215f565b60405161069e9190613a88565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613486565b6121f3565b005b3480156106dc57600080fd5b506106e5612304565b6040516106f29190613a21565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d91906132c3565b61232a565b005b34801561073057600080fd5b50610739612422565b6040516107469190613dc0565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061082a575061082982612435565b5b9050919050565b606060018054610840906140a9565b80601f016020809104026020016040519081016040528092919081815260200182805461086c906140a9565b80156108b95780601f1061088e576101008083540402835291602001916108b9565b820191906000526020600020905b81548152906001019060200180831161089c57829003601f168201915b5050505050905090565b60006108ce8261249f565b61090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090490613c85565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610953826114b7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90613d05565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e361250b565b73ffffffffffffffffffffffffffffffffffffffff161480610a125750610a1181610a0c61250b565b61215f565b5b610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4890613c05565b60405180910390fd5b610a5b8383612513565b505050565b60006001610a6d33611569565b10905090565b60085481565b610a8161250b565b73ffffffffffffffffffffffffffffffffffffffff16610a9f611b87565b73ffffffffffffffffffffffffffffffffffffffff1614610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90613ca5565b60405180910390fd5b8060078190555050565b610b10610b0a61250b565b826125cc565b610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690613d25565b60405180910390fd5b610b5a8383836126aa565b505050565b6000600960009054906101000a900460ff1660ff161415610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90613bc5565b60405180910390fd5b612710600754600854610bc89190613ed1565b10610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90613d65565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610c659190613a21565b60206040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb5919061359f565b1180610d6b57506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d199190613a21565b60206040518083038186803b158015610d3157600080fd5b505afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d69919061359f565b115b80610e2057506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610dce9190613a21565b60206040518083038186803b158015610de657600080fd5b505afa158015610dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1e919061359f565b115b80610ed557506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610e839190613a21565b60206040518083038186803b158015610e9b57600080fd5b505afa158015610eaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed3919061359f565b115b80610f8a57506000600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610f389190613a21565b60206040518083038186803b158015610f5057600080fd5b505afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f88919061359f565b115b610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc090613b45565b60405180910390fd5b6001610fd433611569565b10611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613ae5565b60405180910390fd5b60016007546110239190613fb2565b6007819055506110473360086000815461103c9061410c565b919050819055612906565b565b61105161250b565b73ffffffffffffffffffffffffffffffffffffffff1661106f611b87565b73ffffffffffffffffffffffffffffffffffffffff16146110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90613ca5565b60405180910390fd5b600047905073ef265de68010bfc2445a66bbed80d4c09c1e253073ffffffffffffffffffffffffffffffffffffffff166108fc6064605f846111079190613f58565b6111119190613f27565b9081150290604051600060405180830381858888f1935050505015801561113c573d6000803e3d6000fd5b5073be60e7f33d3bb37f4d1ced1521a0896730be8ce373ffffffffffffffffffffffffffffffffffffffff166108fc606460038461117a9190613f58565b6111849190613f27565b9081150290604051600060405180830381858888f193505050501580156111af573d6000803e3d6000fd5b5073df4f13ceb3215f39f602744284ab598aea43ccbd73ffffffffffffffffffffffffffffffffffffffff166108fc60646002846111ed9190613f58565b6111f79190613f27565b9081150290604051600060405180830381858888f19350505050158015611222573d6000803e3d6000fd5b5050565b61122e61250b565b73ffffffffffffffffffffffffffffffffffffffff1661124c611b87565b73ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990613ca5565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61130183838360405180602001604052806000815250612056565b505050565b60075481565b61131461250b565b73ffffffffffffffffffffffffffffffffffffffff16611332611b87565b73ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90613ca5565b60405180910390fd5b60005b8151811015611419576001601060008484815181106113ad576113ac614213565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806114119061410c565b91505061138b565b5050565b61142561250b565b73ffffffffffffffffffffffffffffffffffffffff16611443611b87565b73ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090613ca5565b60405180910390fd5b80600960006101000a81548160ff021916908360ff16021790555050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790613c45565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190613c25565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61162961250b565b73ffffffffffffffffffffffffffffffffffffffff16611647611b87565b73ffffffffffffffffffffffffffffffffffffffff161461169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490613ca5565b60405180910390fd5b6116a76000612924565b565b6116b161250b565b73ffffffffffffffffffffffffffffffffffffffff166116cf611b87565b73ffffffffffffffffffffffffffffffffffffffff1614611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c90613ca5565b60405180910390fd5b612710815160075460085461173a9190613ed1565b6117449190613ed1565b1115611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90613d85565b60405180910390fd5b60005b81518110156117e1576117ce8282815181106117a7576117a6614213565b5b60200260200101518260016008546117bf9190613ed1565b6117c99190613ed1565b612906565b80806117d99061410c565b915050611788565b508051600860008282546117f59190613ed1565b9250508190555050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161185d9190613a21565b60206040518083038186803b15801561187557600080fd5b505afa158015611889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ad919061359f565b118061196357506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016119119190613a21565b60206040518083038186803b15801561192957600080fd5b505afa15801561193d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611961919061359f565b115b80611a1857506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016119c69190613a21565b60206040518083038186803b1580156119de57600080fd5b505afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a16919061359f565b115b80611acd57506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611a7b9190613a21565b60206040518083038186803b158015611a9357600080fd5b505afa158015611aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acb919061359f565b115b80611b8257506000600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611b309190613a21565b60206040518083038186803b158015611b4857600080fd5b505afa158015611b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b80919061359f565b115b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611bbf906140a9565b80601f0160208091040260200160405190810160405280929190818152602001828054611beb906140a9565b8015611c385780601f10611c0d57610100808354040283529160200191611c38565b820191906000526020600020905b815481529060010190602001808311611c1b57829003601f168201915b5050505050905090565b6000600960009054906101000a900460ff1660ff161415611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613bc5565b60405180910390fd5b612710600754600854611cab9190613ed1565b10611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290613d65565b60405180910390fd5b60008111611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613d45565b60405180910390fd5b61271081600754600854611d429190613ed1565b611d4c9190613ed1565b1115611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490613d85565b60405180910390fd5b8066470de4df820000611da09190613f58565b3414611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613be5565b60405180910390fd5b60005b81811015611e2257611e0f33826001600854611e009190613ed1565b611e0a9190613ed1565b612906565b8080611e1a9061410c565b915050611de4565b508060086000828254611e359190613ed1565b9250508190555050565b611e4761250b565b73ffffffffffffffffffffffffffffffffffffffff16611e65611b87565b73ffffffffffffffffffffffffffffffffffffffff1614611ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb290613ca5565b60405180910390fd5b80600e9080519060200190611ed192919061300f565b5050565b611edd61250b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290613b85565b60405180910390fd5b8060066000611f5861250b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661200561250b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161204a9190613a88565b60405180910390a35050565b61206761206161250b565b836125cc565b6120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613d25565b60405180910390fd5b6120b2848484846129e8565b50505050565b60606120c38261249f565b612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990613ce5565b60405180910390fd5b600061210c612a44565b9050600081511161212c5760405180602001604052806000815250612157565b8061213684612ad6565b6040516020016121479291906139fd565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121fb61250b565b73ffffffffffffffffffffffffffffffffffffffff16612219611b87565b73ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690613ca5565b60405180910390fd5b60005b8151811015612300576001600f600084848151811061229457612293614213565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122f89061410c565b915050612272565b5050565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61233261250b565b73ffffffffffffffffffffffffffffffffffffffff16612350611b87565b73ffffffffffffffffffffffffffffffffffffffff16146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90613ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240d90613b05565b60405180910390fd5b61241f81612924565b50565b600960009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612586836114b7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125d78261249f565b612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90613ba5565b60405180910390fd5b6000612621836114b7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061269057508373ffffffffffffffffffffffffffffffffffffffff16612678846108c3565b73ffffffffffffffffffffffffffffffffffffffff16145b806126a157506126a0818561215f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126ca826114b7565b73ffffffffffffffffffffffffffffffffffffffff1614612720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271790613cc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278790613b65565b60405180910390fd5b61279b838383612c37565b6127a6600082612513565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127f69190613fb2565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461284d9190613ed1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612920828260405180602001604052806000815250612c3c565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129f38484846126aa565b6129ff84848484612c97565b612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3590613ac5565b60405180910390fd5b50505050565b6060600e8054612a53906140a9565b80601f0160208091040260200160405190810160405280929190818152602001828054612a7f906140a9565b8015612acc5780601f10612aa157610100808354040283529160200191612acc565b820191906000526020600020905b815481529060010190602001808311612aaf57829003601f168201915b5050505050905090565b60606000821415612b1e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c32565b600082905060005b60008214612b50578080612b399061410c565b915050600a82612b499190613f27565b9150612b26565b60008167ffffffffffffffff811115612b6c57612b6b614242565b5b6040519080825280601f01601f191660200182016040528015612b9e5781602001600182028036833780820191505090505b5090505b60008514612c2b57600182612bb79190613fb2565b9150600a85612bc69190614155565b6030612bd29190613ed1565b60f81b818381518110612be857612be7614213565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c249190613f27565b9450612ba2565b8093505050505b919050565b505050565b612c468383612e2e565b612c536000848484612c97565b612c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8990613ac5565b60405180910390fd5b505050565b6000612cb88473ffffffffffffffffffffffffffffffffffffffff16612ffc565b15612e21578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ce161250b565b8786866040518563ffffffff1660e01b8152600401612d039493929190613a3c565b602060405180830381600087803b158015612d1d57600080fd5b505af1925050508015612d4e57506040513d601f19601f82011682018060405250810190612d4b91906134fc565b60015b612dd1573d8060008114612d7e576040519150601f19603f3d011682016040523d82523d6000602084013e612d83565b606091505b50600081511415612dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc090613ac5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e26565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9590613c65565b60405180910390fd5b612ea78161249f565b15612ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ede90613b25565b60405180910390fd5b612ef360008383612c37565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f439190613ed1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461301b906140a9565b90600052602060002090601f01602090048101928261303d5760008555613084565b82601f1061305657805160ff1916838001178555613084565b82800160010185558215613084579182015b82811115613083578251825591602001919060010190613068565b5b5090506130919190613095565b5090565b5b808211156130ae576000816000905550600101613096565b5090565b60006130c56130c084613e00565b613ddb565b905080838252602082019050828560208602820111156130e8576130e7614276565b5b60005b8581101561311857816130fe88826131a6565b8452602084019350602083019250506001810190506130eb565b5050509392505050565b600061313561313084613e2c565b613ddb565b9050828152602081018484840111156131515761315061427b565b5b61315c848285614067565b509392505050565b600061317761317284613e5d565b613ddb565b9050828152602081018484840111156131935761319261427b565b5b61319e848285614067565b509392505050565b6000813590506131b581614838565b92915050565b600082601f8301126131d0576131cf614271565b5b81356131e08482602086016130b2565b91505092915050565b6000813590506131f88161484f565b92915050565b60008135905061320d81614866565b92915050565b60008151905061322281614866565b92915050565b600082601f83011261323d5761323c614271565b5b813561324d848260208601613122565b91505092915050565b600082601f83011261326b5761326a614271565b5b813561327b848260208601613164565b91505092915050565b6000813590506132938161487d565b92915050565b6000815190506132a88161487d565b92915050565b6000813590506132bd81614894565b92915050565b6000602082840312156132d9576132d8614285565b5b60006132e7848285016131a6565b91505092915050565b6000806040838503121561330757613306614285565b5b6000613315858286016131a6565b9250506020613326858286016131a6565b9150509250929050565b60008060006060848603121561334957613348614285565b5b6000613357868287016131a6565b9350506020613368868287016131a6565b925050604061337986828701613284565b9150509250925092565b6000806000806080858703121561339d5761339c614285565b5b60006133ab878288016131a6565b94505060206133bc878288016131a6565b93505060406133cd87828801613284565b925050606085013567ffffffffffffffff8111156133ee576133ed614280565b5b6133fa87828801613228565b91505092959194509250565b6000806040838503121561341d5761341c614285565b5b600061342b858286016131a6565b925050602061343c858286016131e9565b9150509250929050565b6000806040838503121561345d5761345c614285565b5b600061346b858286016131a6565b925050602061347c85828601613284565b9150509250929050565b60006020828403121561349c5761349b614285565b5b600082013567ffffffffffffffff8111156134ba576134b9614280565b5b6134c6848285016131bb565b91505092915050565b6000602082840312156134e5576134e4614285565b5b60006134f3848285016131fe565b91505092915050565b60006020828403121561351257613511614285565b5b600061352084828501613213565b91505092915050565b60006020828403121561353f5761353e614285565b5b600082013567ffffffffffffffff81111561355d5761355c614280565b5b61356984828501613256565b91505092915050565b60006020828403121561358857613587614285565b5b600061359684828501613284565b91505092915050565b6000602082840312156135b5576135b4614285565b5b60006135c384828501613299565b91505092915050565b6000602082840312156135e2576135e1614285565b5b60006135f0848285016132ae565b91505092915050565b61360281613fe6565b82525050565b61361181613ff8565b82525050565b600061362282613e8e565b61362c8185613ea4565b935061363c818560208601614076565b6136458161428a565b840191505092915050565b600061365b82613e99565b6136658185613eb5565b9350613675818560208601614076565b61367e8161428a565b840191505092915050565b600061369482613e99565b61369e8185613ec6565b93506136ae818560208601614076565b80840191505092915050565b60006136c7603283613eb5565b91506136d28261429b565b604082019050919050565b60006136ea602083613eb5565b91506136f5826142ea565b602082019050919050565b600061370d602683613eb5565b915061371882614313565b604082019050919050565b6000613730601c83613eb5565b915061373b82614362565b602082019050919050565b6000613753603383613eb5565b915061375e8261438b565b604082019050919050565b6000613776602483613eb5565b9150613781826143da565b604082019050919050565b6000613799601983613eb5565b91506137a482614429565b602082019050919050565b60006137bc602c83613eb5565b91506137c782614452565b604082019050919050565b60006137df601283613eb5565b91506137ea826144a1565b602082019050919050565b6000613802601683613eb5565b915061380d826144ca565b602082019050919050565b6000613825603883613eb5565b9150613830826144f3565b604082019050919050565b6000613848602a83613eb5565b915061385382614542565b604082019050919050565b600061386b602983613eb5565b915061387682614591565b604082019050919050565b600061388e602083613eb5565b9150613899826145e0565b602082019050919050565b60006138b1602c83613eb5565b91506138bc82614609565b604082019050919050565b60006138d4602083613eb5565b91506138df82614658565b602082019050919050565b60006138f7602983613eb5565b915061390282614681565b604082019050919050565b600061391a602f83613eb5565b9150613925826146d0565b604082019050919050565b600061393d602183613eb5565b91506139488261471f565b604082019050919050565b6000613960603183613eb5565b915061396b8261476e565b604082019050919050565b6000613983601783613eb5565b915061398e826147bd565b602082019050919050565b60006139a6601b83613eb5565b91506139b1826147e6565b602082019050919050565b60006139c9601683613eb5565b91506139d48261480f565b602082019050919050565b6139e881614050565b82525050565b6139f78161405a565b82525050565b6000613a098285613689565b9150613a158284613689565b91508190509392505050565b6000602082019050613a3660008301846135f9565b92915050565b6000608082019050613a5160008301876135f9565b613a5e60208301866135f9565b613a6b60408301856139df565b8181036060830152613a7d8184613617565b905095945050505050565b6000602082019050613a9d6000830184613608565b92915050565b60006020820190508181036000830152613abd8184613650565b905092915050565b60006020820190508181036000830152613ade816136ba565b9050919050565b60006020820190508181036000830152613afe816136dd565b9050919050565b60006020820190508181036000830152613b1e81613700565b9050919050565b60006020820190508181036000830152613b3e81613723565b9050919050565b60006020820190508181036000830152613b5e81613746565b9050919050565b60006020820190508181036000830152613b7e81613769565b9050919050565b60006020820190508181036000830152613b9e8161378c565b9050919050565b60006020820190508181036000830152613bbe816137af565b9050919050565b60006020820190508181036000830152613bde816137d2565b9050919050565b60006020820190508181036000830152613bfe816137f5565b9050919050565b60006020820190508181036000830152613c1e81613818565b9050919050565b60006020820190508181036000830152613c3e8161383b565b9050919050565b60006020820190508181036000830152613c5e8161385e565b9050919050565b60006020820190508181036000830152613c7e81613881565b9050919050565b60006020820190508181036000830152613c9e816138a4565b9050919050565b60006020820190508181036000830152613cbe816138c7565b9050919050565b60006020820190508181036000830152613cde816138ea565b9050919050565b60006020820190508181036000830152613cfe8161390d565b9050919050565b60006020820190508181036000830152613d1e81613930565b9050919050565b60006020820190508181036000830152613d3e81613953565b9050919050565b60006020820190508181036000830152613d5e81613976565b9050919050565b60006020820190508181036000830152613d7e81613999565b9050919050565b60006020820190508181036000830152613d9e816139bc565b9050919050565b6000602082019050613dba60008301846139df565b92915050565b6000602082019050613dd560008301846139ee565b92915050565b6000613de5613df6565b9050613df182826140db565b919050565b6000604051905090565b600067ffffffffffffffff821115613e1b57613e1a614242565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e4757613e46614242565b5b613e508261428a565b9050602081019050919050565b600067ffffffffffffffff821115613e7857613e77614242565b5b613e818261428a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613edc82614050565b9150613ee783614050565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f1c57613f1b614186565b5b828201905092915050565b6000613f3282614050565b9150613f3d83614050565b925082613f4d57613f4c6141b5565b5b828204905092915050565b6000613f6382614050565b9150613f6e83614050565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fa757613fa6614186565b5b828202905092915050565b6000613fbd82614050565b9150613fc883614050565b925082821015613fdb57613fda614186565b5b828203905092915050565b6000613ff182614030565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614094578082015181840152602081019050614079565b838111156140a3576000848401525b50505050565b600060028204905060018216806140c157607f821691505b602082108114156140d5576140d46141e4565b5b50919050565b6140e48261428a565b810181811067ffffffffffffffff8211171561410357614102614242565b5b80604052505050565b600061411782614050565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561414a57614149614186565b5b600182019050919050565b600061416082614050565b915061416b83614050565b92508261417b5761417a6141b5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f6e6520746f6b656e207065722077616c6c657420666f7220686f6c64657273600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f7520617265206e6f7420436f6f6c436174732c20436f6f6c20446f67732c60008201527f20416c69656e206672656e7320686f6c64657200000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f73616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f616c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b61484181613fe6565b811461484c57600080fd5b50565b61485881613ff8565b811461486357600080fd5b50565b61486f81614004565b811461487a57600080fd5b50565b61488681614050565b811461489157600080fd5b50565b61489d8161405a565b81146148a857600080fd5b5056fea2646970667358221220c5793ef8efa345256d436818b96a14ef9f797200191e6db1d99791b09e06b01864736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101e35760003560e01c806370a0823111610102578063a22cb46511610095578063ebb3151011610064578063ebb31510146106a7578063eda5d30f146106d0578063f2fde38b146106fb578063f9020e3314610724576101e3565b8063a22cb465146105db578063b88d4fde14610604578063c87b56dd1461062d578063e985e9c51461066a576101e3565b80638da5cb5b116100d15780638da5cb5b1461054057806395d89b411461056b578063a0712d6814610596578063a0bcfc7f146105b2576101e3565b806370a0823114610498578063715018a6146104d55780637c8255db146104ec5780638737fa3f14610515576101e3565b806324b049051161017a57806344d19d2b1161014957806344d19d2b146103de57806345e51173146104095780634891ad88146104325780636352211e1461045b576101e3565b806324b049051461035e5780633ccfd60b146103755780633cf8a6971461038c57806342842e0e146103b5576101e3565b806310e36abc116101b657806310e36abc146102b657806318160ddd146102e15780631e13f86b1461030c57806323b872dd14610335576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a91906134cf565b61074f565b60405161021c9190613a88565b60405180910390f35b34801561023157600080fd5b5061023a610831565b6040516102479190613aa3565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190613572565b6108c3565b6040516102849190613a21565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613446565b610948565b005b3480156102c257600080fd5b506102cb610a60565b6040516102d89190613a88565b60405180910390f35b3480156102ed57600080fd5b506102f6610a73565b6040516103039190613da5565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613572565b610a79565b005b34801561034157600080fd5b5061035c60048036038101906103579190613330565b610aff565b005b34801561036a57600080fd5b50610373610b5f565b005b34801561038157600080fd5b5061038a611049565b005b34801561039857600080fd5b506103b360048036038101906103ae91906132c3565b611226565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190613330565b6112e6565b005b3480156103ea57600080fd5b506103f3611306565b6040516104009190613da5565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613486565b61130c565b005b34801561043e57600080fd5b50610459600480360381019061045491906135cc565b61141d565b005b34801561046757600080fd5b50610482600480360381019061047d9190613572565b6114b7565b60405161048f9190613a21565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba91906132c3565b611569565b6040516104cc9190613da5565b60405180910390f35b3480156104e157600080fd5b506104ea611621565b005b3480156104f857600080fd5b50610513600480360381019061050e9190613486565b6116a9565b005b34801561052157600080fd5b5061052a6117ff565b6040516105379190613a88565b60405180910390f35b34801561054c57600080fd5b50610555611b87565b6040516105629190613a21565b60405180910390f35b34801561057757600080fd5b50610580611bb0565b60405161058d9190613aa3565b60405180910390f35b6105b060048036038101906105ab9190613572565b611c42565b005b3480156105be57600080fd5b506105d960048036038101906105d49190613529565b611e3f565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190613406565b611ed5565b005b34801561061057600080fd5b5061062b60048036038101906106269190613383565b612056565b005b34801561063957600080fd5b50610654600480360381019061064f9190613572565b6120b8565b6040516106619190613aa3565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c91906132f0565b61215f565b60405161069e9190613a88565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613486565b6121f3565b005b3480156106dc57600080fd5b506106e5612304565b6040516106f29190613a21565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d91906132c3565b61232a565b005b34801561073057600080fd5b50610739612422565b6040516107469190613dc0565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061082a575061082982612435565b5b9050919050565b606060018054610840906140a9565b80601f016020809104026020016040519081016040528092919081815260200182805461086c906140a9565b80156108b95780601f1061088e576101008083540402835291602001916108b9565b820191906000526020600020905b81548152906001019060200180831161089c57829003601f168201915b5050505050905090565b60006108ce8261249f565b61090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090490613c85565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610953826114b7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90613d05565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e361250b565b73ffffffffffffffffffffffffffffffffffffffff161480610a125750610a1181610a0c61250b565b61215f565b5b610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4890613c05565b60405180910390fd5b610a5b8383612513565b505050565b60006001610a6d33611569565b10905090565b60085481565b610a8161250b565b73ffffffffffffffffffffffffffffffffffffffff16610a9f611b87565b73ffffffffffffffffffffffffffffffffffffffff1614610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90613ca5565b60405180910390fd5b8060078190555050565b610b10610b0a61250b565b826125cc565b610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690613d25565b60405180910390fd5b610b5a8383836126aa565b505050565b6000600960009054906101000a900460ff1660ff161415610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90613bc5565b60405180910390fd5b612710600754600854610bc89190613ed1565b10610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90613d65565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610c659190613a21565b60206040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb5919061359f565b1180610d6b57506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d199190613a21565b60206040518083038186803b158015610d3157600080fd5b505afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d69919061359f565b115b80610e2057506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610dce9190613a21565b60206040518083038186803b158015610de657600080fd5b505afa158015610dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1e919061359f565b115b80610ed557506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610e839190613a21565b60206040518083038186803b158015610e9b57600080fd5b505afa158015610eaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed3919061359f565b115b80610f8a57506000600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610f389190613a21565b60206040518083038186803b158015610f5057600080fd5b505afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f88919061359f565b115b610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc090613b45565b60405180910390fd5b6001610fd433611569565b10611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613ae5565b60405180910390fd5b60016007546110239190613fb2565b6007819055506110473360086000815461103c9061410c565b919050819055612906565b565b61105161250b565b73ffffffffffffffffffffffffffffffffffffffff1661106f611b87565b73ffffffffffffffffffffffffffffffffffffffff16146110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90613ca5565b60405180910390fd5b600047905073ef265de68010bfc2445a66bbed80d4c09c1e253073ffffffffffffffffffffffffffffffffffffffff166108fc6064605f846111079190613f58565b6111119190613f27565b9081150290604051600060405180830381858888f1935050505015801561113c573d6000803e3d6000fd5b5073be60e7f33d3bb37f4d1ced1521a0896730be8ce373ffffffffffffffffffffffffffffffffffffffff166108fc606460038461117a9190613f58565b6111849190613f27565b9081150290604051600060405180830381858888f193505050501580156111af573d6000803e3d6000fd5b5073df4f13ceb3215f39f602744284ab598aea43ccbd73ffffffffffffffffffffffffffffffffffffffff166108fc60646002846111ed9190613f58565b6111f79190613f27565b9081150290604051600060405180830381858888f19350505050158015611222573d6000803e3d6000fd5b5050565b61122e61250b565b73ffffffffffffffffffffffffffffffffffffffff1661124c611b87565b73ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990613ca5565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61130183838360405180602001604052806000815250612056565b505050565b60075481565b61131461250b565b73ffffffffffffffffffffffffffffffffffffffff16611332611b87565b73ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90613ca5565b60405180910390fd5b60005b8151811015611419576001601060008484815181106113ad576113ac614213565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806114119061410c565b91505061138b565b5050565b61142561250b565b73ffffffffffffffffffffffffffffffffffffffff16611443611b87565b73ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090613ca5565b60405180910390fd5b80600960006101000a81548160ff021916908360ff16021790555050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790613c45565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190613c25565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61162961250b565b73ffffffffffffffffffffffffffffffffffffffff16611647611b87565b73ffffffffffffffffffffffffffffffffffffffff161461169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490613ca5565b60405180910390fd5b6116a76000612924565b565b6116b161250b565b73ffffffffffffffffffffffffffffffffffffffff166116cf611b87565b73ffffffffffffffffffffffffffffffffffffffff1614611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c90613ca5565b60405180910390fd5b612710815160075460085461173a9190613ed1565b6117449190613ed1565b1115611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90613d85565b60405180910390fd5b60005b81518110156117e1576117ce8282815181106117a7576117a6614213565b5b60200260200101518260016008546117bf9190613ed1565b6117c99190613ed1565b612906565b80806117d99061410c565b915050611788565b508051600860008282546117f59190613ed1565b9250508190555050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161185d9190613a21565b60206040518083038186803b15801561187557600080fd5b505afa158015611889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ad919061359f565b118061196357506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016119119190613a21565b60206040518083038186803b15801561192957600080fd5b505afa15801561193d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611961919061359f565b115b80611a1857506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016119c69190613a21565b60206040518083038186803b1580156119de57600080fd5b505afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a16919061359f565b115b80611acd57506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611a7b9190613a21565b60206040518083038186803b158015611a9357600080fd5b505afa158015611aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acb919061359f565b115b80611b8257506000600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611b309190613a21565b60206040518083038186803b158015611b4857600080fd5b505afa158015611b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b80919061359f565b115b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611bbf906140a9565b80601f0160208091040260200160405190810160405280929190818152602001828054611beb906140a9565b8015611c385780601f10611c0d57610100808354040283529160200191611c38565b820191906000526020600020905b815481529060010190602001808311611c1b57829003601f168201915b5050505050905090565b6000600960009054906101000a900460ff1660ff161415611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613bc5565b60405180910390fd5b612710600754600854611cab9190613ed1565b10611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290613d65565b60405180910390fd5b60008111611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613d45565b60405180910390fd5b61271081600754600854611d429190613ed1565b611d4c9190613ed1565b1115611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490613d85565b60405180910390fd5b8066470de4df820000611da09190613f58565b3414611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613be5565b60405180910390fd5b60005b81811015611e2257611e0f33826001600854611e009190613ed1565b611e0a9190613ed1565b612906565b8080611e1a9061410c565b915050611de4565b508060086000828254611e359190613ed1565b9250508190555050565b611e4761250b565b73ffffffffffffffffffffffffffffffffffffffff16611e65611b87565b73ffffffffffffffffffffffffffffffffffffffff1614611ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb290613ca5565b60405180910390fd5b80600e9080519060200190611ed192919061300f565b5050565b611edd61250b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290613b85565b60405180910390fd5b8060066000611f5861250b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661200561250b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161204a9190613a88565b60405180910390a35050565b61206761206161250b565b836125cc565b6120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613d25565b60405180910390fd5b6120b2848484846129e8565b50505050565b60606120c38261249f565b612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990613ce5565b60405180910390fd5b600061210c612a44565b9050600081511161212c5760405180602001604052806000815250612157565b8061213684612ad6565b6040516020016121479291906139fd565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121fb61250b565b73ffffffffffffffffffffffffffffffffffffffff16612219611b87565b73ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690613ca5565b60405180910390fd5b60005b8151811015612300576001600f600084848151811061229457612293614213565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122f89061410c565b915050612272565b5050565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61233261250b565b73ffffffffffffffffffffffffffffffffffffffff16612350611b87565b73ffffffffffffffffffffffffffffffffffffffff16146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90613ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240d90613b05565b60405180910390fd5b61241f81612924565b50565b600960009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612586836114b7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125d78261249f565b612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90613ba5565b60405180910390fd5b6000612621836114b7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061269057508373ffffffffffffffffffffffffffffffffffffffff16612678846108c3565b73ffffffffffffffffffffffffffffffffffffffff16145b806126a157506126a0818561215f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126ca826114b7565b73ffffffffffffffffffffffffffffffffffffffff1614612720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271790613cc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278790613b65565b60405180910390fd5b61279b838383612c37565b6127a6600082612513565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127f69190613fb2565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461284d9190613ed1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612920828260405180602001604052806000815250612c3c565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129f38484846126aa565b6129ff84848484612c97565b612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3590613ac5565b60405180910390fd5b50505050565b6060600e8054612a53906140a9565b80601f0160208091040260200160405190810160405280929190818152602001828054612a7f906140a9565b8015612acc5780601f10612aa157610100808354040283529160200191612acc565b820191906000526020600020905b815481529060010190602001808311612aaf57829003601f168201915b5050505050905090565b60606000821415612b1e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c32565b600082905060005b60008214612b50578080612b399061410c565b915050600a82612b499190613f27565b9150612b26565b60008167ffffffffffffffff811115612b6c57612b6b614242565b5b6040519080825280601f01601f191660200182016040528015612b9e5781602001600182028036833780820191505090505b5090505b60008514612c2b57600182612bb79190613fb2565b9150600a85612bc69190614155565b6030612bd29190613ed1565b60f81b818381518110612be857612be7614213565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c249190613f27565b9450612ba2565b8093505050505b919050565b505050565b612c468383612e2e565b612c536000848484612c97565b612c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8990613ac5565b60405180910390fd5b505050565b6000612cb88473ffffffffffffffffffffffffffffffffffffffff16612ffc565b15612e21578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ce161250b565b8786866040518563ffffffff1660e01b8152600401612d039493929190613a3c565b602060405180830381600087803b158015612d1d57600080fd5b505af1925050508015612d4e57506040513d601f19601f82011682018060405250810190612d4b91906134fc565b60015b612dd1573d8060008114612d7e576040519150601f19603f3d011682016040523d82523d6000602084013e612d83565b606091505b50600081511415612dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc090613ac5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e26565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9590613c65565b60405180910390fd5b612ea78161249f565b15612ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ede90613b25565b60405180910390fd5b612ef360008383612c37565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f439190613ed1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461301b906140a9565b90600052602060002090601f01602090048101928261303d5760008555613084565b82601f1061305657805160ff1916838001178555613084565b82800160010185558215613084579182015b82811115613083578251825591602001919060010190613068565b5b5090506130919190613095565b5090565b5b808211156130ae576000816000905550600101613096565b5090565b60006130c56130c084613e00565b613ddb565b905080838252602082019050828560208602820111156130e8576130e7614276565b5b60005b8581101561311857816130fe88826131a6565b8452602084019350602083019250506001810190506130eb565b5050509392505050565b600061313561313084613e2c565b613ddb565b9050828152602081018484840111156131515761315061427b565b5b61315c848285614067565b509392505050565b600061317761317284613e5d565b613ddb565b9050828152602081018484840111156131935761319261427b565b5b61319e848285614067565b509392505050565b6000813590506131b581614838565b92915050565b600082601f8301126131d0576131cf614271565b5b81356131e08482602086016130b2565b91505092915050565b6000813590506131f88161484f565b92915050565b60008135905061320d81614866565b92915050565b60008151905061322281614866565b92915050565b600082601f83011261323d5761323c614271565b5b813561324d848260208601613122565b91505092915050565b600082601f83011261326b5761326a614271565b5b813561327b848260208601613164565b91505092915050565b6000813590506132938161487d565b92915050565b6000815190506132a88161487d565b92915050565b6000813590506132bd81614894565b92915050565b6000602082840312156132d9576132d8614285565b5b60006132e7848285016131a6565b91505092915050565b6000806040838503121561330757613306614285565b5b6000613315858286016131a6565b9250506020613326858286016131a6565b9150509250929050565b60008060006060848603121561334957613348614285565b5b6000613357868287016131a6565b9350506020613368868287016131a6565b925050604061337986828701613284565b9150509250925092565b6000806000806080858703121561339d5761339c614285565b5b60006133ab878288016131a6565b94505060206133bc878288016131a6565b93505060406133cd87828801613284565b925050606085013567ffffffffffffffff8111156133ee576133ed614280565b5b6133fa87828801613228565b91505092959194509250565b6000806040838503121561341d5761341c614285565b5b600061342b858286016131a6565b925050602061343c858286016131e9565b9150509250929050565b6000806040838503121561345d5761345c614285565b5b600061346b858286016131a6565b925050602061347c85828601613284565b9150509250929050565b60006020828403121561349c5761349b614285565b5b600082013567ffffffffffffffff8111156134ba576134b9614280565b5b6134c6848285016131bb565b91505092915050565b6000602082840312156134e5576134e4614285565b5b60006134f3848285016131fe565b91505092915050565b60006020828403121561351257613511614285565b5b600061352084828501613213565b91505092915050565b60006020828403121561353f5761353e614285565b5b600082013567ffffffffffffffff81111561355d5761355c614280565b5b61356984828501613256565b91505092915050565b60006020828403121561358857613587614285565b5b600061359684828501613284565b91505092915050565b6000602082840312156135b5576135b4614285565b5b60006135c384828501613299565b91505092915050565b6000602082840312156135e2576135e1614285565b5b60006135f0848285016132ae565b91505092915050565b61360281613fe6565b82525050565b61361181613ff8565b82525050565b600061362282613e8e565b61362c8185613ea4565b935061363c818560208601614076565b6136458161428a565b840191505092915050565b600061365b82613e99565b6136658185613eb5565b9350613675818560208601614076565b61367e8161428a565b840191505092915050565b600061369482613e99565b61369e8185613ec6565b93506136ae818560208601614076565b80840191505092915050565b60006136c7603283613eb5565b91506136d28261429b565b604082019050919050565b60006136ea602083613eb5565b91506136f5826142ea565b602082019050919050565b600061370d602683613eb5565b915061371882614313565b604082019050919050565b6000613730601c83613eb5565b915061373b82614362565b602082019050919050565b6000613753603383613eb5565b915061375e8261438b565b604082019050919050565b6000613776602483613eb5565b9150613781826143da565b604082019050919050565b6000613799601983613eb5565b91506137a482614429565b602082019050919050565b60006137bc602c83613eb5565b91506137c782614452565b604082019050919050565b60006137df601283613eb5565b91506137ea826144a1565b602082019050919050565b6000613802601683613eb5565b915061380d826144ca565b602082019050919050565b6000613825603883613eb5565b9150613830826144f3565b604082019050919050565b6000613848602a83613eb5565b915061385382614542565b604082019050919050565b600061386b602983613eb5565b915061387682614591565b604082019050919050565b600061388e602083613eb5565b9150613899826145e0565b602082019050919050565b60006138b1602c83613eb5565b91506138bc82614609565b604082019050919050565b60006138d4602083613eb5565b91506138df82614658565b602082019050919050565b60006138f7602983613eb5565b915061390282614681565b604082019050919050565b600061391a602f83613eb5565b9150613925826146d0565b604082019050919050565b600061393d602183613eb5565b91506139488261471f565b604082019050919050565b6000613960603183613eb5565b915061396b8261476e565b604082019050919050565b6000613983601783613eb5565b915061398e826147bd565b602082019050919050565b60006139a6601b83613eb5565b91506139b1826147e6565b602082019050919050565b60006139c9601683613eb5565b91506139d48261480f565b602082019050919050565b6139e881614050565b82525050565b6139f78161405a565b82525050565b6000613a098285613689565b9150613a158284613689565b91508190509392505050565b6000602082019050613a3660008301846135f9565b92915050565b6000608082019050613a5160008301876135f9565b613a5e60208301866135f9565b613a6b60408301856139df565b8181036060830152613a7d8184613617565b905095945050505050565b6000602082019050613a9d6000830184613608565b92915050565b60006020820190508181036000830152613abd8184613650565b905092915050565b60006020820190508181036000830152613ade816136ba565b9050919050565b60006020820190508181036000830152613afe816136dd565b9050919050565b60006020820190508181036000830152613b1e81613700565b9050919050565b60006020820190508181036000830152613b3e81613723565b9050919050565b60006020820190508181036000830152613b5e81613746565b9050919050565b60006020820190508181036000830152613b7e81613769565b9050919050565b60006020820190508181036000830152613b9e8161378c565b9050919050565b60006020820190508181036000830152613bbe816137af565b9050919050565b60006020820190508181036000830152613bde816137d2565b9050919050565b60006020820190508181036000830152613bfe816137f5565b9050919050565b60006020820190508181036000830152613c1e81613818565b9050919050565b60006020820190508181036000830152613c3e8161383b565b9050919050565b60006020820190508181036000830152613c5e8161385e565b9050919050565b60006020820190508181036000830152613c7e81613881565b9050919050565b60006020820190508181036000830152613c9e816138a4565b9050919050565b60006020820190508181036000830152613cbe816138c7565b9050919050565b60006020820190508181036000830152613cde816138ea565b9050919050565b60006020820190508181036000830152613cfe8161390d565b9050919050565b60006020820190508181036000830152613d1e81613930565b9050919050565b60006020820190508181036000830152613d3e81613953565b9050919050565b60006020820190508181036000830152613d5e81613976565b9050919050565b60006020820190508181036000830152613d7e81613999565b9050919050565b60006020820190508181036000830152613d9e816139bc565b9050919050565b6000602082019050613dba60008301846139df565b92915050565b6000602082019050613dd560008301846139ee565b92915050565b6000613de5613df6565b9050613df182826140db565b919050565b6000604051905090565b600067ffffffffffffffff821115613e1b57613e1a614242565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e4757613e46614242565b5b613e508261428a565b9050602081019050919050565b600067ffffffffffffffff821115613e7857613e77614242565b5b613e818261428a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613edc82614050565b9150613ee783614050565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f1c57613f1b614186565b5b828201905092915050565b6000613f3282614050565b9150613f3d83614050565b925082613f4d57613f4c6141b5565b5b828204905092915050565b6000613f6382614050565b9150613f6e83614050565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fa757613fa6614186565b5b828202905092915050565b6000613fbd82614050565b9150613fc883614050565b925082821015613fdb57613fda614186565b5b828203905092915050565b6000613ff182614030565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614094578082015181840152602081019050614079565b838111156140a3576000848401525b50505050565b600060028204905060018216806140c157607f821691505b602082108114156140d5576140d46141e4565b5b50919050565b6140e48261428a565b810181811067ffffffffffffffff8211171561410357614102614242565b5b80604052505050565b600061411782614050565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561414a57614149614186565b5b600182019050919050565b600061416082614050565b915061416b83614050565b92508261417b5761417a6141b5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f6e6520746f6b656e207065722077616c6c657420666f7220686f6c64657273600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f7520617265206e6f7420436f6f6c436174732c20436f6f6c20446f67732c60008201527f20416c69656e206672656e7320686f6c64657200000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f73616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f616c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b61484181613fe6565b811461484c57600080fd5b50565b61485881613ff8565b811461486357600080fd5b50565b61486f81614004565b811461487a57600080fd5b50565b61488681614050565b811461489157600080fd5b50565b61489d8161405a565b81146148a857600080fd5b5056fea2646970667358221220c5793ef8efa345256d436818b96a14ef9f797200191e6db1d99791b09e06b01864736f6c63430008070033

Deployed Bytecode Sourcemap

34414:4055:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22266:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23211:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24770:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24293:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37045:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34619:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37533:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25660:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35464:523;;;;;;;;;;;;;:::i;:::-;;38100:366;;;;;;;;;;;;;:::i;:::-;;37660:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26070:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34498:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37181:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37783:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22905:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22635:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14113:94;;;;;;;;;;;;;:::i;:::-;;36426:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36759:280;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13462:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23380:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35995:423;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37884:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25063:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26326:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23555:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25429:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37355:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34687:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14362:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34653:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22266:305;22368:4;22420:25;22405:40;;;:11;:40;;;;:105;;;;22477:33;22462:48;;;:11;:48;;;;22405:105;:158;;;;22527:36;22551:11;22527:23;:36::i;:::-;22405:158;22385:178;;22266:305;;;:::o;23211:100::-;23265:13;23298:5;23291:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23211:100;:::o;24770:221::-;24846:7;24874:16;24882:7;24874;:16::i;:::-;24866:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24959:15;:24;24975:7;24959:24;;;;;;;;;;;;;;;;;;;;;24952:31;;24770:221;;;:::o;24293:411::-;24374:13;24390:23;24405:7;24390:14;:23::i;:::-;24374:39;;24438:5;24432:11;;:2;:11;;;;24424:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24532:5;24516:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24541:37;24558:5;24565:12;:10;:12::i;:::-;24541:16;:37::i;:::-;24516:62;24494:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24675:21;24684:2;24688:7;24675:8;:21::i;:::-;24363:341;24293:411;;:::o;37045:128::-;37093:4;34490:1;37117:21;37127:10;37117:9;:21::i;:::-;:38;37110:45;;37045:128;:::o;34619:27::-;;;;:::o;37533:119::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37629:15:::1;37612:14;:32;;;;37533:119:::0;:::o;25660:339::-;25855:41;25874:12;:10;:12::i;:::-;25888:7;25855:18;:41::i;:::-;25847:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25963:28;25973:4;25979:2;25983:7;25963:9;:28::i;:::-;25660:339;;;:::o;35464:523::-;35269:1;35255:10;;;;;;;;;;;:15;;;;35247:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;34607:5;35326:14;;35312:11;;:28;;;;:::i;:::-;:40;35304:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;35552:1:::1;35519:8;;;;;;;;;;;:18;;;35538:10;35519:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;:72;;;;35590:1;35557:8;;;;;;;;;;;:18;;;35576:10;35557:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;35519:72;:112;;;;35630:1;35595:10;;;;;;;;;;;:20;;;35616:10;35595:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;35519:112;:153;;;;35671:1;35635:12;;;;;;;;;;;:22;;;35658:10;35635:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;35519:153;:208;;;;35726:1;35683:17;;;;;;;;;;;35676:35;;;35712:10;35676:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;35519:208;35511:272;;;;;;;;;;;;:::i;:::-;;;;;;;;;34490:1;35802:21;35812:10;35802:9;:21::i;:::-;:38;35794:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;35932:1;35915:14;;:18;;;;:::i;:::-;35898:14;:35;;;;35944;35954:10;35967:11;;35965:13;;;;;:::i;:::-;;;;;;;35944:9;:35::i;:::-;35464:523::o:0;38100:366::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38147:13:::1;38163:21;38147:37;;38203:42;38195:60;;:81;38272:3;38267:2;38256:8;:13;;;;:::i;:::-;:19;;;;:::i;:::-;38195:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38295:42;38287:60;;:80;38363:3;38359:1;38348:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;38287:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38386:42;38378:60;;:80;38454:3;38450:1;38439:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;38378:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38136:330;38100:366::o:0;37660:115::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37757:10:::1;37737:17;;:30;;;;;;;;;;;;;;;;;;37660:115:::0;:::o;26070:185::-;26208:39;26225:4;26231:2;26235:7;26208:39;;;;;;;;;;;;:16;:39::i;:::-;26070:185;;;:::o;34498:33::-;;;;:::o;37181:166::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37262:6:::1;37258:81;37274:8;:15;37270:1;:19;37258:81;;;37335:4;37309:10;:23;37320:8;37329:1;37320:11;;;;;;;;:::i;:::-;;;;;;;;37309:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;37291:3;;;;;:::i;:::-;;;;37258:81;;;;37181:166:::0;:::o;37783:93::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37861:7:::1;37848:10;;:20;;;;;;;;;;;;;;;;;;37783:93:::0;:::o;22905:239::-;22977:7;22997:13;23013:7;:16;23021:7;23013:16;;;;;;;;;;;;;;;;;;;;;22997:32;;23065:1;23048:19;;:5;:19;;;;23040:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23131:5;23124:12;;;22905:239;;;:::o;22635:208::-;22707:7;22752:1;22735:19;;:5;:19;;;;22727:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22819:9;:16;22829:5;22819:16;;;;;;;;;;;;;;;;22812:23;;22635: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;36426:325::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34607:5:::1;36538:8;:15;36521:14;;36507:11;;:28;;;;:::i;:::-;:46;;;;:::i;:::-;:59;;36499:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;36608:6;36604:98;36624:8;:15;36620:1;:19;36604:98;;;36659:43;36669:8;36678:1;36669:11;;;;;;;;:::i;:::-;;;;;;;;36700:1;36696;36682:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;36659:9;:43::i;:::-;36641:3;;;;;:::i;:::-;;;;36604:98;;;;36728:8;:15;36713:11;;:30;;;;;;;:::i;:::-;;;;;;;;36426:325:::0;:::o;36759:280::-;36800:4;36856:1;36823:8;;;;;;;;;;;:18;;;36842:10;36823:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;:72;;;;36894:1;36861:8;;;;;;;;;;;:18;;;36880:10;36861:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;36823:72;:112;;;;36934:1;36899:10;;;;;;;;;;;:20;;;36920:10;36899:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;36823:112;:153;;;;36975:1;36939:12;;;;;;;;;;;:22;;;36962:10;36939:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;36823:153;:208;;;;37030:1;36987:17;;;;;;;;;;;36980:35;;;37016:10;36980:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;36823:208;36816:215;;36759:280;:::o;13462:87::-;13508:7;13535:6;;;;;;;;;;;13528:13;;13462:87;:::o;23380:104::-;23436:13;23469:7;23462:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23380:104;:::o;35995:423::-;35269:1;35255:10;;;;;;;;;;;:15;;;;35247:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;34607:5;35326:14;;35312:11;;:28;;;;:::i;:::-;:40;35304:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;36076:1:::1;36067:6;:10;36059:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;34607:5;36155:6;36138:14;;36124:11;;:28;;;;:::i;:::-;:37;;;;:::i;:::-;:50;;36116:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36246:6;34565:9;36233:19;;;;:::i;:::-;36220:9;:32;36212:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36294:6;36290:88;36310:6;36306:1;:10;36290:88;;;36336:42;36346:10;36376:1;36372;36358:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;36336:9;:42::i;:::-;36318:3;;;;;:::i;:::-;;;;36290:88;;;;36404:6;36389:11;;:21;;;;;;;:::i;:::-;;;;;;;;35995:423:::0;:::o;37884:92::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37964:4:::1;37954:7;:14;;;;;;;;;;;;:::i;:::-;;37884:92:::0;:::o;25063:295::-;25178:12;:10;:12::i;:::-;25166:24;;:8;:24;;;;25158:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25278:8;25233:18;:32;25252:12;:10;:12::i;:::-;25233:32;;;;;;;;;;;;;;;:42;25266:8;25233:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25331:8;25302:48;;25317:12;:10;:12::i;:::-;25302:48;;;25341:8;25302:48;;;;;;:::i;:::-;;;;;;;;25063:295;;:::o;26326:328::-;26501:41;26520:12;:10;:12::i;:::-;26534:7;26501:18;:41::i;:::-;26493:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26607:39;26621:4;26627:2;26631:7;26640:5;26607:13;:39::i;:::-;26326:328;;;;:::o;23555:334::-;23628:13;23662:16;23670:7;23662;:16::i;:::-;23654:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23743:21;23767:10;:8;:10::i;:::-;23743:34;;23819:1;23801:7;23795:21;:25;:86;;;;;;;;;;;;;;;;;23847:7;23856:18;:7;:16;:18::i;:::-;23830:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23795:86;23788:93;;;23555:334;;;:::o;25429:164::-;25526:4;25550:18;:25;25569:5;25550:25;;;;;;;;;;;;;;;:35;25576:8;25550:35;;;;;;;;;;;;;;;;;;;;;;;;;25543:42;;25429:164;;;;:::o;37355:168::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37437:6:::1;37433:82;37449:8;:15;37445:1;:19;37433:82;;;37511:4;37484:11;:24;37496:8;37505:1;37496:11;;;;;;;;:::i;:::-;;;;;;;;37484:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;37466:3;;;;;:::i;:::-;;;;37433:82;;;;37355:168:::0;:::o;34687:77::-;;;;;;;;;;;;;:::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;34653:27::-;;;;;;;;;;;;;:::o;15467:157::-;15552:4;15591:25;15576:40;;;:11;:40;;;;15569:47;;15467:157;;;:::o;28164:127::-;28229:4;28281:1;28253:30;;:7;:16;28261:7;28253:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28246:37;;28164:127;;;:::o;602:98::-;655:7;682:10;675:17;;602:98;:::o;32146:174::-;32248:2;32221:15;:24;32237:7;32221:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32304:7;32300:2;32266:46;;32275:23;32290:7;32275:14;:23::i;:::-;32266:46;;;;;;;;;;;;32146:174;;:::o;28458:348::-;28551:4;28576:16;28584:7;28576;:16::i;:::-;28568:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28652:13;28668:23;28683:7;28668:14;:23::i;:::-;28652:39;;28721:5;28710:16;;:7;:16;;;:51;;;;28754:7;28730:31;;:20;28742:7;28730:11;:20::i;:::-;:31;;;28710:51;:87;;;;28765:32;28782:5;28789:7;28765:16;:32::i;:::-;28710:87;28702:96;;;28458:348;;;;:::o;31450:578::-;31609:4;31582:31;;:23;31597:7;31582:14;:23::i;:::-;:31;;;31574:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31692:1;31678:16;;:2;:16;;;;31670:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31748:39;31769:4;31775:2;31779:7;31748:20;:39::i;:::-;31852:29;31869:1;31873:7;31852:8;:29::i;:::-;31913:1;31894:9;:15;31904:4;31894:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31942:1;31925:9;:13;31935:2;31925:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31973:2;31954:7;:16;31962:7;31954:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32012:7;32008:2;31993:27;;32002:4;31993:27;;;;;;;;;;;;31450:578;;;:::o;29148:110::-;29224:26;29234:2;29238:7;29224:26;;;;;;;;;;;;:9;:26::i;:::-;29148:110;;:::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;27536:315::-;27693:28;27703:4;27709:2;27713:7;27693:9;:28::i;:::-;27740:48;27763:4;27769:2;27773:7;27782:5;27740:22;:48::i;:::-;27732:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27536:315;;;;:::o;37984:108::-;38044:13;38077:7;38070:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37984: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;34256:126::-;;;;:::o;29485:321::-;29615:18;29621:2;29625:7;29615:5;:18::i;:::-;29666:54;29697:1;29701:2;29705:7;29714:5;29666:22;:54::i;:::-;29644:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29485:321;;;:::o;32885:799::-;33040:4;33061:15;:2;:13;;;:15::i;:::-;33057:620;;;33113:2;33097:36;;;33134:12;:10;:12::i;:::-;33148:4;33154:7;33163:5;33097:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33093:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33356:1;33339:6;:13;:18;33335:272;;;33382:60;;;;;;;;;;:::i;:::-;;;;;;;;33335:272;33557:6;33551:13;33542:6;33538:2;33534:15;33527:38;33093:529;33230:41;;;33220:51;;;:6;:51;;;;33213:58;;;;;33057:620;33661:4;33654:11;;32885:799;;;;;;;:::o;30142:382::-;30236:1;30222:16;;:2;:16;;;;30214:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30295:16;30303:7;30295;:16::i;:::-;30294:17;30286:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30357:45;30386:1;30390:2;30394:7;30357:20;:45::i;:::-;30432:1;30415:9;:13;30425:2;30415:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30463:2;30444:7;:16;30452:7;30444:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30508:7;30504:2;30483:33;;30500:1;30483:33;;;;;;;;;;;;30142: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:135::-;3608:5;3646:6;3633:20;3624:29;;3662:31;3687:5;3662:31;:::i;:::-;3564:135;;;;:::o;3705:329::-;3764:6;3813:2;3801:9;3792:7;3788:23;3784:32;3781:119;;;3819:79;;:::i;:::-;3781:119;3939:1;3964:53;4009:7;4000:6;3989:9;3985:22;3964:53;:::i;:::-;3954:63;;3910:117;3705:329;;;;:::o;4040:474::-;4108:6;4116;4165:2;4153:9;4144:7;4140:23;4136:32;4133:119;;;4171:79;;:::i;:::-;4133:119;4291:1;4316:53;4361:7;4352:6;4341:9;4337:22;4316:53;:::i;:::-;4306:63;;4262:117;4418:2;4444:53;4489:7;4480:6;4469:9;4465:22;4444:53;:::i;:::-;4434:63;;4389:118;4040:474;;;;;:::o;4520:619::-;4597:6;4605;4613;4662:2;4650:9;4641:7;4637:23;4633:32;4630:119;;;4668:79;;:::i;:::-;4630:119;4788:1;4813:53;4858:7;4849:6;4838:9;4834:22;4813:53;:::i;:::-;4803:63;;4759:117;4915:2;4941:53;4986:7;4977:6;4966:9;4962:22;4941:53;:::i;:::-;4931:63;;4886:118;5043:2;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5014:118;4520:619;;;;;:::o;5145:943::-;5240:6;5248;5256;5264;5313:3;5301:9;5292:7;5288:23;5284:33;5281:120;;;5320:79;;:::i;:::-;5281:120;5440:1;5465:53;5510:7;5501:6;5490:9;5486:22;5465:53;:::i;:::-;5455:63;;5411:117;5567:2;5593:53;5638:7;5629:6;5618:9;5614:22;5593:53;:::i;:::-;5583:63;;5538:118;5695:2;5721:53;5766:7;5757:6;5746:9;5742:22;5721:53;:::i;:::-;5711:63;;5666:118;5851:2;5840:9;5836:18;5823:32;5882:18;5874:6;5871:30;5868:117;;;5904:79;;:::i;:::-;5868:117;6009:62;6063:7;6054:6;6043:9;6039:22;6009:62;:::i;:::-;5999:72;;5794:287;5145:943;;;;;;;:::o;6094:468::-;6159:6;6167;6216:2;6204:9;6195:7;6191:23;6187:32;6184:119;;;6222:79;;:::i;:::-;6184:119;6342:1;6367:53;6412:7;6403:6;6392:9;6388:22;6367:53;:::i;:::-;6357:63;;6313:117;6469:2;6495:50;6537:7;6528:6;6517:9;6513:22;6495:50;:::i;:::-;6485:60;;6440:115;6094:468;;;;;:::o;6568:474::-;6636:6;6644;6693:2;6681:9;6672:7;6668:23;6664:32;6661:119;;;6699:79;;:::i;:::-;6661:119;6819:1;6844:53;6889:7;6880:6;6869:9;6865:22;6844:53;:::i;:::-;6834:63;;6790:117;6946:2;6972:53;7017:7;7008:6;6997:9;6993:22;6972:53;:::i;:::-;6962:63;;6917:118;6568:474;;;;;:::o;7048:539::-;7132:6;7181:2;7169:9;7160:7;7156:23;7152:32;7149:119;;;7187:79;;:::i;:::-;7149:119;7335:1;7324:9;7320:17;7307:31;7365:18;7357:6;7354:30;7351:117;;;7387:79;;:::i;:::-;7351:117;7492:78;7562:7;7553:6;7542:9;7538:22;7492:78;:::i;:::-;7482:88;;7278:302;7048:539;;;;:::o;7593:327::-;7651:6;7700:2;7688:9;7679:7;7675:23;7671:32;7668:119;;;7706:79;;:::i;:::-;7668:119;7826:1;7851:52;7895:7;7886:6;7875:9;7871:22;7851:52;:::i;:::-;7841:62;;7797:116;7593:327;;;;:::o;7926:349::-;7995:6;8044:2;8032:9;8023:7;8019:23;8015:32;8012:119;;;8050:79;;:::i;:::-;8012:119;8170:1;8195:63;8250:7;8241:6;8230:9;8226:22;8195:63;:::i;:::-;8185:73;;8141:127;7926:349;;;;:::o;8281:509::-;8350:6;8399:2;8387:9;8378:7;8374:23;8370:32;8367:119;;;8405:79;;:::i;:::-;8367:119;8553:1;8542:9;8538:17;8525:31;8583:18;8575:6;8572:30;8569:117;;;8605:79;;:::i;:::-;8569:117;8710:63;8765:7;8756:6;8745:9;8741:22;8710:63;:::i;:::-;8700:73;;8496:287;8281:509;;;;:::o;8796:329::-;8855:6;8904:2;8892:9;8883:7;8879:23;8875:32;8872:119;;;8910:79;;:::i;:::-;8872:119;9030:1;9055:53;9100:7;9091:6;9080:9;9076:22;9055:53;:::i;:::-;9045:63;;9001:117;8796:329;;;;:::o;9131:351::-;9201:6;9250:2;9238:9;9229:7;9225:23;9221:32;9218:119;;;9256:79;;:::i;:::-;9218:119;9376:1;9401:64;9457:7;9448:6;9437:9;9433:22;9401:64;:::i;:::-;9391:74;;9347:128;9131:351;;;;:::o;9488:325::-;9545:6;9594:2;9582:9;9573:7;9569:23;9565:32;9562:119;;;9600:79;;:::i;:::-;9562:119;9720:1;9745:51;9788:7;9779:6;9768:9;9764:22;9745:51;:::i;:::-;9735:61;;9691:115;9488:325;;;;:::o;9819:118::-;9906:24;9924:5;9906:24;:::i;:::-;9901:3;9894:37;9819:118;;:::o;9943:109::-;10024:21;10039:5;10024:21;:::i;:::-;10019:3;10012:34;9943:109;;:::o;10058:360::-;10144:3;10172:38;10204:5;10172:38;:::i;:::-;10226:70;10289:6;10284:3;10226:70;:::i;:::-;10219:77;;10305:52;10350:6;10345:3;10338:4;10331:5;10327:16;10305:52;:::i;:::-;10382:29;10404:6;10382:29;:::i;:::-;10377:3;10373:39;10366:46;;10148:270;10058:360;;;;:::o;10424:364::-;10512:3;10540:39;10573:5;10540:39;:::i;:::-;10595:71;10659:6;10654:3;10595:71;:::i;:::-;10588:78;;10675:52;10720:6;10715:3;10708:4;10701:5;10697:16;10675:52;:::i;:::-;10752:29;10774:6;10752:29;:::i;:::-;10747:3;10743:39;10736:46;;10516:272;10424:364;;;;:::o;10794:377::-;10900:3;10928:39;10961:5;10928:39;:::i;:::-;10983:89;11065:6;11060:3;10983:89;:::i;:::-;10976:96;;11081:52;11126:6;11121:3;11114:4;11107:5;11103:16;11081:52;:::i;:::-;11158:6;11153:3;11149:16;11142:23;;10904:267;10794:377;;;;:::o;11177:366::-;11319:3;11340:67;11404:2;11399:3;11340:67;:::i;:::-;11333:74;;11416:93;11505:3;11416:93;:::i;:::-;11534:2;11529:3;11525:12;11518:19;;11177:366;;;:::o;11549:::-;11691:3;11712:67;11776:2;11771:3;11712:67;:::i;:::-;11705:74;;11788:93;11877:3;11788:93;:::i;:::-;11906:2;11901:3;11897:12;11890:19;;11549:366;;;:::o;11921:::-;12063:3;12084:67;12148:2;12143:3;12084:67;:::i;:::-;12077:74;;12160:93;12249:3;12160:93;:::i;:::-;12278:2;12273:3;12269:12;12262:19;;11921:366;;;:::o;12293:::-;12435:3;12456:67;12520:2;12515:3;12456:67;:::i;:::-;12449:74;;12532:93;12621:3;12532:93;:::i;:::-;12650:2;12645:3;12641:12;12634:19;;12293:366;;;:::o;12665:::-;12807:3;12828:67;12892:2;12887:3;12828:67;:::i;:::-;12821:74;;12904:93;12993:3;12904:93;:::i;:::-;13022:2;13017:3;13013:12;13006:19;;12665:366;;;:::o;13037:::-;13179:3;13200:67;13264:2;13259:3;13200:67;:::i;:::-;13193:74;;13276:93;13365:3;13276:93;:::i;:::-;13394:2;13389:3;13385:12;13378:19;;13037:366;;;:::o;13409:::-;13551:3;13572:67;13636:2;13631:3;13572:67;:::i;:::-;13565:74;;13648:93;13737:3;13648:93;:::i;:::-;13766:2;13761:3;13757:12;13750:19;;13409:366;;;:::o;13781:::-;13923:3;13944:67;14008:2;14003:3;13944:67;:::i;:::-;13937:74;;14020:93;14109:3;14020:93;:::i;:::-;14138:2;14133:3;14129:12;14122:19;;13781:366;;;:::o;14153:::-;14295:3;14316:67;14380:2;14375:3;14316:67;:::i;:::-;14309:74;;14392:93;14481:3;14392:93;:::i;:::-;14510:2;14505:3;14501:12;14494:19;;14153:366;;;:::o;14525:::-;14667:3;14688:67;14752:2;14747:3;14688:67;:::i;:::-;14681:74;;14764:93;14853:3;14764:93;:::i;:::-;14882:2;14877:3;14873:12;14866:19;;14525:366;;;:::o;14897:::-;15039:3;15060:67;15124:2;15119:3;15060:67;:::i;:::-;15053:74;;15136:93;15225:3;15136:93;:::i;:::-;15254:2;15249:3;15245:12;15238:19;;14897:366;;;:::o;15269:::-;15411:3;15432:67;15496:2;15491:3;15432:67;:::i;:::-;15425:74;;15508:93;15597:3;15508:93;:::i;:::-;15626:2;15621:3;15617:12;15610:19;;15269:366;;;:::o;15641:::-;15783:3;15804:67;15868:2;15863:3;15804:67;:::i;:::-;15797:74;;15880:93;15969:3;15880:93;:::i;:::-;15998:2;15993:3;15989:12;15982:19;;15641:366;;;:::o;16013:::-;16155:3;16176:67;16240:2;16235:3;16176:67;:::i;:::-;16169:74;;16252:93;16341:3;16252:93;:::i;:::-;16370:2;16365:3;16361:12;16354:19;;16013:366;;;:::o;16385:::-;16527:3;16548:67;16612:2;16607:3;16548:67;:::i;:::-;16541:74;;16624:93;16713:3;16624:93;:::i;:::-;16742:2;16737:3;16733:12;16726:19;;16385:366;;;:::o;16757:::-;16899:3;16920:67;16984:2;16979:3;16920:67;:::i;:::-;16913:74;;16996:93;17085:3;16996:93;:::i;:::-;17114:2;17109:3;17105:12;17098:19;;16757:366;;;:::o;17129:::-;17271:3;17292:67;17356:2;17351:3;17292:67;:::i;:::-;17285:74;;17368:93;17457:3;17368:93;:::i;:::-;17486:2;17481:3;17477:12;17470:19;;17129:366;;;:::o;17501:::-;17643:3;17664:67;17728:2;17723:3;17664:67;:::i;:::-;17657:74;;17740:93;17829:3;17740:93;:::i;:::-;17858:2;17853:3;17849:12;17842:19;;17501:366;;;:::o;17873:::-;18015:3;18036:67;18100:2;18095:3;18036:67;:::i;:::-;18029:74;;18112:93;18201:3;18112:93;:::i;:::-;18230:2;18225:3;18221:12;18214:19;;17873:366;;;:::o;18245:::-;18387:3;18408:67;18472:2;18467:3;18408:67;:::i;:::-;18401:74;;18484:93;18573:3;18484:93;:::i;:::-;18602:2;18597:3;18593:12;18586:19;;18245:366;;;:::o;18617:::-;18759:3;18780:67;18844:2;18839:3;18780:67;:::i;:::-;18773:74;;18856:93;18945:3;18856:93;:::i;:::-;18974:2;18969:3;18965:12;18958:19;;18617:366;;;:::o;18989:::-;19131:3;19152:67;19216:2;19211:3;19152:67;:::i;:::-;19145:74;;19228:93;19317:3;19228:93;:::i;:::-;19346:2;19341:3;19337:12;19330:19;;18989:366;;;:::o;19361:::-;19503:3;19524:67;19588:2;19583:3;19524:67;:::i;:::-;19517:74;;19600:93;19689:3;19600:93;:::i;:::-;19718:2;19713:3;19709:12;19702:19;;19361:366;;;:::o;19733:118::-;19820:24;19838:5;19820:24;:::i;:::-;19815:3;19808:37;19733:118;;:::o;19857:112::-;19940:22;19956:5;19940:22;:::i;:::-;19935:3;19928:35;19857:112;;:::o;19975:435::-;20155:3;20177:95;20268:3;20259:6;20177:95;:::i;:::-;20170:102;;20289:95;20380:3;20371:6;20289:95;:::i;:::-;20282:102;;20401:3;20394:10;;19975:435;;;;;:::o;20416:222::-;20509:4;20547:2;20536:9;20532:18;20524:26;;20560:71;20628:1;20617:9;20613:17;20604:6;20560:71;:::i;:::-;20416:222;;;;:::o;20644:640::-;20839:4;20877:3;20866:9;20862:19;20854:27;;20891:71;20959:1;20948:9;20944:17;20935:6;20891:71;:::i;:::-;20972:72;21040:2;21029:9;21025:18;21016:6;20972:72;:::i;:::-;21054;21122:2;21111:9;21107:18;21098:6;21054:72;:::i;:::-;21173:9;21167:4;21163:20;21158:2;21147:9;21143:18;21136:48;21201:76;21272:4;21263:6;21201:76;:::i;:::-;21193:84;;20644:640;;;;;;;:::o;21290:210::-;21377:4;21415:2;21404:9;21400:18;21392:26;;21428:65;21490:1;21479:9;21475:17;21466:6;21428:65;:::i;:::-;21290:210;;;;:::o;21506:313::-;21619:4;21657:2;21646:9;21642:18;21634:26;;21706:9;21700:4;21696:20;21692:1;21681:9;21677:17;21670:47;21734:78;21807:4;21798:6;21734:78;:::i;:::-;21726:86;;21506:313;;;;:::o;21825:419::-;21991:4;22029:2;22018:9;22014:18;22006:26;;22078:9;22072:4;22068:20;22064:1;22053:9;22049:17;22042:47;22106:131;22232:4;22106:131;:::i;:::-;22098:139;;21825:419;;;:::o;22250:::-;22416:4;22454:2;22443:9;22439:18;22431:26;;22503:9;22497:4;22493:20;22489:1;22478:9;22474:17;22467:47;22531:131;22657:4;22531:131;:::i;:::-;22523:139;;22250:419;;;:::o;22675:::-;22841:4;22879:2;22868:9;22864:18;22856:26;;22928:9;22922:4;22918:20;22914:1;22903:9;22899:17;22892:47;22956:131;23082:4;22956:131;:::i;:::-;22948:139;;22675:419;;;:::o;23100:::-;23266:4;23304:2;23293:9;23289:18;23281:26;;23353:9;23347:4;23343:20;23339:1;23328:9;23324:17;23317:47;23381:131;23507:4;23381:131;:::i;:::-;23373:139;;23100:419;;;:::o;23525:::-;23691:4;23729:2;23718:9;23714:18;23706:26;;23778:9;23772:4;23768:20;23764:1;23753:9;23749:17;23742:47;23806:131;23932:4;23806:131;:::i;:::-;23798:139;;23525:419;;;:::o;23950:::-;24116:4;24154:2;24143:9;24139:18;24131:26;;24203:9;24197:4;24193:20;24189:1;24178:9;24174:17;24167:47;24231:131;24357:4;24231:131;:::i;:::-;24223:139;;23950:419;;;:::o;24375:::-;24541:4;24579:2;24568:9;24564:18;24556:26;;24628:9;24622:4;24618:20;24614:1;24603:9;24599:17;24592:47;24656:131;24782:4;24656:131;:::i;:::-;24648:139;;24375:419;;;:::o;24800:::-;24966:4;25004:2;24993:9;24989:18;24981:26;;25053:9;25047:4;25043:20;25039:1;25028:9;25024:17;25017:47;25081:131;25207:4;25081:131;:::i;:::-;25073:139;;24800:419;;;:::o;25225:::-;25391:4;25429:2;25418:9;25414:18;25406:26;;25478:9;25472:4;25468:20;25464:1;25453:9;25449:17;25442:47;25506:131;25632:4;25506:131;:::i;:::-;25498:139;;25225:419;;;:::o;25650:::-;25816:4;25854:2;25843:9;25839:18;25831:26;;25903:9;25897:4;25893:20;25889:1;25878:9;25874:17;25867:47;25931:131;26057:4;25931:131;:::i;:::-;25923:139;;25650:419;;;:::o;26075:::-;26241:4;26279:2;26268:9;26264:18;26256:26;;26328:9;26322:4;26318:20;26314:1;26303:9;26299:17;26292:47;26356:131;26482:4;26356:131;:::i;:::-;26348:139;;26075:419;;;:::o;26500:::-;26666:4;26704:2;26693:9;26689:18;26681:26;;26753:9;26747:4;26743:20;26739:1;26728:9;26724:17;26717:47;26781:131;26907:4;26781:131;:::i;:::-;26773:139;;26500:419;;;:::o;26925:::-;27091:4;27129:2;27118:9;27114:18;27106:26;;27178:9;27172:4;27168:20;27164:1;27153:9;27149:17;27142:47;27206:131;27332:4;27206:131;:::i;:::-;27198:139;;26925:419;;;:::o;27350:::-;27516:4;27554:2;27543:9;27539:18;27531:26;;27603:9;27597:4;27593:20;27589:1;27578:9;27574:17;27567:47;27631:131;27757:4;27631:131;:::i;:::-;27623:139;;27350:419;;;:::o;27775:::-;27941:4;27979:2;27968:9;27964:18;27956:26;;28028:9;28022:4;28018:20;28014:1;28003:9;27999:17;27992:47;28056:131;28182:4;28056:131;:::i;:::-;28048:139;;27775:419;;;:::o;28200:::-;28366:4;28404:2;28393:9;28389:18;28381:26;;28453:9;28447:4;28443:20;28439:1;28428:9;28424:17;28417:47;28481:131;28607:4;28481:131;:::i;:::-;28473:139;;28200:419;;;:::o;28625:::-;28791:4;28829:2;28818:9;28814:18;28806:26;;28878:9;28872:4;28868:20;28864:1;28853:9;28849:17;28842:47;28906:131;29032:4;28906:131;:::i;:::-;28898:139;;28625:419;;;:::o;29050:::-;29216:4;29254:2;29243:9;29239:18;29231:26;;29303:9;29297:4;29293:20;29289:1;29278:9;29274:17;29267:47;29331:131;29457:4;29331:131;:::i;:::-;29323:139;;29050:419;;;:::o;29475:::-;29641:4;29679:2;29668:9;29664:18;29656:26;;29728:9;29722:4;29718:20;29714:1;29703:9;29699:17;29692:47;29756:131;29882:4;29756:131;:::i;:::-;29748:139;;29475:419;;;:::o;29900:::-;30066:4;30104:2;30093:9;30089:18;30081:26;;30153:9;30147:4;30143:20;30139:1;30128:9;30124:17;30117:47;30181:131;30307:4;30181:131;:::i;:::-;30173:139;;29900:419;;;:::o;30325:::-;30491:4;30529:2;30518:9;30514:18;30506:26;;30578:9;30572:4;30568:20;30564:1;30553:9;30549:17;30542:47;30606:131;30732:4;30606:131;:::i;:::-;30598:139;;30325:419;;;:::o;30750:::-;30916:4;30954:2;30943:9;30939:18;30931:26;;31003:9;30997:4;30993:20;30989:1;30978:9;30974:17;30967:47;31031:131;31157:4;31031:131;:::i;:::-;31023:139;;30750:419;;;:::o;31175:::-;31341:4;31379:2;31368:9;31364:18;31356:26;;31428:9;31422:4;31418:20;31414:1;31403:9;31399:17;31392:47;31456:131;31582:4;31456:131;:::i;:::-;31448:139;;31175:419;;;:::o;31600:222::-;31693:4;31731:2;31720:9;31716:18;31708:26;;31744:71;31812:1;31801:9;31797:17;31788:6;31744:71;:::i;:::-;31600:222;;;;:::o;31828:214::-;31917:4;31955:2;31944:9;31940:18;31932:26;;31968:67;32032:1;32021:9;32017:17;32008:6;31968:67;:::i;:::-;31828:214;;;;:::o;32048:129::-;32082:6;32109:20;;:::i;:::-;32099:30;;32138:33;32166:4;32158:6;32138:33;:::i;:::-;32048:129;;;:::o;32183:75::-;32216:6;32249:2;32243:9;32233:19;;32183:75;:::o;32264:311::-;32341:4;32431:18;32423:6;32420:30;32417:56;;;32453:18;;:::i;:::-;32417:56;32503:4;32495:6;32491:17;32483:25;;32563:4;32557;32553:15;32545:23;;32264:311;;;:::o;32581:307::-;32642:4;32732:18;32724:6;32721:30;32718:56;;;32754:18;;:::i;:::-;32718:56;32792:29;32814:6;32792:29;:::i;:::-;32784:37;;32876:4;32870;32866:15;32858:23;;32581:307;;;:::o;32894:308::-;32956:4;33046:18;33038:6;33035:30;33032:56;;;33068:18;;:::i;:::-;33032:56;33106:29;33128:6;33106:29;:::i;:::-;33098:37;;33190:4;33184;33180:15;33172:23;;32894:308;;;:::o;33208:98::-;33259:6;33293:5;33287:12;33277:22;;33208:98;;;:::o;33312:99::-;33364:6;33398:5;33392:12;33382:22;;33312:99;;;:::o;33417:168::-;33500:11;33534:6;33529:3;33522:19;33574:4;33569:3;33565:14;33550:29;;33417:168;;;;:::o;33591:169::-;33675:11;33709:6;33704:3;33697:19;33749:4;33744:3;33740:14;33725:29;;33591:169;;;;:::o;33766:148::-;33868:11;33905:3;33890:18;;33766:148;;;;:::o;33920:305::-;33960:3;33979:20;33997:1;33979:20;:::i;:::-;33974:25;;34013:20;34031:1;34013:20;:::i;:::-;34008:25;;34167:1;34099:66;34095:74;34092:1;34089:81;34086:107;;;34173:18;;:::i;:::-;34086:107;34217:1;34214;34210:9;34203:16;;33920:305;;;;:::o;34231:185::-;34271:1;34288:20;34306:1;34288:20;:::i;:::-;34283:25;;34322:20;34340:1;34322:20;:::i;:::-;34317:25;;34361:1;34351:35;;34366:18;;:::i;:::-;34351:35;34408:1;34405;34401:9;34396:14;;34231:185;;;;:::o;34422:348::-;34462:7;34485:20;34503:1;34485:20;:::i;:::-;34480:25;;34519:20;34537:1;34519:20;:::i;:::-;34514:25;;34707:1;34639:66;34635:74;34632:1;34629:81;34624:1;34617:9;34610:17;34606:105;34603:131;;;34714:18;;:::i;:::-;34603:131;34762:1;34759;34755:9;34744:20;;34422:348;;;;:::o;34776:191::-;34816:4;34836:20;34854:1;34836:20;:::i;:::-;34831:25;;34870:20;34888:1;34870:20;:::i;:::-;34865:25;;34909:1;34906;34903:8;34900:34;;;34914:18;;:::i;:::-;34900:34;34959:1;34956;34952:9;34944:17;;34776:191;;;;:::o;34973:96::-;35010:7;35039:24;35057:5;35039:24;:::i;:::-;35028:35;;34973:96;;;:::o;35075:90::-;35109:7;35152:5;35145:13;35138:21;35127:32;;35075:90;;;:::o;35171:149::-;35207:7;35247:66;35240:5;35236:78;35225:89;;35171:149;;;:::o;35326:126::-;35363:7;35403:42;35396:5;35392:54;35381:65;;35326:126;;;:::o;35458:77::-;35495:7;35524:5;35513:16;;35458:77;;;:::o;35541:86::-;35576:7;35616:4;35609:5;35605:16;35594:27;;35541:86;;;:::o;35633:154::-;35717:6;35712:3;35707;35694:30;35779:1;35770:6;35765:3;35761:16;35754:27;35633:154;;;:::o;35793:307::-;35861:1;35871:113;35885:6;35882:1;35879:13;35871:113;;;35970:1;35965:3;35961:11;35955:18;35951:1;35946:3;35942:11;35935:39;35907:2;35904:1;35900:10;35895:15;;35871:113;;;36002:6;35999:1;35996:13;35993:101;;;36082:1;36073:6;36068:3;36064:16;36057:27;35993:101;35842:258;35793:307;;;:::o;36106:320::-;36150:6;36187:1;36181:4;36177:12;36167:22;;36234:1;36228:4;36224:12;36255:18;36245:81;;36311:4;36303:6;36299:17;36289:27;;36245:81;36373:2;36365:6;36362:14;36342:18;36339:38;36336:84;;;36392:18;;:::i;:::-;36336:84;36157:269;36106:320;;;:::o;36432:281::-;36515:27;36537:4;36515:27;:::i;:::-;36507:6;36503:40;36645:6;36633:10;36630:22;36609:18;36597:10;36594:34;36591:62;36588:88;;;36656:18;;:::i;:::-;36588:88;36696:10;36692:2;36685:22;36475:238;36432:281;;:::o;36719:233::-;36758:3;36781:24;36799:5;36781:24;:::i;:::-;36772:33;;36827:66;36820:5;36817:77;36814:103;;;36897:18;;:::i;:::-;36814:103;36944:1;36937:5;36933:13;36926:20;;36719:233;;;:::o;36958:176::-;36990:1;37007:20;37025:1;37007:20;:::i;:::-;37002:25;;37041:20;37059:1;37041:20;:::i;:::-;37036:25;;37080:1;37070:35;;37085:18;;:::i;:::-;37070:35;37126:1;37123;37119:9;37114:14;;36958:176;;;;:::o;37140:180::-;37188:77;37185:1;37178:88;37285:4;37282:1;37275:15;37309:4;37306:1;37299:15;37326:180;37374:77;37371:1;37364:88;37471:4;37468:1;37461:15;37495:4;37492:1;37485:15;37512:180;37560:77;37557:1;37550:88;37657:4;37654:1;37647:15;37681:4;37678:1;37671:15;37698:180;37746:77;37743:1;37736:88;37843:4;37840:1;37833:15;37867:4;37864:1;37857:15;37884:180;37932:77;37929:1;37922:88;38029:4;38026:1;38019:15;38053:4;38050:1;38043:15;38070:117;38179:1;38176;38169:12;38193:117;38302:1;38299;38292:12;38316:117;38425:1;38422;38415:12;38439:117;38548:1;38545;38538:12;38562:117;38671:1;38668;38661:12;38685:102;38726:6;38777:2;38773:7;38768:2;38761:5;38757:14;38753:28;38743:38;;38685:102;;;:::o;38793:237::-;38933:34;38929:1;38921:6;38917:14;38910:58;39002:20;38997:2;38989:6;38985:15;38978:45;38793:237;:::o;39036:182::-;39176:34;39172:1;39164:6;39160:14;39153:58;39036:182;:::o;39224:225::-;39364:34;39360:1;39352:6;39348:14;39341:58;39433:8;39428:2;39420:6;39416:15;39409:33;39224:225;:::o;39455:178::-;39595:30;39591:1;39583:6;39579:14;39572:54;39455:178;:::o;39639:238::-;39779:34;39775:1;39767:6;39763:14;39756:58;39848:21;39843:2;39835:6;39831:15;39824:46;39639:238;:::o;39883:223::-;40023:34;40019:1;40011:6;40007:14;40000:58;40092:6;40087:2;40079:6;40075:15;40068:31;39883:223;:::o;40112:175::-;40252:27;40248:1;40240:6;40236:14;40229:51;40112:175;:::o;40293:231::-;40433:34;40429:1;40421:6;40417:14;40410:58;40502:14;40497:2;40489:6;40485:15;40478:39;40293:231;:::o;40530:168::-;40670:20;40666:1;40658:6;40654:14;40647:44;40530:168;:::o;40704:172::-;40844:24;40840:1;40832:6;40828:14;40821:48;40704:172;:::o;40882:243::-;41022:34;41018:1;41010:6;41006:14;40999:58;41091:26;41086:2;41078:6;41074:15;41067:51;40882:243;:::o;41131:229::-;41271:34;41267:1;41259:6;41255:14;41248:58;41340:12;41335:2;41327:6;41323:15;41316:37;41131:229;:::o;41366:228::-;41506:34;41502:1;41494:6;41490:14;41483:58;41575:11;41570:2;41562:6;41558:15;41551:36;41366:228;:::o;41600:182::-;41740:34;41736:1;41728:6;41724:14;41717:58;41600:182;:::o;41788:231::-;41928:34;41924:1;41916:6;41912:14;41905:58;41997:14;41992:2;41984:6;41980:15;41973:39;41788:231;:::o;42025:182::-;42165:34;42161:1;42153:6;42149:14;42142:58;42025:182;:::o;42213:228::-;42353:34;42349:1;42341:6;42337:14;42330:58;42422:11;42417:2;42409:6;42405:15;42398:36;42213:228;:::o;42447:234::-;42587:34;42583:1;42575:6;42571:14;42564:58;42656:17;42651:2;42643:6;42639:15;42632:42;42447:234;:::o;42687:220::-;42827:34;42823:1;42815:6;42811:14;42804:58;42896:3;42891:2;42883:6;42879:15;42872:28;42687:220;:::o;42913:236::-;43053:34;43049:1;43041:6;43037:14;43030:58;43122:19;43117:2;43109:6;43105:15;43098:44;42913:236;:::o;43155:173::-;43295:25;43291:1;43283:6;43279:14;43272:49;43155:173;:::o;43334:177::-;43474:29;43470:1;43462:6;43458:14;43451:53;43334:177;:::o;43517:172::-;43657:24;43653:1;43645:6;43641:14;43634:48;43517:172;:::o;43695:122::-;43768:24;43786:5;43768:24;:::i;:::-;43761:5;43758:35;43748:63;;43807:1;43804;43797:12;43748:63;43695:122;:::o;43823:116::-;43893:21;43908:5;43893:21;:::i;:::-;43886:5;43883:32;43873:60;;43929:1;43926;43919:12;43873:60;43823:116;:::o;43945:120::-;44017:23;44034:5;44017:23;:::i;:::-;44010:5;44007:34;43997:62;;44055:1;44052;44045:12;43997:62;43945:120;:::o;44071:122::-;44144:24;44162:5;44144:24;:::i;:::-;44137:5;44134:35;44124:63;;44183:1;44180;44173:12;44124:63;44071:122;:::o;44199:118::-;44270:22;44286:5;44270:22;:::i;:::-;44263:5;44260:33;44250:61;;44307:1;44304;44297:12;44250:61;44199:118;:::o

Swarm Source

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