ETH Price: $3,482.97 (+2.18%)

Token

Chibi Apes (CHIBIAPE)
 

Overview

Max Total Supply

3,000 CHIBIAPE

Holders

1,776

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
0 CHIBIAPE
0xcf222f77728d8c263fe4fb94d61fec4991689088
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A golden age of apes is arising, one where there are no wars to be fought between nations, but rather just ONE NATION, #ChibiNation that would set them on a course to heal the broken planet as they plot their ascent to the stars.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ChibiApes

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 2021-09-08
*/

// Sources flattened with hardhat v2.6.0 https://hardhat.org

// File @openzeppelin/contracts/utils/[email protected]



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;
    }
}


// File @openzeppelin/contracts/access/[email protected]



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);
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]



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);
}


// File @openzeppelin/contracts/token/ERC721/[email protected]



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;
}


// File @openzeppelin/contracts/token/ERC721/[email protected]



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);
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]



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);
}


// File @openzeppelin/contracts/utils/[email protected]



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);
            }
        }
    }
}


// File @openzeppelin/contracts/utils/[email protected]



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);
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]



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;
    }
}


// File @openzeppelin/contracts/token/ERC721/[email protected]



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 {}
}


// File contracts/ChibiApes.sol



pragma solidity ^0.8.7;


contract ChibiApes is ERC721, Ownable {

    uint public mintPrice = 0.025 ether;
    uint public giveawayMaxItems = 100;
    uint public preMintMaxItems = 300;
    uint public maxItems = 3000;
    uint public giveawayCount = 0;
    uint public preMintCount = 0;
    uint public totalSupply = 0;
    uint public maxItemsPerPreMint = 5; // Mutable by owner
    uint public maxItemsPerTx = 5; // Mutable by owner
    string public _baseTokenURI;
    bool public preMintPaused = true;
    bool public publicMintPaused = true;
    mapping(address => uint) public preMints; // Maps address to how many they can premint

    event Mint(address indexed owner, uint indexed tokenId);

    constructor() ERC721("Chibi Apes", "CHIBIAPE") {}

    receive() external payable {}

    function giveawayMint(address to, uint amount) external onlyOwner {
        require(giveawayCount + amount <= giveawayMaxItems, "giveawayMint: Surpasses cap");
        giveawayCount += amount;
        _mintWithoutValidation(to, amount);
    }

    function preMint() external payable {
        require(!preMintPaused, "preMint: Paused");
        uint remainder = msg.value % mintPrice;
        uint amount = msg.value / mintPrice;
        require(remainder == 0, "preMint: Send a divisible amount of eth");

        require(preMintCount + amount <= preMintMaxItems, "preMint: Surpasses cap");
        require(amount <= preMints[msg.sender], "preMint: Amount greater than allocation");
        preMintCount += amount;
        preMints[msg.sender] -= amount;
        _mintWithoutValidation(msg.sender, amount);
    }

    function publicMint() external payable {
        require(!publicMintPaused, "publicMint: Paused");
        uint remainder = msg.value % mintPrice;
        uint amount = msg.value / mintPrice;
        require(remainder == 0, "publicMint: Send a divisible amount of eth");
        require(amount <= maxItemsPerTx, "publicMint: Max 5 per tx");

        require(totalSupply + amount <= maxItems, "publicMint: Surpasses cap");
        _mintWithoutValidation(msg.sender, amount);
    }

    function _mintWithoutValidation(address to, uint amount) internal {
        require(totalSupply + amount <= maxItems, "mintWithoutValidation: Sold out");
        for (uint i = 0; i < amount; i++) {
            totalSupply += 1;
            _mint(to, totalSupply);
            emit Mint(to, totalSupply);
        }
    }

    // ADMIN FUNCTIONALITY

    function addToWhitelist(address[] memory toAdd) external onlyOwner {
        for(uint i = 0; i < toAdd.length; i++) {
            preMints[toAdd[i]] = maxItemsPerPreMint;
        }
    }

    function setPreMintPaused(bool _preMintPaused) external onlyOwner {
        preMintPaused = _preMintPaused;
    }

    function setPublicMintPaused(bool _publicMintPaused) external onlyOwner {
        publicMintPaused = _publicMintPaused;
    }

    function setMaxItemsPerTx(uint _maxItemsPerTx) external onlyOwner {
        maxItemsPerTx = _maxItemsPerTx;
    }

    function setMaxItemsPerPreMint(uint _maxItemsPerPreMint) external onlyOwner {
        maxItemsPerPreMint = _maxItemsPerPreMint;
    }

    function setBaseTokenURI(string memory __baseTokenURI) external onlyOwner {
        _baseTokenURI = __baseTokenURI;
    }

    /**
     * @dev Withdraw the contract balance to the dev address or splitter address
     */
    function withdrawAll() external onlyOwner {
        uint amount1 = address(this).balance * 825 / 1000;
        uint amount2 = address(this).balance * 175 / 1000;
        sendEth(0xD457adC3B0C658063e2e445b0ab07D2110e715e1, amount1);
        sendEth(0xf415770F7aF765f823296BA7294c6d72217C8Af5, amount2);
    }

    function withdrawToDAO() external onlyOwner {
        sendEth(0xafe8DC11B339Aa7337C71A8869E72eF92B308Ec1, 10 ether);
    }

    function sendEth(address to, uint amount) internal {
        (bool success,) = to.call{value: amount}("");
        require(success, "Failed to send ether");
    }

    // METADATA FUNCTIONALITY

    /**
     * @dev Returns a URI for a given token ID's metadata
     */
    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        return string(abi.encodePacked(_baseTokenURI, Strings.toString(_tokenId)));
    }

}

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":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","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":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"toAdd","type":"address[]"}],"name":"addToWhitelist","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayMaxItems","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"giveawayMint","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":[],"name":"maxItems","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItemsPerPreMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItemsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintMaxItems","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"__baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxItemsPerPreMint","type":"uint256"}],"name":"setMaxItemsPerPreMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxItemsPerTx","type":"uint256"}],"name":"setMaxItemsPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_preMintPaused","type":"bool"}],"name":"setPreMintPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_publicMintPaused","type":"bool"}],"name":"setPublicMintPaused","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":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawToDAO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526658d15e17628000600755606460085561012c600955610bb8600a556000600b556000600c556000600d556005600e556005600f556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055503480156200007c57600080fd5b506040518060400160405280600a81526020017f43686962692041706573000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f434849424941504500000000000000000000000000000000000000000000000081525081600090805190602001906200010192919062000211565b5080600190805190602001906200011a92919062000211565b5050506200013d620001316200014360201b60201c565b6200014b60201b60201c565b62000326565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021f90620002c1565b90600052602060002090601f0160209004810192826200024357600085556200028f565b82601f106200025e57805160ff19168380011785556200028f565b828001600101855582156200028f579182015b828111156200028e57825182559160200191906001019062000271565b5b5090506200029e9190620002a2565b5090565b5b80821115620002bd576000816000905550600101620002a3565b5090565b60006002820490506001821680620002da57607f821691505b60208210811415620002f157620002f0620002f7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61446a80620003366000396000f3fe60806040526004361061023f5760003560e01c806368abfea91161012e578063a59c91b2116100ab578063e985e9c51161006f578063e985e9c514610804578063e9be0f3f14610841578063ea457d0f1461086c578063f2fde38b14610895578063febef226146108be57610246565b8063a59c91b21461071d578063b88d4fde14610748578063c87b56dd14610771578063cfc86f7b146107ae578063d5077b90146107d957610246565b8063853828b6116100f2578063853828b61461065e5780638da5cb5b1461067557806395d89b41146106a0578063a22cb465146106cb578063a4b59a58146106f457610246565b806368abfea91461058d57806370a08231146105b8578063715018a6146105f55780637a4e57151461060c5780637f6497831461063557610246565b806330666a4d116101bc5780633cd29ac8116101805780633cd29ac8146104db57806342842e0e146104e5578063567565ca1461050e5780636352211e146105255780636817c76c1461056257610246565b806330666a4d14610406578063339493481461043157806333d9d5fd1461045a578063391f0f4a146104855780633c010a3e146104b057610246565b80631365b277116102035780631365b2771461034257806318160ddd1461037f57806323b872dd146103aa57806326092b83146103d357806330176e13146103dd57610246565b806301ffc9a71461024b578063048266241461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b31461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190612ebc565b6108e9565b60405161027f919061352c565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190612e06565b6109cb565b005b3480156102bd57600080fd5b506102c6610ac0565b6040516102d39190613547565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190612f5f565b610b52565b60405161031091906134c5565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190612e06565b610bd7565b005b34801561034e57600080fd5b5061036960048036038101906103649190612c83565b610cef565b60405161037691906138a9565b60405180910390f35b34801561038b57600080fd5b50610394610d07565b6040516103a191906138a9565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190612cf0565b610d0d565b005b6103db610d6d565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190612f16565b610ec9565b005b34801561041257600080fd5b5061041b610f5f565b60405161042891906138a9565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190612e8f565b610f65565b005b34801561046657600080fd5b5061046f610ffe565b60405161047c919061352c565b60405180910390f35b34801561049157600080fd5b5061049a611011565b6040516104a791906138a9565b60405180910390f35b3480156104bc57600080fd5b506104c5611017565b6040516104d291906138a9565b60405180910390f35b6104e361101d565b005b3480156104f157600080fd5b5061050c60048036038101906105079190612cf0565b611225565b005b34801561051a57600080fd5b50610523611245565b005b34801561053157600080fd5b5061054c60048036038101906105479190612f5f565b6112e9565b60405161055991906134c5565b60405180910390f35b34801561056e57600080fd5b5061057761139b565b60405161058491906138a9565b60405180910390f35b34801561059957600080fd5b506105a26113a1565b6040516105af919061352c565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190612c83565b6113b4565b6040516105ec91906138a9565b60405180910390f35b34801561060157600080fd5b5061060a61146c565b005b34801561061857600080fd5b50610633600480360381019061062e9190612f5f565b6114f4565b005b34801561064157600080fd5b5061065c60048036038101906106579190612e46565b61157a565b005b34801561066a57600080fd5b50610673611679565b005b34801561068157600080fd5b5061068a611772565b60405161069791906134c5565b60405180910390f35b3480156106ac57600080fd5b506106b561179c565b6040516106c29190613547565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed9190612dc6565b61182e565b005b34801561070057600080fd5b5061071b60048036038101906107169190612f5f565b6119af565b005b34801561072957600080fd5b50610732611a35565b60405161073f91906138a9565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190612d43565b611a3b565b005b34801561077d57600080fd5b5061079860048036038101906107939190612f5f565b611a9d565b6040516107a59190613547565b60405180910390f35b3480156107ba57600080fd5b506107c3611ad1565b6040516107d09190613547565b60405180910390f35b3480156107e557600080fd5b506107ee611b5f565b6040516107fb91906138a9565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190612cb0565b611b65565b604051610838919061352c565b60405180910390f35b34801561084d57600080fd5b50610856611bf9565b60405161086391906138a9565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190612e8f565b611bff565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190612c83565b611c98565b005b3480156108ca57600080fd5b506108d3611d90565b6040516108e091906138a9565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c457506109c382611d96565b5b9050919050565b6109d3611e00565b73ffffffffffffffffffffffffffffffffffffffff166109f1611772565b73ffffffffffffffffffffffffffffffffffffffff1614610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90613789565b60405180910390fd5b60085481600b54610a5891906139da565b1115610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613689565b60405180910390fd5b80600b6000828254610aab91906139da565b92505081905550610abc8282611e08565b5050565b606060008054610acf90613ba5565b80601f0160208091040260200160405190810160405280929190818152602001828054610afb90613ba5565b8015610b485780601f10610b1d57610100808354040283529160200191610b48565b820191906000526020600020905b815481529060010190602001808311610b2b57829003601f168201915b5050505050905090565b6000610b5d82611ee9565b610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613769565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610be2826112e9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90613829565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c72611e00565b73ffffffffffffffffffffffffffffffffffffffff161480610ca15750610ca081610c9b611e00565b611b65565b5b610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd7906136c9565b60405180910390fd5b610cea8383611f55565b505050565b60126020528060005260406000206000915090505481565b600d5481565b610d1e610d18611e00565b8261200e565b610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5490613849565b60405180910390fd5b610d688383836120ec565b505050565b601160019054906101000a900460ff1615610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db4906135c9565b60405180910390fd5b600060075434610dcd9190613c51565b9050600060075434610ddf9190613a30565b905060008214610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90613589565b60405180910390fd5b600f54811115610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090613869565b60405180910390fd5b600a5481600d54610e7a91906139da565b1115610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290613889565b60405180910390fd5b610ec53382611e08565b5050565b610ed1611e00565b73ffffffffffffffffffffffffffffffffffffffff16610eef611772565b73ffffffffffffffffffffffffffffffffffffffff1614610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90613789565b60405180910390fd5b8060109080519060200190610f5b9291906129f9565b5050565b600f5481565b610f6d611e00565b73ffffffffffffffffffffffffffffffffffffffff16610f8b611772565b73ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890613789565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b601160019054906101000a900460ff1681565b600e5481565b600a5481565b601160009054906101000a900460ff161561106d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611064906137a9565b60405180910390fd5b60006007543461107d9190613c51565b905060006007543461108f9190613a30565b9050600082146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90613569565b60405180910390fd5b60095481600c546110e591906139da565b1115611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90613809565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90613729565b60405180910390fd5b80600c60008282546111ba91906139da565b9250508190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112109190613abb565b925050819055506112213382611e08565b5050565b61124083838360405180602001604052806000815250611a3b565b505050565b61124d611e00565b73ffffffffffffffffffffffffffffffffffffffff1661126b611772565b73ffffffffffffffffffffffffffffffffffffffff16146112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613789565b60405180910390fd5b6112e773afe8dc11b339aa7337c71a8869e72ef92b308ec1678ac7230489e80000612348565b565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990613709565b60405180910390fd5b80915050919050565b60075481565b601160009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c906136e9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611474611e00565b73ffffffffffffffffffffffffffffffffffffffff16611492611772565b73ffffffffffffffffffffffffffffffffffffffff16146114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613789565b60405180910390fd5b6114f260006123f9565b565b6114fc611e00565b73ffffffffffffffffffffffffffffffffffffffff1661151a611772565b73ffffffffffffffffffffffffffffffffffffffff1614611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790613789565b60405180910390fd5b80600f8190555050565b611582611e00565b73ffffffffffffffffffffffffffffffffffffffff166115a0611772565b73ffffffffffffffffffffffffffffffffffffffff16146115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613789565b60405180910390fd5b60005b815181101561167557600e546012600084848151811061161c5761161b613d0f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061166d90613c08565b9150506115f9565b5050565b611681611e00565b73ffffffffffffffffffffffffffffffffffffffff1661169f611772565b73ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90613789565b60405180910390fd5b60006103e8610339476117089190613a61565b6117129190613a30565b905060006103e860af476117269190613a61565b6117309190613a30565b905061175073d457adc3b0c658063e2e445b0ab07d2110e715e183612348565b61176e73f415770f7af765f823296ba7294c6d72217c8af582612348565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117ab90613ba5565b80601f01602080910402602001604051908101604052809291908181526020018280546117d790613ba5565b80156118245780601f106117f957610100808354040283529160200191611824565b820191906000526020600020905b81548152906001019060200180831161180757829003601f168201915b5050505050905090565b611836611e00565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b90613669565b60405180910390fd5b80600560006118b1611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661195e611e00565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119a3919061352c565b60405180910390a35050565b6119b7611e00565b73ffffffffffffffffffffffffffffffffffffffff166119d5611772565b73ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290613789565b60405180910390fd5b80600e8190555050565b60095481565b611a4c611a46611e00565b8361200e565b611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613849565b60405180910390fd5b611a97848484846124bf565b50505050565b60606010611aaa8361251b565b604051602001611abb92919061348c565b6040516020818303038152906040529050919050565b60108054611ade90613ba5565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0a90613ba5565b8015611b575780601f10611b2c57610100808354040283529160200191611b57565b820191906000526020600020905b815481529060010190602001808311611b3a57829003601f168201915b505050505081565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b5481565b611c07611e00565b73ffffffffffffffffffffffffffffffffffffffff16611c25611772565b73ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290613789565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b611ca0611e00565b73ffffffffffffffffffffffffffffffffffffffff16611cbe611772565b73ffffffffffffffffffffffffffffffffffffffff1614611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90613789565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b906135e9565b60405180910390fd5b611d8d816123f9565b50565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600a5481600d54611e1991906139da565b1115611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5190613609565b60405180910390fd5b60005b81811015611ee4576001600d6000828254611e7891906139da565b92505081905550611e8b83600d5461267c565b600d548373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a38080611edc90613c08565b915050611e5d565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fc8836112e9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061201982611ee9565b612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204f906136a9565b60405180910390fd5b6000612063836112e9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120d257508373ffffffffffffffffffffffffffffffffffffffff166120ba84610b52565b73ffffffffffffffffffffffffffffffffffffffff16145b806120e357506120e28185611b65565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661210c826112e9565b73ffffffffffffffffffffffffffffffffffffffff1614612162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612159906137e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c990613649565b60405180910390fd5b6121dd83838361284a565b6121e8600082611f55565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122389190613abb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228f91906139da565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161236e906134b0565b60006040518083038185875af1925050503d80600081146123ab576040519150601f19603f3d011682016040523d82523d6000602084013e6123b0565b606091505b50509050806123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906137c9565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124ca8484846120ec565b6124d68484848461284f565b612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c906135a9565b60405180910390fd5b50505050565b60606000821415612563576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612677565b600082905060005b6000821461259557808061257e90613c08565b915050600a8261258e9190613a30565b915061256b565b60008167ffffffffffffffff8111156125b1576125b0613d3e565b5b6040519080825280601f01601f1916602001820160405280156125e35781602001600182028036833780820191505090505b5090505b60008514612670576001826125fc9190613abb565b9150600a8561260b9190613c51565b603061261791906139da565b60f81b81838151811061262d5761262c613d0f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126699190613a30565b94506125e7565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e390613749565b60405180910390fd5b6126f581611ee9565b15612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c90613629565b60405180910390fd5b6127416000838361284a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279191906139da565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b60006128708473ffffffffffffffffffffffffffffffffffffffff166129e6565b156129d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612899611e00565b8786866040518563ffffffff1660e01b81526004016128bb94939291906134e0565b602060405180830381600087803b1580156128d557600080fd5b505af192505050801561290657506040513d601f19601f820116820180604052508101906129039190612ee9565b60015b612989573d8060008114612936576040519150601f19603f3d011682016040523d82523d6000602084013e61293b565b606091505b50600081511415612981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612978906135a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129de565b600190505b949350505050565b600080823b905060008111915050919050565b828054612a0590613ba5565b90600052602060002090601f016020900481019282612a275760008555612a6e565b82601f10612a4057805160ff1916838001178555612a6e565b82800160010185558215612a6e579182015b82811115612a6d578251825591602001919060010190612a52565b5b509050612a7b9190612a7f565b5090565b5b80821115612a98576000816000905550600101612a80565b5090565b6000612aaf612aaa846138e9565b6138c4565b90508083825260208201905082856020860282011115612ad257612ad1613d72565b5b60005b85811015612b025781612ae88882612b90565b845260208401935060208301925050600181019050612ad5565b5050509392505050565b6000612b1f612b1a84613915565b6138c4565b905082815260208101848484011115612b3b57612b3a613d77565b5b612b46848285613b63565b509392505050565b6000612b61612b5c84613946565b6138c4565b905082815260208101848484011115612b7d57612b7c613d77565b5b612b88848285613b63565b509392505050565b600081359050612b9f816143d8565b92915050565b600082601f830112612bba57612bb9613d6d565b5b8135612bca848260208601612a9c565b91505092915050565b600081359050612be2816143ef565b92915050565b600081359050612bf781614406565b92915050565b600081519050612c0c81614406565b92915050565b600082601f830112612c2757612c26613d6d565b5b8135612c37848260208601612b0c565b91505092915050565b600082601f830112612c5557612c54613d6d565b5b8135612c65848260208601612b4e565b91505092915050565b600081359050612c7d8161441d565b92915050565b600060208284031215612c9957612c98613d81565b5b6000612ca784828501612b90565b91505092915050565b60008060408385031215612cc757612cc6613d81565b5b6000612cd585828601612b90565b9250506020612ce685828601612b90565b9150509250929050565b600080600060608486031215612d0957612d08613d81565b5b6000612d1786828701612b90565b9350506020612d2886828701612b90565b9250506040612d3986828701612c6e565b9150509250925092565b60008060008060808587031215612d5d57612d5c613d81565b5b6000612d6b87828801612b90565b9450506020612d7c87828801612b90565b9350506040612d8d87828801612c6e565b925050606085013567ffffffffffffffff811115612dae57612dad613d7c565b5b612dba87828801612c12565b91505092959194509250565b60008060408385031215612ddd57612ddc613d81565b5b6000612deb85828601612b90565b9250506020612dfc85828601612bd3565b9150509250929050565b60008060408385031215612e1d57612e1c613d81565b5b6000612e2b85828601612b90565b9250506020612e3c85828601612c6e565b9150509250929050565b600060208284031215612e5c57612e5b613d81565b5b600082013567ffffffffffffffff811115612e7a57612e79613d7c565b5b612e8684828501612ba5565b91505092915050565b600060208284031215612ea557612ea4613d81565b5b6000612eb384828501612bd3565b91505092915050565b600060208284031215612ed257612ed1613d81565b5b6000612ee084828501612be8565b91505092915050565b600060208284031215612eff57612efe613d81565b5b6000612f0d84828501612bfd565b91505092915050565b600060208284031215612f2c57612f2b613d81565b5b600082013567ffffffffffffffff811115612f4a57612f49613d7c565b5b612f5684828501612c40565b91505092915050565b600060208284031215612f7557612f74613d81565b5b6000612f8384828501612c6e565b91505092915050565b612f9581613aef565b82525050565b612fa481613b01565b82525050565b6000612fb58261398c565b612fbf81856139a2565b9350612fcf818560208601613b72565b612fd881613d86565b840191505092915050565b6000612fee82613997565b612ff881856139be565b9350613008818560208601613b72565b61301181613d86565b840191505092915050565b600061302782613997565b61303181856139cf565b9350613041818560208601613b72565b80840191505092915050565b6000815461305a81613ba5565b61306481866139cf565b9450600182166000811461307f5760018114613090576130c3565b60ff198316865281860193506130c3565b61309985613977565b60005b838110156130bb5781548189015260018201915060208101905061309c565b838801955050505b50505092915050565b60006130d96027836139be565b91506130e482613d97565b604082019050919050565b60006130fc602a836139be565b915061310782613de6565b604082019050919050565b600061311f6032836139be565b915061312a82613e35565b604082019050919050565b60006131426012836139be565b915061314d82613e84565b602082019050919050565b60006131656026836139be565b915061317082613ead565b604082019050919050565b6000613188601f836139be565b915061319382613efc565b602082019050919050565b60006131ab601c836139be565b91506131b682613f25565b602082019050919050565b60006131ce6024836139be565b91506131d982613f4e565b604082019050919050565b60006131f16019836139be565b91506131fc82613f9d565b602082019050919050565b6000613214601b836139be565b915061321f82613fc6565b602082019050919050565b6000613237602c836139be565b915061324282613fef565b604082019050919050565b600061325a6038836139be565b91506132658261403e565b604082019050919050565b600061327d602a836139be565b91506132888261408d565b604082019050919050565b60006132a06029836139be565b91506132ab826140dc565b604082019050919050565b60006132c36027836139be565b91506132ce8261412b565b604082019050919050565b60006132e66020836139be565b91506132f18261417a565b602082019050919050565b6000613309602c836139be565b9150613314826141a3565b604082019050919050565b600061332c6020836139be565b9150613337826141f2565b602082019050919050565b600061334f600f836139be565b915061335a8261421b565b602082019050919050565b60006133726014836139be565b915061337d82614244565b602082019050919050565b60006133956029836139be565b91506133a08261426d565b604082019050919050565b60006133b86016836139be565b91506133c3826142bc565b602082019050919050565b60006133db6021836139be565b91506133e6826142e5565b604082019050919050565b60006133fe6000836139b3565b915061340982614334565b600082019050919050565b60006134216031836139be565b915061342c82614337565b604082019050919050565b60006134446018836139be565b915061344f82614386565b602082019050919050565b60006134676019836139be565b9150613472826143af565b602082019050919050565b61348681613b59565b82525050565b6000613498828561304d565b91506134a4828461301c565b91508190509392505050565b60006134bb826133f1565b9150819050919050565b60006020820190506134da6000830184612f8c565b92915050565b60006080820190506134f56000830187612f8c565b6135026020830186612f8c565b61350f604083018561347d565b81810360608301526135218184612faa565b905095945050505050565b60006020820190506135416000830184612f9b565b92915050565b600060208201905081810360008301526135618184612fe3565b905092915050565b60006020820190508181036000830152613582816130cc565b9050919050565b600060208201905081810360008301526135a2816130ef565b9050919050565b600060208201905081810360008301526135c281613112565b9050919050565b600060208201905081810360008301526135e281613135565b9050919050565b6000602082019050818103600083015261360281613158565b9050919050565b600060208201905081810360008301526136228161317b565b9050919050565b600060208201905081810360008301526136428161319e565b9050919050565b60006020820190508181036000830152613662816131c1565b9050919050565b60006020820190508181036000830152613682816131e4565b9050919050565b600060208201905081810360008301526136a281613207565b9050919050565b600060208201905081810360008301526136c28161322a565b9050919050565b600060208201905081810360008301526136e28161324d565b9050919050565b6000602082019050818103600083015261370281613270565b9050919050565b6000602082019050818103600083015261372281613293565b9050919050565b60006020820190508181036000830152613742816132b6565b9050919050565b60006020820190508181036000830152613762816132d9565b9050919050565b60006020820190508181036000830152613782816132fc565b9050919050565b600060208201905081810360008301526137a28161331f565b9050919050565b600060208201905081810360008301526137c281613342565b9050919050565b600060208201905081810360008301526137e281613365565b9050919050565b6000602082019050818103600083015261380281613388565b9050919050565b60006020820190508181036000830152613822816133ab565b9050919050565b60006020820190508181036000830152613842816133ce565b9050919050565b6000602082019050818103600083015261386281613414565b9050919050565b6000602082019050818103600083015261388281613437565b9050919050565b600060208201905081810360008301526138a28161345a565b9050919050565b60006020820190506138be600083018461347d565b92915050565b60006138ce6138df565b90506138da8282613bd7565b919050565b6000604051905090565b600067ffffffffffffffff82111561390457613903613d3e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156139305761392f613d3e565b5b61393982613d86565b9050602081019050919050565b600067ffffffffffffffff82111561396157613960613d3e565b5b61396a82613d86565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006139e582613b59565b91506139f083613b59565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a2557613a24613c82565b5b828201905092915050565b6000613a3b82613b59565b9150613a4683613b59565b925082613a5657613a55613cb1565b5b828204905092915050565b6000613a6c82613b59565b9150613a7783613b59565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ab057613aaf613c82565b5b828202905092915050565b6000613ac682613b59565b9150613ad183613b59565b925082821015613ae457613ae3613c82565b5b828203905092915050565b6000613afa82613b39565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b90578082015181840152602081019050613b75565b83811115613b9f576000848401525b50505050565b60006002820490506001821680613bbd57607f821691505b60208210811415613bd157613bd0613ce0565b5b50919050565b613be082613d86565b810181811067ffffffffffffffff82111715613bff57613bfe613d3e565b5b80604052505050565b6000613c1382613b59565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c4657613c45613c82565b5b600182019050919050565b6000613c5c82613b59565b9150613c6783613b59565b925082613c7757613c76613cb1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7072654d696e743a2053656e64206120646976697369626c6520616d6f756e7460008201527f206f662065746800000000000000000000000000000000000000000000000000602082015250565b7f7075626c69634d696e743a2053656e64206120646976697369626c6520616d6f60008201527f756e74206f662065746800000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f7075626c69634d696e743a205061757365640000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74576974686f757456616c69646174696f6e3a20536f6c64206f757400600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f67697665617761794d696e743a20537572706173736573206361700000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7072654d696e743a20416d6f756e742067726561746572207468616e20616c6c60008201527f6f636174696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7072654d696e743a205061757365640000000000000000000000000000000000600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f7072654d696e743a205375727061737365732063617000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7075626c69634d696e743a204d61782035207065722074780000000000000000600082015250565b7f7075626c69634d696e743a205375727061737365732063617000000000000000600082015250565b6143e181613aef565b81146143ec57600080fd5b50565b6143f881613b01565b811461440357600080fd5b50565b61440f81613b0d565b811461441a57600080fd5b50565b61442681613b59565b811461443157600080fd5b5056fea26469706673582212204794a9545df329fd1e3e1c49ad624edd0040d4b7104bd75bee142c875ddd153864736f6c63430008070033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806368abfea91161012e578063a59c91b2116100ab578063e985e9c51161006f578063e985e9c514610804578063e9be0f3f14610841578063ea457d0f1461086c578063f2fde38b14610895578063febef226146108be57610246565b8063a59c91b21461071d578063b88d4fde14610748578063c87b56dd14610771578063cfc86f7b146107ae578063d5077b90146107d957610246565b8063853828b6116100f2578063853828b61461065e5780638da5cb5b1461067557806395d89b41146106a0578063a22cb465146106cb578063a4b59a58146106f457610246565b806368abfea91461058d57806370a08231146105b8578063715018a6146105f55780637a4e57151461060c5780637f6497831461063557610246565b806330666a4d116101bc5780633cd29ac8116101805780633cd29ac8146104db57806342842e0e146104e5578063567565ca1461050e5780636352211e146105255780636817c76c1461056257610246565b806330666a4d14610406578063339493481461043157806333d9d5fd1461045a578063391f0f4a146104855780633c010a3e146104b057610246565b80631365b277116102035780631365b2771461034257806318160ddd1461037f57806323b872dd146103aa57806326092b83146103d357806330176e13146103dd57610246565b806301ffc9a71461024b578063048266241461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b31461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190612ebc565b6108e9565b60405161027f919061352c565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190612e06565b6109cb565b005b3480156102bd57600080fd5b506102c6610ac0565b6040516102d39190613547565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190612f5f565b610b52565b60405161031091906134c5565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190612e06565b610bd7565b005b34801561034e57600080fd5b5061036960048036038101906103649190612c83565b610cef565b60405161037691906138a9565b60405180910390f35b34801561038b57600080fd5b50610394610d07565b6040516103a191906138a9565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190612cf0565b610d0d565b005b6103db610d6d565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190612f16565b610ec9565b005b34801561041257600080fd5b5061041b610f5f565b60405161042891906138a9565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190612e8f565b610f65565b005b34801561046657600080fd5b5061046f610ffe565b60405161047c919061352c565b60405180910390f35b34801561049157600080fd5b5061049a611011565b6040516104a791906138a9565b60405180910390f35b3480156104bc57600080fd5b506104c5611017565b6040516104d291906138a9565b60405180910390f35b6104e361101d565b005b3480156104f157600080fd5b5061050c60048036038101906105079190612cf0565b611225565b005b34801561051a57600080fd5b50610523611245565b005b34801561053157600080fd5b5061054c60048036038101906105479190612f5f565b6112e9565b60405161055991906134c5565b60405180910390f35b34801561056e57600080fd5b5061057761139b565b60405161058491906138a9565b60405180910390f35b34801561059957600080fd5b506105a26113a1565b6040516105af919061352c565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190612c83565b6113b4565b6040516105ec91906138a9565b60405180910390f35b34801561060157600080fd5b5061060a61146c565b005b34801561061857600080fd5b50610633600480360381019061062e9190612f5f565b6114f4565b005b34801561064157600080fd5b5061065c60048036038101906106579190612e46565b61157a565b005b34801561066a57600080fd5b50610673611679565b005b34801561068157600080fd5b5061068a611772565b60405161069791906134c5565b60405180910390f35b3480156106ac57600080fd5b506106b561179c565b6040516106c29190613547565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed9190612dc6565b61182e565b005b34801561070057600080fd5b5061071b60048036038101906107169190612f5f565b6119af565b005b34801561072957600080fd5b50610732611a35565b60405161073f91906138a9565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190612d43565b611a3b565b005b34801561077d57600080fd5b5061079860048036038101906107939190612f5f565b611a9d565b6040516107a59190613547565b60405180910390f35b3480156107ba57600080fd5b506107c3611ad1565b6040516107d09190613547565b60405180910390f35b3480156107e557600080fd5b506107ee611b5f565b6040516107fb91906138a9565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190612cb0565b611b65565b604051610838919061352c565b60405180910390f35b34801561084d57600080fd5b50610856611bf9565b60405161086391906138a9565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190612e8f565b611bff565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190612c83565b611c98565b005b3480156108ca57600080fd5b506108d3611d90565b6040516108e091906138a9565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c457506109c382611d96565b5b9050919050565b6109d3611e00565b73ffffffffffffffffffffffffffffffffffffffff166109f1611772565b73ffffffffffffffffffffffffffffffffffffffff1614610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90613789565b60405180910390fd5b60085481600b54610a5891906139da565b1115610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613689565b60405180910390fd5b80600b6000828254610aab91906139da565b92505081905550610abc8282611e08565b5050565b606060008054610acf90613ba5565b80601f0160208091040260200160405190810160405280929190818152602001828054610afb90613ba5565b8015610b485780601f10610b1d57610100808354040283529160200191610b48565b820191906000526020600020905b815481529060010190602001808311610b2b57829003601f168201915b5050505050905090565b6000610b5d82611ee9565b610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613769565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610be2826112e9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90613829565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c72611e00565b73ffffffffffffffffffffffffffffffffffffffff161480610ca15750610ca081610c9b611e00565b611b65565b5b610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd7906136c9565b60405180910390fd5b610cea8383611f55565b505050565b60126020528060005260406000206000915090505481565b600d5481565b610d1e610d18611e00565b8261200e565b610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5490613849565b60405180910390fd5b610d688383836120ec565b505050565b601160019054906101000a900460ff1615610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db4906135c9565b60405180910390fd5b600060075434610dcd9190613c51565b9050600060075434610ddf9190613a30565b905060008214610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90613589565b60405180910390fd5b600f54811115610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090613869565b60405180910390fd5b600a5481600d54610e7a91906139da565b1115610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290613889565b60405180910390fd5b610ec53382611e08565b5050565b610ed1611e00565b73ffffffffffffffffffffffffffffffffffffffff16610eef611772565b73ffffffffffffffffffffffffffffffffffffffff1614610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90613789565b60405180910390fd5b8060109080519060200190610f5b9291906129f9565b5050565b600f5481565b610f6d611e00565b73ffffffffffffffffffffffffffffffffffffffff16610f8b611772565b73ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890613789565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b601160019054906101000a900460ff1681565b600e5481565b600a5481565b601160009054906101000a900460ff161561106d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611064906137a9565b60405180910390fd5b60006007543461107d9190613c51565b905060006007543461108f9190613a30565b9050600082146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90613569565b60405180910390fd5b60095481600c546110e591906139da565b1115611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90613809565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90613729565b60405180910390fd5b80600c60008282546111ba91906139da565b9250508190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112109190613abb565b925050819055506112213382611e08565b5050565b61124083838360405180602001604052806000815250611a3b565b505050565b61124d611e00565b73ffffffffffffffffffffffffffffffffffffffff1661126b611772565b73ffffffffffffffffffffffffffffffffffffffff16146112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613789565b60405180910390fd5b6112e773afe8dc11b339aa7337c71a8869e72ef92b308ec1678ac7230489e80000612348565b565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990613709565b60405180910390fd5b80915050919050565b60075481565b601160009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c906136e9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611474611e00565b73ffffffffffffffffffffffffffffffffffffffff16611492611772565b73ffffffffffffffffffffffffffffffffffffffff16146114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613789565b60405180910390fd5b6114f260006123f9565b565b6114fc611e00565b73ffffffffffffffffffffffffffffffffffffffff1661151a611772565b73ffffffffffffffffffffffffffffffffffffffff1614611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790613789565b60405180910390fd5b80600f8190555050565b611582611e00565b73ffffffffffffffffffffffffffffffffffffffff166115a0611772565b73ffffffffffffffffffffffffffffffffffffffff16146115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613789565b60405180910390fd5b60005b815181101561167557600e546012600084848151811061161c5761161b613d0f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061166d90613c08565b9150506115f9565b5050565b611681611e00565b73ffffffffffffffffffffffffffffffffffffffff1661169f611772565b73ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90613789565b60405180910390fd5b60006103e8610339476117089190613a61565b6117129190613a30565b905060006103e860af476117269190613a61565b6117309190613a30565b905061175073d457adc3b0c658063e2e445b0ab07d2110e715e183612348565b61176e73f415770f7af765f823296ba7294c6d72217c8af582612348565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117ab90613ba5565b80601f01602080910402602001604051908101604052809291908181526020018280546117d790613ba5565b80156118245780601f106117f957610100808354040283529160200191611824565b820191906000526020600020905b81548152906001019060200180831161180757829003601f168201915b5050505050905090565b611836611e00565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b90613669565b60405180910390fd5b80600560006118b1611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661195e611e00565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119a3919061352c565b60405180910390a35050565b6119b7611e00565b73ffffffffffffffffffffffffffffffffffffffff166119d5611772565b73ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290613789565b60405180910390fd5b80600e8190555050565b60095481565b611a4c611a46611e00565b8361200e565b611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613849565b60405180910390fd5b611a97848484846124bf565b50505050565b60606010611aaa8361251b565b604051602001611abb92919061348c565b6040516020818303038152906040529050919050565b60108054611ade90613ba5565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0a90613ba5565b8015611b575780601f10611b2c57610100808354040283529160200191611b57565b820191906000526020600020905b815481529060010190602001808311611b3a57829003601f168201915b505050505081565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b5481565b611c07611e00565b73ffffffffffffffffffffffffffffffffffffffff16611c25611772565b73ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290613789565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b611ca0611e00565b73ffffffffffffffffffffffffffffffffffffffff16611cbe611772565b73ffffffffffffffffffffffffffffffffffffffff1614611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90613789565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b906135e9565b60405180910390fd5b611d8d816123f9565b50565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600a5481600d54611e1991906139da565b1115611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5190613609565b60405180910390fd5b60005b81811015611ee4576001600d6000828254611e7891906139da565b92505081905550611e8b83600d5461267c565b600d548373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a38080611edc90613c08565b915050611e5d565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fc8836112e9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061201982611ee9565b612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204f906136a9565b60405180910390fd5b6000612063836112e9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120d257508373ffffffffffffffffffffffffffffffffffffffff166120ba84610b52565b73ffffffffffffffffffffffffffffffffffffffff16145b806120e357506120e28185611b65565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661210c826112e9565b73ffffffffffffffffffffffffffffffffffffffff1614612162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612159906137e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c990613649565b60405180910390fd5b6121dd83838361284a565b6121e8600082611f55565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122389190613abb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228f91906139da565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161236e906134b0565b60006040518083038185875af1925050503d80600081146123ab576040519150601f19603f3d011682016040523d82523d6000602084013e6123b0565b606091505b50509050806123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906137c9565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124ca8484846120ec565b6124d68484848461284f565b612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c906135a9565b60405180910390fd5b50505050565b60606000821415612563576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612677565b600082905060005b6000821461259557808061257e90613c08565b915050600a8261258e9190613a30565b915061256b565b60008167ffffffffffffffff8111156125b1576125b0613d3e565b5b6040519080825280601f01601f1916602001820160405280156125e35781602001600182028036833780820191505090505b5090505b60008514612670576001826125fc9190613abb565b9150600a8561260b9190613c51565b603061261791906139da565b60f81b81838151811061262d5761262c613d0f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126699190613a30565b94506125e7565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e390613749565b60405180910390fd5b6126f581611ee9565b15612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c90613629565b60405180910390fd5b6127416000838361284a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279191906139da565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b60006128708473ffffffffffffffffffffffffffffffffffffffff166129e6565b156129d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612899611e00565b8786866040518563ffffffff1660e01b81526004016128bb94939291906134e0565b602060405180830381600087803b1580156128d557600080fd5b505af192505050801561290657506040513d601f19601f820116820180604052508101906129039190612ee9565b60015b612989573d8060008114612936576040519150601f19603f3d011682016040523d82523d6000602084013e61293b565b606091505b50600081511415612981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612978906135a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129de565b600190505b949350505050565b600080823b905060008111915050919050565b828054612a0590613ba5565b90600052602060002090601f016020900481019282612a275760008555612a6e565b82601f10612a4057805160ff1916838001178555612a6e565b82800160010185558215612a6e579182015b82811115612a6d578251825591602001919060010190612a52565b5b509050612a7b9190612a7f565b5090565b5b80821115612a98576000816000905550600101612a80565b5090565b6000612aaf612aaa846138e9565b6138c4565b90508083825260208201905082856020860282011115612ad257612ad1613d72565b5b60005b85811015612b025781612ae88882612b90565b845260208401935060208301925050600181019050612ad5565b5050509392505050565b6000612b1f612b1a84613915565b6138c4565b905082815260208101848484011115612b3b57612b3a613d77565b5b612b46848285613b63565b509392505050565b6000612b61612b5c84613946565b6138c4565b905082815260208101848484011115612b7d57612b7c613d77565b5b612b88848285613b63565b509392505050565b600081359050612b9f816143d8565b92915050565b600082601f830112612bba57612bb9613d6d565b5b8135612bca848260208601612a9c565b91505092915050565b600081359050612be2816143ef565b92915050565b600081359050612bf781614406565b92915050565b600081519050612c0c81614406565b92915050565b600082601f830112612c2757612c26613d6d565b5b8135612c37848260208601612b0c565b91505092915050565b600082601f830112612c5557612c54613d6d565b5b8135612c65848260208601612b4e565b91505092915050565b600081359050612c7d8161441d565b92915050565b600060208284031215612c9957612c98613d81565b5b6000612ca784828501612b90565b91505092915050565b60008060408385031215612cc757612cc6613d81565b5b6000612cd585828601612b90565b9250506020612ce685828601612b90565b9150509250929050565b600080600060608486031215612d0957612d08613d81565b5b6000612d1786828701612b90565b9350506020612d2886828701612b90565b9250506040612d3986828701612c6e565b9150509250925092565b60008060008060808587031215612d5d57612d5c613d81565b5b6000612d6b87828801612b90565b9450506020612d7c87828801612b90565b9350506040612d8d87828801612c6e565b925050606085013567ffffffffffffffff811115612dae57612dad613d7c565b5b612dba87828801612c12565b91505092959194509250565b60008060408385031215612ddd57612ddc613d81565b5b6000612deb85828601612b90565b9250506020612dfc85828601612bd3565b9150509250929050565b60008060408385031215612e1d57612e1c613d81565b5b6000612e2b85828601612b90565b9250506020612e3c85828601612c6e565b9150509250929050565b600060208284031215612e5c57612e5b613d81565b5b600082013567ffffffffffffffff811115612e7a57612e79613d7c565b5b612e8684828501612ba5565b91505092915050565b600060208284031215612ea557612ea4613d81565b5b6000612eb384828501612bd3565b91505092915050565b600060208284031215612ed257612ed1613d81565b5b6000612ee084828501612be8565b91505092915050565b600060208284031215612eff57612efe613d81565b5b6000612f0d84828501612bfd565b91505092915050565b600060208284031215612f2c57612f2b613d81565b5b600082013567ffffffffffffffff811115612f4a57612f49613d7c565b5b612f5684828501612c40565b91505092915050565b600060208284031215612f7557612f74613d81565b5b6000612f8384828501612c6e565b91505092915050565b612f9581613aef565b82525050565b612fa481613b01565b82525050565b6000612fb58261398c565b612fbf81856139a2565b9350612fcf818560208601613b72565b612fd881613d86565b840191505092915050565b6000612fee82613997565b612ff881856139be565b9350613008818560208601613b72565b61301181613d86565b840191505092915050565b600061302782613997565b61303181856139cf565b9350613041818560208601613b72565b80840191505092915050565b6000815461305a81613ba5565b61306481866139cf565b9450600182166000811461307f5760018114613090576130c3565b60ff198316865281860193506130c3565b61309985613977565b60005b838110156130bb5781548189015260018201915060208101905061309c565b838801955050505b50505092915050565b60006130d96027836139be565b91506130e482613d97565b604082019050919050565b60006130fc602a836139be565b915061310782613de6565b604082019050919050565b600061311f6032836139be565b915061312a82613e35565b604082019050919050565b60006131426012836139be565b915061314d82613e84565b602082019050919050565b60006131656026836139be565b915061317082613ead565b604082019050919050565b6000613188601f836139be565b915061319382613efc565b602082019050919050565b60006131ab601c836139be565b91506131b682613f25565b602082019050919050565b60006131ce6024836139be565b91506131d982613f4e565b604082019050919050565b60006131f16019836139be565b91506131fc82613f9d565b602082019050919050565b6000613214601b836139be565b915061321f82613fc6565b602082019050919050565b6000613237602c836139be565b915061324282613fef565b604082019050919050565b600061325a6038836139be565b91506132658261403e565b604082019050919050565b600061327d602a836139be565b91506132888261408d565b604082019050919050565b60006132a06029836139be565b91506132ab826140dc565b604082019050919050565b60006132c36027836139be565b91506132ce8261412b565b604082019050919050565b60006132e66020836139be565b91506132f18261417a565b602082019050919050565b6000613309602c836139be565b9150613314826141a3565b604082019050919050565b600061332c6020836139be565b9150613337826141f2565b602082019050919050565b600061334f600f836139be565b915061335a8261421b565b602082019050919050565b60006133726014836139be565b915061337d82614244565b602082019050919050565b60006133956029836139be565b91506133a08261426d565b604082019050919050565b60006133b86016836139be565b91506133c3826142bc565b602082019050919050565b60006133db6021836139be565b91506133e6826142e5565b604082019050919050565b60006133fe6000836139b3565b915061340982614334565b600082019050919050565b60006134216031836139be565b915061342c82614337565b604082019050919050565b60006134446018836139be565b915061344f82614386565b602082019050919050565b60006134676019836139be565b9150613472826143af565b602082019050919050565b61348681613b59565b82525050565b6000613498828561304d565b91506134a4828461301c565b91508190509392505050565b60006134bb826133f1565b9150819050919050565b60006020820190506134da6000830184612f8c565b92915050565b60006080820190506134f56000830187612f8c565b6135026020830186612f8c565b61350f604083018561347d565b81810360608301526135218184612faa565b905095945050505050565b60006020820190506135416000830184612f9b565b92915050565b600060208201905081810360008301526135618184612fe3565b905092915050565b60006020820190508181036000830152613582816130cc565b9050919050565b600060208201905081810360008301526135a2816130ef565b9050919050565b600060208201905081810360008301526135c281613112565b9050919050565b600060208201905081810360008301526135e281613135565b9050919050565b6000602082019050818103600083015261360281613158565b9050919050565b600060208201905081810360008301526136228161317b565b9050919050565b600060208201905081810360008301526136428161319e565b9050919050565b60006020820190508181036000830152613662816131c1565b9050919050565b60006020820190508181036000830152613682816131e4565b9050919050565b600060208201905081810360008301526136a281613207565b9050919050565b600060208201905081810360008301526136c28161322a565b9050919050565b600060208201905081810360008301526136e28161324d565b9050919050565b6000602082019050818103600083015261370281613270565b9050919050565b6000602082019050818103600083015261372281613293565b9050919050565b60006020820190508181036000830152613742816132b6565b9050919050565b60006020820190508181036000830152613762816132d9565b9050919050565b60006020820190508181036000830152613782816132fc565b9050919050565b600060208201905081810360008301526137a28161331f565b9050919050565b600060208201905081810360008301526137c281613342565b9050919050565b600060208201905081810360008301526137e281613365565b9050919050565b6000602082019050818103600083015261380281613388565b9050919050565b60006020820190508181036000830152613822816133ab565b9050919050565b60006020820190508181036000830152613842816133ce565b9050919050565b6000602082019050818103600083015261386281613414565b9050919050565b6000602082019050818103600083015261388281613437565b9050919050565b600060208201905081810360008301526138a28161345a565b9050919050565b60006020820190506138be600083018461347d565b92915050565b60006138ce6138df565b90506138da8282613bd7565b919050565b6000604051905090565b600067ffffffffffffffff82111561390457613903613d3e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156139305761392f613d3e565b5b61393982613d86565b9050602081019050919050565b600067ffffffffffffffff82111561396157613960613d3e565b5b61396a82613d86565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006139e582613b59565b91506139f083613b59565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a2557613a24613c82565b5b828201905092915050565b6000613a3b82613b59565b9150613a4683613b59565b925082613a5657613a55613cb1565b5b828204905092915050565b6000613a6c82613b59565b9150613a7783613b59565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ab057613aaf613c82565b5b828202905092915050565b6000613ac682613b59565b9150613ad183613b59565b925082821015613ae457613ae3613c82565b5b828203905092915050565b6000613afa82613b39565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b90578082015181840152602081019050613b75565b83811115613b9f576000848401525b50505050565b60006002820490506001821680613bbd57607f821691505b60208210811415613bd157613bd0613ce0565b5b50919050565b613be082613d86565b810181811067ffffffffffffffff82111715613bff57613bfe613d3e565b5b80604052505050565b6000613c1382613b59565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c4657613c45613c82565b5b600182019050919050565b6000613c5c82613b59565b9150613c6783613b59565b925082613c7757613c76613cb1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7072654d696e743a2053656e64206120646976697369626c6520616d6f756e7460008201527f206f662065746800000000000000000000000000000000000000000000000000602082015250565b7f7075626c69634d696e743a2053656e64206120646976697369626c6520616d6f60008201527f756e74206f662065746800000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f7075626c69634d696e743a205061757365640000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74576974686f757456616c69646174696f6e3a20536f6c64206f757400600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f67697665617761794d696e743a20537572706173736573206361700000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7072654d696e743a20416d6f756e742067726561746572207468616e20616c6c60008201527f6f636174696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7072654d696e743a205061757365640000000000000000000000000000000000600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f7072654d696e743a205375727061737365732063617000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7075626c69634d696e743a204d61782035207065722074780000000000000000600082015250565b7f7075626c69634d696e743a205375727061737365732063617000000000000000600082015250565b6143e181613aef565b81146143ec57600080fd5b50565b6143f881613b01565b811461440357600080fd5b50565b61440f81613b0d565b811461441a57600080fd5b50565b61442681613b59565b811461443157600080fd5b5056fea26469706673582212204794a9545df329fd1e3e1c49ad624edd0040d4b7104bd75bee142c875ddd153864736f6c63430008070033

Deployed Bytecode Sourcemap

35248:4359:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23055:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36041:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24000:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25559:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25082:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35789:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35523:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26449:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36880:488;;;:::i;:::-;;38462:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35618:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38061:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35747:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35557:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35418:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36295:577;;;:::i;:::-;;26859:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39013:124;;;;;;;;;;;;;:::i;:::-;;23694:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35295:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35708:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23424:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2564:94;;;;;;;;;;;;;:::i;:::-;;38196:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37740:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38693:312;;;;;;;;;;;;;:::i;:::-;;1913:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24169:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25852:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38319:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35378:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27115:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39428:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35674:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35337:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26218:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35452:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37938:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2813:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35488:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23055:305;23157:4;23209:25;23194:40;;;:11;:40;;;;:105;;;;23266:33;23251:48;;;:11;:48;;;;23194:105;:158;;;;23316:36;23340:11;23316:23;:36::i;:::-;23194:158;23174:178;;23055:305;;;:::o;36041:246::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36152:16:::1;;36142:6;36126:13;;:22;;;;:::i;:::-;:42;;36118:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;36228:6;36211:13;;:23;;;;;;;:::i;:::-;;;;;;;;36245:34;36268:2;36272:6;36245:22;:34::i;:::-;36041:246:::0;;:::o;24000:100::-;24054:13;24087:5;24080:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24000:100;:::o;25559:221::-;25635:7;25663:16;25671:7;25663;:16::i;:::-;25655:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25748:15;:24;25764:7;25748:24;;;;;;;;;;;;;;;;;;;;;25741:31;;25559:221;;;:::o;25082:411::-;25163:13;25179:23;25194:7;25179:14;:23::i;:::-;25163:39;;25227:5;25221:11;;:2;:11;;;;25213:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25321:5;25305:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25330:37;25347:5;25354:12;:10;:12::i;:::-;25330:16;:37::i;:::-;25305:62;25283:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25464:21;25473:2;25477:7;25464:8;:21::i;:::-;25152:341;25082:411;;:::o;35789:40::-;;;;;;;;;;;;;;;;;:::o;35523:27::-;;;;:::o;26449:339::-;26644:41;26663:12;:10;:12::i;:::-;26677:7;26644:18;:41::i;:::-;26636:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26752:28;26762:4;26768:2;26772:7;26752:9;:28::i;:::-;26449:339;;;:::o;36880:488::-;36939:16;;;;;;;;;;;36938:17;36930:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;36989:14;37018:9;;37006;:21;;;;:::i;:::-;36989:38;;37038:11;37064:9;;37052;:21;;;;:::i;:::-;37038:35;;37105:1;37092:9;:14;37084:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;37182:13;;37172:6;:23;;37164:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37269:8;;37259:6;37245:11;;:20;;;;:::i;:::-;:32;;37237:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37318:42;37341:10;37353:6;37318:22;:42::i;:::-;36919:449;;36880:488::o;38462:123::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38563:14:::1;38547:13;:30;;;;;;;;;;;;:::i;:::-;;38462:123:::0;:::o;35618:29::-;;;;:::o;38061:127::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38163:17:::1;38144:16;;:36;;;;;;;;;;;;;;;;;;38061:127:::0;:::o;35747:35::-;;;;;;;;;;;;;:::o;35557:34::-;;;;:::o;35418:27::-;;;;:::o;36295:577::-;36351:13;;;;;;;;;;;36350:14;36342:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;36395:14;36424:9;;36412;:21;;;;:::i;:::-;36395:38;;36444:11;36470:9;;36458;:21;;;;:::i;:::-;36444:35;;36511:1;36498:9;:14;36490:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36602:15;;36592:6;36577:12;;:21;;;;:::i;:::-;:40;;36569:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;36673:8;:20;36682:10;36673:20;;;;;;;;;;;;;;;;36663:6;:30;;36655:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;36764:6;36748:12;;:22;;;;;;;:::i;:::-;;;;;;;;36805:6;36781:8;:20;36790:10;36781:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;36822:42;36845:10;36857:6;36822:22;:42::i;:::-;36331:541;;36295:577::o;26859:185::-;26997:39;27014:4;27020:2;27024:7;26997:39;;;;;;;;;;;;:16;:39::i;:::-;26859:185;;;:::o;39013:124::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39068:61:::1;39076:42;39120:8;39068:7;:61::i;:::-;39013:124::o:0;23694:239::-;23766:7;23786:13;23802:7;:16;23810:7;23802:16;;;;;;;;;;;;;;;;;;;;;23786:32;;23854:1;23837:19;;:5;:19;;;;23829:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23920:5;23913:12;;;23694:239;;;:::o;35295:35::-;;;;:::o;35708:32::-;;;;;;;;;;;;;:::o;23424:208::-;23496:7;23541:1;23524:19;;:5;:19;;;;23516:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23608:9;:16;23618:5;23608:16;;;;;;;;;;;;;;;;23601:23;;23424:208;;;:::o;2564:94::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2629:21:::1;2647:1;2629:9;:21::i;:::-;2564:94::o:0;38196:115::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38289:14:::1;38273:13;:30;;;;38196:115:::0;:::o;37740:190::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37822:6:::1;37818:105;37838:5;:12;37834:1;:16;37818:105;;;37893:18;;37872:8;:18;37881:5;37887:1;37881:8;;;;;;;;:::i;:::-;;;;;;;;37872:18;;;;;;;;;;;;;;;:39;;;;37852:3;;;;;:::i;:::-;;;;37818:105;;;;37740:190:::0;:::o;38693:312::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38746:12:::1;38791:4;38785:3;38761:21;:27;;;;:::i;:::-;:34;;;;:::i;:::-;38746:49;;38806:12;38851:4;38845:3;38821:21;:27;;;;:::i;:::-;:34;;;;:::i;:::-;38806:49;;38866:60;38874:42;38918:7;38866;:60::i;:::-;38937;38945:42;38989:7;38937;:60::i;:::-;38735:270;;38693:312::o:0;1913:87::-;1959:7;1986:6;;;;;;;;;;;1979:13;;1913:87;:::o;24169:104::-;24225:13;24258:7;24251:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24169:104;:::o;25852:295::-;25967:12;:10;:12::i;:::-;25955:24;;:8;:24;;;;25947:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26067:8;26022:18;:32;26041:12;:10;:12::i;:::-;26022:32;;;;;;;;;;;;;;;:42;26055:8;26022:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26120:8;26091:48;;26106:12;:10;:12::i;:::-;26091:48;;;26130:8;26091:48;;;;;;:::i;:::-;;;;;;;;25852:295;;:::o;38319:135::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38427:19:::1;38406:18;:40;;;;38319:135:::0;:::o;35378:33::-;;;;:::o;27115:328::-;27290:41;27309:12;:10;:12::i;:::-;27323:7;27290:18;:41::i;:::-;27282:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27396:39;27410:4;27416:2;27420:7;27429:5;27396:13;:39::i;:::-;27115:328;;;;:::o;39428:174::-;39494:13;39551;39566:26;39583:8;39566:16;:26::i;:::-;39534:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39520:74;;39428:174;;;:::o;35674:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35337:34::-;;;;:::o;26218:164::-;26315:4;26339:18;:25;26358:5;26339:25;;;;;;;;;;;;;;;:35;26365:8;26339:35;;;;;;;;;;;;;;;;;;;;;;;;;26332:42;;26218:164;;;;:::o;35452:29::-;;;;:::o;37938:115::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38031:14:::1;38015:13;;:30;;;;;;;;;;;;;;;;;;37938:115:::0;:::o;2813:192::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2922:1:::1;2902:22;;:8;:22;;;;2894:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2978:19;2988:8;2978:9;:19::i;:::-;2813:192:::0;:::o;35488:28::-;;;;:::o;21553:157::-;21638:4;21677:25;21662:40;;;:11;:40;;;;21655:47;;21553:157;;;:::o;695:98::-;748:7;775:10;768:17;;695:98;:::o;37376:326::-;37485:8;;37475:6;37461:11;;:20;;;;:::i;:::-;:32;;37453:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37545:6;37540:155;37561:6;37557:1;:10;37540:155;;;37604:1;37589:11;;:16;;;;;;;:::i;:::-;;;;;;;;37620:22;37626:2;37630:11;;37620:5;:22::i;:::-;37671:11;;37667:2;37662:21;;;;;;;;;;;;37569:3;;;;;:::i;:::-;;;;37540:155;;;;37376:326;;:::o;28953:127::-;29018:4;29070:1;29042:30;;:7;:16;29050:7;29042:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29035:37;;28953:127;;;:::o;32935:174::-;33037:2;33010:15;:24;33026:7;33010:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33093:7;33089:2;33055:46;;33064:23;33079:7;33064:14;:23::i;:::-;33055:46;;;;;;;;;;;;32935:174;;:::o;29247:348::-;29340:4;29365:16;29373:7;29365;:16::i;:::-;29357:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29441:13;29457:23;29472:7;29457:14;:23::i;:::-;29441:39;;29510:5;29499:16;;:7;:16;;;:51;;;;29543:7;29519:31;;:20;29531:7;29519:11;:20::i;:::-;:31;;;29499:51;:87;;;;29554:32;29571:5;29578:7;29554:16;:32::i;:::-;29499:87;29491:96;;;29247:348;;;;:::o;32239:578::-;32398:4;32371:31;;:23;32386:7;32371:14;:23::i;:::-;:31;;;32363:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32481:1;32467:16;;:2;:16;;;;32459:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32537:39;32558:4;32564:2;32568:7;32537:20;:39::i;:::-;32641:29;32658:1;32662:7;32641:8;:29::i;:::-;32702:1;32683:9;:15;32693:4;32683:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32731:1;32714:9;:13;32724:2;32714:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32762:2;32743:7;:16;32751:7;32743:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32801:7;32797:2;32782:27;;32791:4;32782:27;;;;;;;;;;;;32239:578;;;:::o;39145:165::-;39208:12;39225:2;:7;;39240:6;39225:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39207:44;;;39270:7;39262:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;39196:114;39145:165;;:::o;3013:173::-;3069:16;3088:6;;;;;;;;;;;3069:25;;3114:8;3105:6;;:17;;;;;;;;;;;;;;;;;;3169:8;3138:40;;3159:8;3138:40;;;;;;;;;;;;3058:128;3013:173;:::o;28325:315::-;28482:28;28492:4;28498:2;28502:7;28482:9;:28::i;:::-;28529:48;28552:4;28558:2;28562:7;28571:5;28529:22;:48::i;:::-;28521:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28325:315;;;;:::o;18990:723::-;19046:13;19276:1;19267:5;:10;19263:53;;;19294:10;;;;;;;;;;;;;;;;;;;;;19263:53;19326:12;19341:5;19326:20;;19357:14;19382:78;19397:1;19389:4;:9;19382:78;;19415:8;;;;;:::i;:::-;;;;19446:2;19438:10;;;;;:::i;:::-;;;19382:78;;;19470:19;19502:6;19492:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19470:39;;19520:154;19536:1;19527:5;:10;19520:154;;19564:1;19554:11;;;;;:::i;:::-;;;19631:2;19623:5;:10;;;;:::i;:::-;19610:2;:24;;;;:::i;:::-;19597:39;;19580:6;19587;19580:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19660:2;19651:11;;;;;:::i;:::-;;;19520:154;;;19698:6;19684:21;;;;;18990:723;;;;:::o;30931:382::-;31025:1;31011:16;;:2;:16;;;;31003:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31084:16;31092:7;31084;:16::i;:::-;31083:17;31075:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31146:45;31175:1;31179:2;31183:7;31146:20;:45::i;:::-;31221:1;31204:9;:13;31214:2;31204:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31252:2;31233:7;:16;31241:7;31233:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31297:7;31293:2;31272:33;;31289:1;31272:33;;;;;;;;;;;;30931:382;;:::o;35045:126::-;;;;:::o;33674:799::-;33829:4;33850:15;:2;:13;;;:15::i;:::-;33846:620;;;33902:2;33886:36;;;33923:12;:10;:12::i;:::-;33937:4;33943:7;33952:5;33886:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33882:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34145:1;34128:6;:13;:18;34124:272;;;34171:60;;;;;;;;;;:::i;:::-;;;;;;;;34124:272;34346:6;34340:13;34331:6;34327:2;34323:15;34316:38;33882:529;34019:41;;;34009:51;;;:6;:51;;;;34002:58;;;;;33846:620;34450:4;34443:11;;33674:799;;;;;;;:::o;11340:387::-;11400:4;11608:12;11675:7;11663:20;11655:28;;11718:1;11711:4;:8;11704:15;;;11340: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:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:118::-;9257:24;9275:5;9257:24;:::i;:::-;9252:3;9245:37;9170:118;;:::o;9294:109::-;9375:21;9390:5;9375:21;:::i;:::-;9370:3;9363:34;9294:109;;:::o;9409:360::-;9495:3;9523:38;9555:5;9523:38;:::i;:::-;9577:70;9640:6;9635:3;9577:70;:::i;:::-;9570:77;;9656:52;9701:6;9696:3;9689:4;9682:5;9678:16;9656:52;:::i;:::-;9733:29;9755:6;9733:29;:::i;:::-;9728:3;9724:39;9717:46;;9499:270;9409:360;;;;:::o;9775:364::-;9863:3;9891:39;9924:5;9891:39;:::i;:::-;9946:71;10010:6;10005:3;9946:71;:::i;:::-;9939:78;;10026:52;10071:6;10066:3;10059:4;10052:5;10048:16;10026:52;:::i;:::-;10103:29;10125:6;10103:29;:::i;:::-;10098:3;10094:39;10087:46;;9867:272;9775:364;;;;:::o;10145:377::-;10251:3;10279:39;10312:5;10279:39;:::i;:::-;10334:89;10416:6;10411:3;10334:89;:::i;:::-;10327:96;;10432:52;10477:6;10472:3;10465:4;10458:5;10454:16;10432:52;:::i;:::-;10509:6;10504:3;10500:16;10493:23;;10255:267;10145:377;;;;:::o;10552:845::-;10655:3;10692:5;10686:12;10721:36;10747:9;10721:36;:::i;:::-;10773:89;10855:6;10850:3;10773:89;:::i;:::-;10766:96;;10893:1;10882:9;10878:17;10909:1;10904:137;;;;11055:1;11050:341;;;;10871:520;;10904:137;10988:4;10984:9;10973;10969:25;10964:3;10957:38;11024:6;11019:3;11015:16;11008:23;;10904:137;;11050:341;11117:38;11149:5;11117:38;:::i;:::-;11177:1;11191:154;11205:6;11202:1;11199:13;11191:154;;;11279:7;11273:14;11269:1;11264:3;11260:11;11253:35;11329:1;11320:7;11316:15;11305:26;;11227:4;11224:1;11220:12;11215:17;;11191:154;;;11374:6;11369:3;11365:16;11358:23;;11057:334;;10871:520;;10659:738;;10552:845;;;;:::o;11403:366::-;11545:3;11566:67;11630:2;11625:3;11566:67;:::i;:::-;11559:74;;11642:93;11731:3;11642:93;:::i;:::-;11760:2;11755:3;11751:12;11744:19;;11403:366;;;:::o;11775:::-;11917:3;11938:67;12002:2;11997:3;11938:67;:::i;:::-;11931:74;;12014:93;12103:3;12014:93;:::i;:::-;12132:2;12127:3;12123:12;12116:19;;11775:366;;;:::o;12147:::-;12289:3;12310:67;12374:2;12369:3;12310:67;:::i;:::-;12303:74;;12386:93;12475:3;12386:93;:::i;:::-;12504:2;12499:3;12495:12;12488:19;;12147:366;;;:::o;12519:::-;12661:3;12682:67;12746:2;12741:3;12682:67;:::i;:::-;12675:74;;12758:93;12847:3;12758:93;:::i;:::-;12876:2;12871:3;12867:12;12860:19;;12519:366;;;:::o;12891:::-;13033:3;13054:67;13118:2;13113:3;13054:67;:::i;:::-;13047:74;;13130:93;13219:3;13130:93;:::i;:::-;13248:2;13243:3;13239:12;13232:19;;12891:366;;;:::o;13263:::-;13405:3;13426:67;13490:2;13485:3;13426:67;:::i;:::-;13419:74;;13502:93;13591:3;13502:93;:::i;:::-;13620:2;13615:3;13611:12;13604:19;;13263:366;;;:::o;13635:::-;13777:3;13798:67;13862:2;13857:3;13798:67;:::i;:::-;13791:74;;13874:93;13963:3;13874:93;:::i;:::-;13992:2;13987:3;13983:12;13976:19;;13635:366;;;:::o;14007:::-;14149:3;14170:67;14234:2;14229:3;14170:67;:::i;:::-;14163:74;;14246:93;14335:3;14246:93;:::i;:::-;14364:2;14359:3;14355:12;14348:19;;14007:366;;;:::o;14379:::-;14521:3;14542:67;14606:2;14601:3;14542:67;:::i;:::-;14535:74;;14618:93;14707:3;14618:93;:::i;:::-;14736:2;14731:3;14727:12;14720:19;;14379:366;;;:::o;14751:::-;14893:3;14914:67;14978:2;14973:3;14914:67;:::i;:::-;14907:74;;14990:93;15079:3;14990:93;:::i;:::-;15108:2;15103:3;15099:12;15092:19;;14751:366;;;:::o;15123:::-;15265:3;15286:67;15350:2;15345:3;15286:67;:::i;:::-;15279:74;;15362:93;15451:3;15362:93;:::i;:::-;15480:2;15475:3;15471:12;15464:19;;15123:366;;;:::o;15495:::-;15637:3;15658:67;15722:2;15717:3;15658:67;:::i;:::-;15651:74;;15734:93;15823:3;15734:93;:::i;:::-;15852:2;15847:3;15843:12;15836:19;;15495:366;;;:::o;15867:::-;16009:3;16030:67;16094:2;16089:3;16030:67;:::i;:::-;16023:74;;16106:93;16195:3;16106:93;:::i;:::-;16224:2;16219:3;16215:12;16208:19;;15867:366;;;:::o;16239:::-;16381:3;16402:67;16466:2;16461:3;16402:67;:::i;:::-;16395:74;;16478:93;16567:3;16478:93;:::i;:::-;16596:2;16591:3;16587:12;16580:19;;16239:366;;;:::o;16611:::-;16753:3;16774:67;16838:2;16833:3;16774:67;:::i;:::-;16767:74;;16850:93;16939:3;16850:93;:::i;:::-;16968:2;16963:3;16959:12;16952:19;;16611:366;;;:::o;16983:::-;17125:3;17146:67;17210:2;17205:3;17146:67;:::i;:::-;17139:74;;17222:93;17311:3;17222:93;:::i;:::-;17340:2;17335:3;17331:12;17324:19;;16983:366;;;:::o;17355:::-;17497:3;17518:67;17582:2;17577:3;17518:67;:::i;:::-;17511:74;;17594:93;17683:3;17594:93;:::i;:::-;17712:2;17707:3;17703:12;17696:19;;17355:366;;;:::o;17727:::-;17869:3;17890:67;17954:2;17949:3;17890:67;:::i;:::-;17883:74;;17966:93;18055:3;17966:93;:::i;:::-;18084:2;18079:3;18075:12;18068:19;;17727:366;;;:::o;18099:::-;18241:3;18262:67;18326:2;18321:3;18262:67;:::i;:::-;18255:74;;18338:93;18427:3;18338:93;:::i;:::-;18456:2;18451:3;18447:12;18440:19;;18099:366;;;:::o;18471:::-;18613:3;18634:67;18698:2;18693:3;18634:67;:::i;:::-;18627:74;;18710:93;18799:3;18710:93;:::i;:::-;18828:2;18823:3;18819:12;18812:19;;18471:366;;;:::o;18843:::-;18985:3;19006:67;19070:2;19065:3;19006:67;:::i;:::-;18999:74;;19082:93;19171:3;19082:93;:::i;:::-;19200:2;19195:3;19191:12;19184:19;;18843:366;;;:::o;19215:::-;19357:3;19378:67;19442:2;19437:3;19378:67;:::i;:::-;19371:74;;19454:93;19543:3;19454:93;:::i;:::-;19572:2;19567:3;19563:12;19556:19;;19215:366;;;:::o;19587:::-;19729:3;19750:67;19814:2;19809:3;19750:67;:::i;:::-;19743:74;;19826:93;19915:3;19826:93;:::i;:::-;19944:2;19939:3;19935:12;19928:19;;19587:366;;;:::o;19959:398::-;20118:3;20139:83;20220:1;20215:3;20139:83;:::i;:::-;20132:90;;20231:93;20320:3;20231:93;:::i;:::-;20349:1;20344:3;20340:11;20333:18;;19959:398;;;:::o;20363:366::-;20505:3;20526:67;20590:2;20585:3;20526:67;:::i;:::-;20519:74;;20602:93;20691:3;20602:93;:::i;:::-;20720:2;20715:3;20711:12;20704:19;;20363:366;;;:::o;20735:::-;20877:3;20898:67;20962:2;20957:3;20898:67;:::i;:::-;20891:74;;20974:93;21063:3;20974:93;:::i;:::-;21092:2;21087:3;21083:12;21076:19;;20735:366;;;:::o;21107:::-;21249:3;21270:67;21334:2;21329:3;21270:67;:::i;:::-;21263:74;;21346:93;21435:3;21346:93;:::i;:::-;21464:2;21459:3;21455:12;21448:19;;21107:366;;;:::o;21479:118::-;21566:24;21584:5;21566:24;:::i;:::-;21561:3;21554:37;21479:118;;:::o;21603:429::-;21780:3;21802:92;21890:3;21881:6;21802:92;:::i;:::-;21795:99;;21911:95;22002:3;21993:6;21911:95;:::i;:::-;21904:102;;22023:3;22016:10;;21603:429;;;;;:::o;22038:379::-;22222:3;22244:147;22387:3;22244:147;:::i;:::-;22237:154;;22408:3;22401:10;;22038:379;;;:::o;22423:222::-;22516:4;22554:2;22543:9;22539:18;22531:26;;22567:71;22635:1;22624:9;22620:17;22611:6;22567:71;:::i;:::-;22423:222;;;;:::o;22651:640::-;22846:4;22884:3;22873:9;22869:19;22861:27;;22898:71;22966:1;22955:9;22951:17;22942:6;22898:71;:::i;:::-;22979:72;23047:2;23036:9;23032:18;23023:6;22979:72;:::i;:::-;23061;23129:2;23118:9;23114:18;23105:6;23061:72;:::i;:::-;23180:9;23174:4;23170:20;23165:2;23154:9;23150:18;23143:48;23208:76;23279:4;23270:6;23208:76;:::i;:::-;23200:84;;22651:640;;;;;;;:::o;23297:210::-;23384:4;23422:2;23411:9;23407:18;23399:26;;23435:65;23497:1;23486:9;23482:17;23473:6;23435:65;:::i;:::-;23297:210;;;;:::o;23513:313::-;23626:4;23664:2;23653:9;23649:18;23641:26;;23713:9;23707:4;23703:20;23699:1;23688:9;23684:17;23677:47;23741:78;23814:4;23805:6;23741:78;:::i;:::-;23733:86;;23513:313;;;;:::o;23832:419::-;23998:4;24036:2;24025:9;24021:18;24013:26;;24085:9;24079:4;24075:20;24071:1;24060:9;24056:17;24049:47;24113:131;24239:4;24113:131;:::i;:::-;24105:139;;23832:419;;;:::o;24257:::-;24423:4;24461:2;24450:9;24446:18;24438:26;;24510:9;24504:4;24500:20;24496:1;24485:9;24481:17;24474:47;24538:131;24664:4;24538:131;:::i;:::-;24530:139;;24257:419;;;:::o;24682:::-;24848:4;24886:2;24875:9;24871:18;24863:26;;24935:9;24929:4;24925:20;24921:1;24910:9;24906:17;24899:47;24963:131;25089:4;24963:131;:::i;:::-;24955:139;;24682:419;;;:::o;25107:::-;25273:4;25311:2;25300:9;25296:18;25288:26;;25360:9;25354:4;25350:20;25346:1;25335:9;25331:17;25324:47;25388:131;25514:4;25388:131;:::i;:::-;25380:139;;25107:419;;;:::o;25532:::-;25698:4;25736:2;25725:9;25721:18;25713:26;;25785:9;25779:4;25775:20;25771:1;25760:9;25756:17;25749:47;25813:131;25939:4;25813:131;:::i;:::-;25805:139;;25532:419;;;:::o;25957:::-;26123:4;26161:2;26150:9;26146:18;26138:26;;26210:9;26204:4;26200:20;26196:1;26185:9;26181:17;26174:47;26238:131;26364:4;26238:131;:::i;:::-;26230:139;;25957:419;;;:::o;26382:::-;26548:4;26586:2;26575:9;26571:18;26563:26;;26635:9;26629:4;26625:20;26621:1;26610:9;26606:17;26599:47;26663:131;26789:4;26663:131;:::i;:::-;26655:139;;26382:419;;;:::o;26807:::-;26973:4;27011:2;27000:9;26996:18;26988:26;;27060:9;27054:4;27050:20;27046:1;27035:9;27031:17;27024:47;27088:131;27214:4;27088:131;:::i;:::-;27080:139;;26807:419;;;:::o;27232:::-;27398:4;27436:2;27425:9;27421:18;27413:26;;27485:9;27479:4;27475:20;27471:1;27460:9;27456:17;27449:47;27513:131;27639:4;27513:131;:::i;:::-;27505:139;;27232:419;;;:::o;27657:::-;27823:4;27861:2;27850:9;27846:18;27838:26;;27910:9;27904:4;27900:20;27896:1;27885:9;27881:17;27874:47;27938:131;28064:4;27938:131;:::i;:::-;27930:139;;27657:419;;;:::o;28082:::-;28248:4;28286:2;28275:9;28271:18;28263:26;;28335:9;28329:4;28325:20;28321:1;28310:9;28306:17;28299:47;28363:131;28489:4;28363:131;:::i;:::-;28355:139;;28082:419;;;:::o;28507:::-;28673:4;28711:2;28700:9;28696:18;28688:26;;28760:9;28754:4;28750:20;28746:1;28735:9;28731:17;28724:47;28788:131;28914:4;28788:131;:::i;:::-;28780:139;;28507:419;;;:::o;28932:::-;29098:4;29136:2;29125:9;29121:18;29113:26;;29185:9;29179:4;29175:20;29171:1;29160:9;29156:17;29149:47;29213:131;29339:4;29213:131;:::i;:::-;29205:139;;28932:419;;;:::o;29357:::-;29523:4;29561:2;29550:9;29546:18;29538:26;;29610:9;29604:4;29600:20;29596:1;29585:9;29581:17;29574:47;29638:131;29764:4;29638:131;:::i;:::-;29630:139;;29357:419;;;:::o;29782:::-;29948:4;29986:2;29975:9;29971:18;29963:26;;30035:9;30029:4;30025:20;30021:1;30010:9;30006:17;29999:47;30063:131;30189:4;30063:131;:::i;:::-;30055:139;;29782:419;;;:::o;30207:::-;30373:4;30411:2;30400:9;30396:18;30388:26;;30460:9;30454:4;30450:20;30446:1;30435:9;30431:17;30424:47;30488:131;30614:4;30488:131;:::i;:::-;30480:139;;30207:419;;;:::o;30632:::-;30798:4;30836:2;30825:9;30821:18;30813:26;;30885:9;30879:4;30875:20;30871:1;30860:9;30856:17;30849:47;30913:131;31039:4;30913:131;:::i;:::-;30905:139;;30632:419;;;:::o;31057:::-;31223:4;31261:2;31250:9;31246:18;31238:26;;31310:9;31304:4;31300:20;31296:1;31285:9;31281:17;31274:47;31338:131;31464:4;31338:131;:::i;:::-;31330:139;;31057:419;;;:::o;31482:::-;31648:4;31686:2;31675:9;31671:18;31663:26;;31735:9;31729:4;31725:20;31721:1;31710:9;31706:17;31699:47;31763:131;31889:4;31763:131;:::i;:::-;31755:139;;31482:419;;;:::o;31907:::-;32073:4;32111:2;32100:9;32096:18;32088:26;;32160:9;32154:4;32150:20;32146:1;32135:9;32131:17;32124:47;32188:131;32314:4;32188:131;:::i;:::-;32180:139;;31907:419;;;:::o;32332:::-;32498:4;32536:2;32525:9;32521:18;32513:26;;32585:9;32579:4;32575:20;32571:1;32560:9;32556:17;32549:47;32613:131;32739:4;32613:131;:::i;:::-;32605:139;;32332:419;;;:::o;32757:::-;32923:4;32961:2;32950:9;32946:18;32938:26;;33010:9;33004:4;33000:20;32996:1;32985:9;32981:17;32974:47;33038:131;33164:4;33038:131;:::i;:::-;33030:139;;32757:419;;;:::o;33182:::-;33348:4;33386:2;33375:9;33371:18;33363:26;;33435:9;33429:4;33425:20;33421:1;33410:9;33406:17;33399:47;33463:131;33589:4;33463:131;:::i;:::-;33455:139;;33182:419;;;:::o;33607:::-;33773:4;33811:2;33800:9;33796:18;33788:26;;33860:9;33854:4;33850:20;33846:1;33835:9;33831:17;33824:47;33888:131;34014:4;33888:131;:::i;:::-;33880:139;;33607:419;;;:::o;34032:::-;34198:4;34236:2;34225:9;34221:18;34213:26;;34285:9;34279:4;34275:20;34271:1;34260:9;34256:17;34249:47;34313:131;34439:4;34313:131;:::i;:::-;34305:139;;34032:419;;;:::o;34457:::-;34623:4;34661:2;34650:9;34646:18;34638:26;;34710:9;34704:4;34700:20;34696:1;34685:9;34681:17;34674:47;34738:131;34864:4;34738:131;:::i;:::-;34730:139;;34457:419;;;:::o;34882:222::-;34975:4;35013:2;35002:9;34998:18;34990:26;;35026:71;35094:1;35083:9;35079:17;35070:6;35026:71;:::i;:::-;34882:222;;;;:::o;35110:129::-;35144:6;35171:20;;:::i;:::-;35161:30;;35200:33;35228:4;35220:6;35200:33;:::i;:::-;35110:129;;;:::o;35245:75::-;35278:6;35311:2;35305:9;35295:19;;35245:75;:::o;35326:311::-;35403:4;35493:18;35485:6;35482:30;35479:56;;;35515:18;;:::i;:::-;35479:56;35565:4;35557:6;35553:17;35545:25;;35625:4;35619;35615:15;35607:23;;35326:311;;;:::o;35643:307::-;35704:4;35794:18;35786:6;35783:30;35780:56;;;35816:18;;:::i;:::-;35780:56;35854:29;35876:6;35854:29;:::i;:::-;35846:37;;35938:4;35932;35928:15;35920:23;;35643:307;;;:::o;35956:308::-;36018:4;36108:18;36100:6;36097:30;36094:56;;;36130:18;;:::i;:::-;36094:56;36168:29;36190:6;36168:29;:::i;:::-;36160:37;;36252:4;36246;36242:15;36234:23;;35956:308;;;:::o;36270:141::-;36319:4;36342:3;36334:11;;36365:3;36362:1;36355:14;36399:4;36396:1;36386:18;36378:26;;36270:141;;;:::o;36417:98::-;36468:6;36502:5;36496:12;36486:22;;36417:98;;;:::o;36521:99::-;36573:6;36607:5;36601:12;36591:22;;36521:99;;;:::o;36626:168::-;36709:11;36743:6;36738:3;36731:19;36783:4;36778:3;36774:14;36759:29;;36626:168;;;;:::o;36800:147::-;36901:11;36938:3;36923:18;;36800:147;;;;:::o;36953:169::-;37037:11;37071:6;37066:3;37059:19;37111:4;37106:3;37102:14;37087:29;;36953:169;;;;:::o;37128:148::-;37230:11;37267:3;37252:18;;37128:148;;;;:::o;37282:305::-;37322:3;37341:20;37359:1;37341:20;:::i;:::-;37336:25;;37375:20;37393:1;37375:20;:::i;:::-;37370:25;;37529:1;37461:66;37457:74;37454:1;37451:81;37448:107;;;37535:18;;:::i;:::-;37448:107;37579:1;37576;37572:9;37565:16;;37282:305;;;;:::o;37593:185::-;37633:1;37650:20;37668:1;37650:20;:::i;:::-;37645:25;;37684:20;37702:1;37684:20;:::i;:::-;37679:25;;37723:1;37713:35;;37728:18;;:::i;:::-;37713:35;37770:1;37767;37763:9;37758:14;;37593:185;;;;:::o;37784:348::-;37824:7;37847:20;37865:1;37847:20;:::i;:::-;37842:25;;37881:20;37899:1;37881:20;:::i;:::-;37876:25;;38069:1;38001:66;37997:74;37994:1;37991:81;37986:1;37979:9;37972:17;37968:105;37965:131;;;38076:18;;:::i;:::-;37965:131;38124:1;38121;38117:9;38106:20;;37784:348;;;;:::o;38138:191::-;38178:4;38198:20;38216:1;38198:20;:::i;:::-;38193:25;;38232:20;38250:1;38232:20;:::i;:::-;38227:25;;38271:1;38268;38265:8;38262:34;;;38276:18;;:::i;:::-;38262:34;38321:1;38318;38314:9;38306:17;;38138:191;;;;:::o;38335:96::-;38372:7;38401:24;38419:5;38401:24;:::i;:::-;38390:35;;38335:96;;;:::o;38437:90::-;38471:7;38514:5;38507:13;38500:21;38489:32;;38437:90;;;:::o;38533:149::-;38569:7;38609:66;38602:5;38598:78;38587:89;;38533:149;;;:::o;38688:126::-;38725:7;38765:42;38758:5;38754:54;38743:65;;38688:126;;;:::o;38820:77::-;38857:7;38886:5;38875:16;;38820:77;;;:::o;38903:154::-;38987:6;38982:3;38977;38964:30;39049:1;39040:6;39035:3;39031:16;39024:27;38903:154;;;:::o;39063:307::-;39131:1;39141:113;39155:6;39152:1;39149:13;39141:113;;;39240:1;39235:3;39231:11;39225:18;39221:1;39216:3;39212:11;39205:39;39177:2;39174:1;39170:10;39165:15;;39141:113;;;39272:6;39269:1;39266:13;39263:101;;;39352:1;39343:6;39338:3;39334:16;39327:27;39263:101;39112:258;39063:307;;;:::o;39376:320::-;39420:6;39457:1;39451:4;39447:12;39437:22;;39504:1;39498:4;39494:12;39525:18;39515:81;;39581:4;39573:6;39569:17;39559:27;;39515:81;39643:2;39635:6;39632:14;39612:18;39609:38;39606:84;;;39662:18;;:::i;:::-;39606:84;39427:269;39376:320;;;:::o;39702:281::-;39785:27;39807:4;39785:27;:::i;:::-;39777:6;39773:40;39915:6;39903:10;39900:22;39879:18;39867:10;39864:34;39861:62;39858:88;;;39926:18;;:::i;:::-;39858:88;39966:10;39962:2;39955:22;39745:238;39702:281;;:::o;39989:233::-;40028:3;40051:24;40069:5;40051:24;:::i;:::-;40042:33;;40097:66;40090:5;40087:77;40084:103;;;40167:18;;:::i;:::-;40084:103;40214:1;40207:5;40203:13;40196:20;;39989:233;;;:::o;40228:176::-;40260:1;40277:20;40295:1;40277:20;:::i;:::-;40272:25;;40311:20;40329:1;40311:20;:::i;:::-;40306:25;;40350:1;40340:35;;40355:18;;:::i;:::-;40340:35;40396:1;40393;40389:9;40384:14;;40228:176;;;;:::o;40410:180::-;40458:77;40455:1;40448:88;40555:4;40552:1;40545:15;40579:4;40576:1;40569:15;40596:180;40644:77;40641:1;40634:88;40741:4;40738:1;40731:15;40765:4;40762:1;40755:15;40782:180;40830:77;40827:1;40820:88;40927:4;40924:1;40917:15;40951:4;40948:1;40941:15;40968:180;41016:77;41013:1;41006:88;41113:4;41110:1;41103:15;41137:4;41134:1;41127:15;41154:180;41202:77;41199:1;41192:88;41299:4;41296:1;41289:15;41323:4;41320:1;41313:15;41340:117;41449:1;41446;41439:12;41463:117;41572:1;41569;41562:12;41586:117;41695:1;41692;41685:12;41709:117;41818:1;41815;41808:12;41832:117;41941:1;41938;41931:12;41955:102;41996:6;42047:2;42043:7;42038:2;42031:5;42027:14;42023:28;42013:38;;41955:102;;;:::o;42063:226::-;42203:34;42199:1;42191:6;42187:14;42180:58;42272:9;42267:2;42259:6;42255:15;42248:34;42063:226;:::o;42295:229::-;42435:34;42431:1;42423:6;42419:14;42412:58;42504:12;42499:2;42491:6;42487:15;42480:37;42295:229;:::o;42530:237::-;42670:34;42666:1;42658:6;42654:14;42647:58;42739:20;42734:2;42726:6;42722:15;42715:45;42530:237;:::o;42773:168::-;42913:20;42909:1;42901:6;42897:14;42890:44;42773:168;:::o;42947:225::-;43087:34;43083:1;43075:6;43071:14;43064:58;43156:8;43151:2;43143:6;43139:15;43132:33;42947:225;:::o;43178:181::-;43318:33;43314:1;43306:6;43302:14;43295:57;43178:181;:::o;43365:178::-;43505:30;43501:1;43493:6;43489:14;43482:54;43365:178;:::o;43549:223::-;43689:34;43685:1;43677:6;43673:14;43666:58;43758:6;43753:2;43745:6;43741:15;43734:31;43549:223;:::o;43778:175::-;43918:27;43914:1;43906:6;43902:14;43895:51;43778:175;:::o;43959:177::-;44099:29;44095:1;44087:6;44083:14;44076:53;43959:177;:::o;44142:231::-;44282:34;44278:1;44270:6;44266:14;44259:58;44351:14;44346:2;44338:6;44334:15;44327:39;44142:231;:::o;44379:243::-;44519:34;44515:1;44507:6;44503:14;44496:58;44588:26;44583:2;44575:6;44571:15;44564:51;44379:243;:::o;44628:229::-;44768:34;44764:1;44756:6;44752:14;44745:58;44837:12;44832:2;44824:6;44820:15;44813:37;44628:229;:::o;44863:228::-;45003:34;44999:1;44991:6;44987:14;44980:58;45072:11;45067:2;45059:6;45055:15;45048:36;44863:228;:::o;45097:226::-;45237:34;45233:1;45225:6;45221:14;45214:58;45306:9;45301:2;45293:6;45289:15;45282:34;45097:226;:::o;45329:182::-;45469:34;45465:1;45457:6;45453:14;45446:58;45329:182;:::o;45517:231::-;45657:34;45653:1;45645:6;45641:14;45634:58;45726:14;45721:2;45713:6;45709:15;45702:39;45517:231;:::o;45754:182::-;45894:34;45890:1;45882:6;45878:14;45871:58;45754:182;:::o;45942:165::-;46082:17;46078:1;46070:6;46066:14;46059:41;45942:165;:::o;46113:170::-;46253:22;46249:1;46241:6;46237:14;46230:46;46113:170;:::o;46289:228::-;46429:34;46425:1;46417:6;46413:14;46406:58;46498:11;46493:2;46485:6;46481:15;46474:36;46289:228;:::o;46523:172::-;46663:24;46659:1;46651:6;46647:14;46640:48;46523:172;:::o;46701:220::-;46841:34;46837:1;46829:6;46825:14;46818:58;46910:3;46905:2;46897:6;46893:15;46886:28;46701:220;:::o;46927:114::-;;:::o;47047:236::-;47187:34;47183:1;47175:6;47171:14;47164:58;47256:19;47251:2;47243:6;47239:15;47232:44;47047:236;:::o;47289:174::-;47429:26;47425:1;47417:6;47413:14;47406:50;47289:174;:::o;47469:175::-;47609:27;47605:1;47597:6;47593:14;47586:51;47469:175;:::o;47650:122::-;47723:24;47741:5;47723:24;:::i;:::-;47716:5;47713:35;47703:63;;47762:1;47759;47752:12;47703:63;47650:122;:::o;47778:116::-;47848:21;47863:5;47848:21;:::i;:::-;47841:5;47838:32;47828:60;;47884:1;47881;47874:12;47828:60;47778:116;:::o;47900:120::-;47972:23;47989:5;47972:23;:::i;:::-;47965:5;47962:34;47952:62;;48010:1;48007;48000:12;47952:62;47900:120;:::o;48026:122::-;48099:24;48117:5;48099:24;:::i;:::-;48092:5;48089:35;48079:63;;48138:1;48135;48128:12;48079:63;48026:122;:::o

Swarm Source

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