ETH Price: $3,401.05 (+3.05%)

Token

Skids (SKID)
 

Overview

Max Total Supply

1,120 SKID

Holders

453

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SKID
0xA487b579Cf197AB4f7D3a1b2b59195862Da15A7B
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Skids

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

// SPDX-License-Identifier: MIT

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @dev 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(to).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 {}
}

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

/**
 * @dev ERC721 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 */
abstract contract ERC721Pausable is ERC721, Pausable {
    /**
     * @dev See {ERC721-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        require(!paused(), "ERC721Pausable: token transfer while paused");
    }
}

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 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);
    }
}



/* 
                                                                         
                                                        dddddddd                 
                 kkkkkkkk             iiii              d::::::d                 
                 k::::::k            i::::i             d::::::d                 
                 k::::::k             iiii              d::::::d                 
                 k::::::k                               d:::::d                  
    ssssssssss    k:::::k    kkkkkkkiiiiiii     ddddddddd:::::d     ssssssssss   
  ss::::::::::s   k:::::k   k:::::k i:::::i   dd::::::::::::::d   ss::::::::::s  
ss:::::::::::::s  k:::::k  k:::::k   i::::i  d::::::::::::::::d ss:::::::::::::s 
s::::::ssss:::::s k:::::k k:::::k    i::::i d:::::::ddddd:::::d s::::::ssss:::::s
 s:::::s  ssssss  k::::::k:::::k     i::::i d::::::d    d:::::d  s:::::s  ssssss 
   s::::::s       k:::::::::::k      i::::i d:::::d     d:::::d    s::::::s      
      s::::::s    k:::::::::::k      i::::i d:::::d     d:::::d       s::::::s   
ssssss   s:::::s  k::::::k:::::k     i::::i d:::::d     d:::::d ssssss   s:::::s 
s:::::ssss::::::sk::::::k k:::::k   i::::::id::::::ddddd::::::dds:::::ssss::::::s
s::::::::::::::s k::::::k  k:::::k  i::::::i d:::::::::::::::::ds::::::::::::::s 
 s:::::::::::ss  k::::::k   k:::::k i::::::i  d:::::::::ddd::::d s:::::::::::ss  
  sssssssssss    kkkkkkkk    kkkkkkkiiiiiiii   ddddddddd   ddddd  sssssssssss    


Website: https://skids.io
Discord: https://discord.gg/skidsNFT 
Twitter: https://twitter.com/SkidsNFT

*/

contract Skids is ERC721Pausable, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    address private _markettingAddress = 0xd4BD555aE9c16b5E7cEC067D7C8C5988b8d8C965;

    uint256 private constant _maxTokens = 8888;
    uint256 private constant _maxMint = 9;
    uint256 private constant _maxPresaleMint = 3;
                        
    uint256 public constant _price = 77700000000000000; // 0.0777 ETH

    mapping (address => bool) private _whitelist;
    mapping (address => uint256) private _presaleMints;
    mapping (address => uint256) private _saleMints;

    bool private _presaleActive = false;
    bool private _saleActive = false;
       
    bool private _69minted = false; 
    bool private _1337minted = false; 
    bool private _420minted = false; 


    string public _prefixURI;

    constructor() public ERC721("Skids", "SKID") {
        _pause();
    }


    /* MINTING FOR CHARITABLE AUCTION */
    
    /* See FAQ in discord for which charities each of these sales will go to.*/
    function _mint69() public onlyOwner {
        require(_69minted == false);
        _69minted = true; 
        _safeMint(_markettingAddress, 69);
    }   

    function _mint1337() public onlyOwner {
        require(_1337minted == false);
        _1337minted = true; 
        _safeMint(_markettingAddress, 1337);
    }

    function _mint420() public onlyOwner {
        require(_420minted == false);
        _420minted = true; 
        _safeMint(_markettingAddress, 420);
    }
    /* */

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

    function setBaseURI(string memory _uri) public onlyOwner {
        _prefixURI = _uri;
    }

    function totalSupply() public view returns (uint256) {
        return _tokenIds.current();
    }

    function isWhitelisted(address addr) public view returns (bool) {
        return _whitelist[addr];
    }

    function preSaleActive() public view returns (bool) {
        return _presaleActive; 
    }

    function saleActive() public view returns (bool) {
        return _saleActive; 
    }

    function presaleMinted(address addr) public view returns (uint256) {
        return _presaleMints[addr]; 
    }

    function saleMinted(address addr) public view returns (uint256) {
        return _saleMints[addr]; 
    }

    function addToWhitelist(address[] memory addrs) public onlyOwner {
        for (uint256 i = 0; i < addrs.length; i++) {
            _whitelist[addrs[i]] = true;
            _presaleMints[addrs[i]] = 0;
        }
    }

    function presaleMintItems(uint256 amount) public payable {
        require(amount <= _maxMint);
        require(amount <= _maxPresaleMint);
        require(isWhitelisted(msg.sender));
        require(msg.value >= amount * _price);
        require(_presaleMints[msg.sender] + amount <= _maxPresaleMint);
        require(_presaleActive);

        uint256 totalMinted = _tokenIds.current();
        require(totalMinted + amount <= _maxTokens);

        for (uint256 i = 0; i < amount; i++) {
            _presaleMints[msg.sender] += 1;
            _mintItem(msg.sender);
        }
    }

    function mintItems(uint256 amount) public payable {
        require(amount <= _maxMint);
        require(_saleActive);
        require(amount <= _maxMint); 
        uint256 totalMinted = _tokenIds.current();
        require(totalMinted + amount <= _maxTokens);
        require(_saleMints[msg.sender] + amount <= _maxMint); 

        require(msg.value >= amount * _price);

        for (uint256 i = 0; i < amount; i++) {
            _saleMints[msg.sender] += 1; 
            _mintItem(msg.sender);
        }
    }

    function _mintItem(address to) internal returns (uint256) {
        _tokenIds.increment();
        uint256 id = _tokenIds.current();
        if(id == 69) {
            _tokenIds.increment(); 
            id = _tokenIds.current(); 
        }
        if(id == 420) {
            _tokenIds.increment(); 
            id = _tokenIds.current(); 
        }
        if(id == 1337) {
            _tokenIds.increment(); 
            id = _tokenIds.current(); 
        }
        _safeMint(to, id);
        return id;
    }

    function togglePreSale() public onlyOwner {
        _presaleActive = !_presaleActive;
    }

    function toggleSale() public onlyOwner {
        _saleActive = !_saleActive;
    }

    function toggleTransferPause() public onlyOwner {
        paused() ? _unpause() : _pause();
    }

    function reserve(uint256 quantity) public onlyOwner {
        for(uint i = _tokenIds.current(); i < quantity; i++) {
            if (i < _maxTokens) {
                _tokenIds.increment();
                _safeMint(msg.sender, i + 1);
            }
        }
    }

    function withdraw() external onlyOwner {
        require(address(this).balance > 0); 
        payable(_markettingAddress).transfer(address(this).balance * 5 / 100);
        payable(msg.sender).transfer(address(this).balance);
    }
    

    // Allows minting(transfer from 0 address), but not transferring while paused() except from owner
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        if (!(from == address(0)) && !(from == owner())) {
            require(!paused(), "ERC721Pausable: token transfer while paused");
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"_mint1337","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_mint420","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_mint69","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_prefixURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintItems","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"presaleMintItems","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"presaleMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserve","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":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"saleMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTransferPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405273d4bd555ae9c16b5e7cec067d7c8c5988b8d8c965600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506000600c60036101000a81548160ff0219169083151502179055506000600c60046101000a81548160ff021916908315150217905550348015620000ed57600080fd5b506040518060400160405280600581526020017f536b6964730000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534b4944000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001729291906200037c565b5080600190805190602001906200018b9291906200037c565b5050506000600660006101000a81548160ff021916908315150217905550620001c9620001bd620001df60201b60201c565b620001e760201b60201c565b620001d9620002ad60201b60201c565b62000576565b600033905090565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002bd6200036560201b60201c565b1562000300576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f79062000481565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200034c620001df60201b60201c565b6040516200035b919062000464565b60405180910390a1565b6000600660009054906101000a900460ff16905090565b8280546200038a90620004e8565b90600052602060002090601f016020900481019282620003ae5760008555620003fa565b82601f10620003c957805160ff1916838001178555620003fa565b82800160010185558215620003fa579182015b82811115620003f9578251825591602001919060010190620003dc565b5b5090506200040991906200040d565b5090565b5b80821115620004285760008160009055506001016200040e565b5090565b6200043781620004b4565b82525050565b60006200044c601083620004a3565b915062000459826200054d565b602082019050919050565b60006020820190506200047b60008301846200042c565b92915050565b600060208201905081810360008301526200049c816200043d565b9050919050565b600082825260208201905092915050565b6000620004c182620004c8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200050157607f821691505b602082108114156200051857620005176200051e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6144cd80620005866000396000f3fe60806040526004361061021a5760003560e01c806370a08231116101235780639752a017116100ab578063ca3cb5221161006f578063ca3cb52214610757578063cab093971461076e578063e985e9c514610785578063ebf0ab80146107c2578063f2fde38b146107ff5761021a565b80639752a01714610674578063a22cb4651461068b578063b88d4fde146106b4578063bc660cac146106dd578063c87b56dd1461071a5761021a565b8063819b25ba116100f2578063819b25ba1461059f57806384494708146105c85780638da5cb5b146105f357806391860f781461061e57806395d89b41146106495761021a565b806370a082311461050b578063715018a6146105485780637d8966e41461055f5780637f649783146105765761021a565b8063394dc2b7116101a65780635367de6a116101755780635367de6a1461043357806355f804b31461044f5780635c975abb146104785780636352211e146104a357806368428a1b146104e05761021a565b8063394dc2b71461039f5780633af32abf146103b65780633ccfd60b146103f357806342842e0e1461040a5761021a565b80630b4b9878116101ed5780630b4b9878146102ed57806318160ddd146103095780631b6ac55914610334578063235b6ea11461034b57806323b872dd146103765761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613313565b610828565b60405161025391906137d7565b60405180910390f35b34801561026857600080fd5b5061027161090a565b60405161027e91906137f2565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906133b6565b61099c565b6040516102bb9190613770565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061328a565b610a21565b005b610307600480360381019061030291906133b6565b610b39565b005b34801561031557600080fd5b5061031e610ca4565b60405161032b9190613a74565b60405180910390f35b34801561034057600080fd5b50610349610cb5565b005b34801561035757600080fd5b50610360610d9b565b60405161036d9190613a74565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190613174565b610da7565b005b3480156103ab57600080fd5b506103b4610e07565b005b3480156103c257600080fd5b506103dd60048036038101906103d89190613107565b610eee565b6040516103ea91906137d7565b60405180910390f35b3480156103ff57600080fd5b50610408610f44565b005b34801561041657600080fd5b50610431600480360381019061042c9190613174565b611097565b005b61044d600480360381019061044891906133b6565b6110b7565b005b34801561045b57600080fd5b506104766004803603810190610471919061336d565b611210565b005b34801561048457600080fd5b5061048d6112a6565b60405161049a91906137d7565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c591906133b6565b6112bd565b6040516104d79190613770565b60405180910390f35b3480156104ec57600080fd5b506104f561136f565b60405161050291906137d7565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190613107565b611386565b60405161053f9190613a74565b60405180910390f35b34801561055457600080fd5b5061055d61143e565b005b34801561056b57600080fd5b506105746114c6565b005b34801561058257600080fd5b5061059d600480360381019061059891906132ca565b61156e565b005b3480156105ab57600080fd5b506105c660048036038101906105c191906133b6565b6116de565b005b3480156105d457600080fd5b506105dd6117b3565b6040516105ea91906137d7565b60405180910390f35b3480156105ff57600080fd5b506106086117ca565b6040516106159190613770565b60405180910390f35b34801561062a57600080fd5b506106336117f4565b60405161064091906137f2565b60405180910390f35b34801561065557600080fd5b5061065e611882565b60405161066b91906137f2565b60405180910390f35b34801561068057600080fd5b50610689611914565b005b34801561069757600080fd5b506106b260048036038101906106ad919061324a565b6119b4565b005b3480156106c057600080fd5b506106db60048036038101906106d691906131c7565b611b35565b005b3480156106e957600080fd5b5061070460048036038101906106ff9190613107565b611b97565b6040516107119190613a74565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c91906133b6565b611be0565b60405161074e91906137f2565b60405180910390f35b34801561076357600080fd5b5061076c611c87565b005b34801561077a57600080fd5b50610783611d2f565b005b34801561079157600080fd5b506107ac60048036038101906107a79190613134565b611e16565b6040516107b991906137d7565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190613107565b611eaa565b6040516107f69190613a74565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190613107565b611ef3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610903575061090282611feb565b5b9050919050565b60606000805461091990613d50565b80601f016020809104026020016040519081016040528092919081815260200182805461094590613d50565b80156109925780601f1061096757610100808354040283529160200191610992565b820191906000526020600020905b81548152906001019060200180831161097557829003601f168201915b5050505050905090565b60006109a782612055565b6109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd906139b4565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2c826112bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9490613a34565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610abc6120c1565b73ffffffffffffffffffffffffffffffffffffffff161480610aeb5750610aea81610ae56120c1565b611e16565b5b610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2190613934565b60405180910390fd5b610b3483836120c9565b505050565b6009811115610b4757600080fd5b6003811115610b5557600080fd5b610b5e33610eee565b610b6757600080fd5b6701140bbd030c400081610b7b9190613c0c565b341015610b8757600080fd5b600381600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bd49190613b85565b1115610bdf57600080fd5b600c60009054906101000a900460ff16610bf857600080fd5b6000610c046007612182565b90506122b88282610c159190613b85565b1115610c2057600080fd5b60005b82811015610c9f576001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c7b9190613b85565b92505081905550610c8b33612190565b508080610c9790613db3565b915050610c23565b505050565b6000610cb06007612182565b905090565b610cbd6120c1565b73ffffffffffffffffffffffffffffffffffffffff16610cdb6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906139d4565b60405180910390fd5b60001515600c60029054906101000a900460ff16151514610d5157600080fd5b6001600c60026101000a81548160ff021916908315150217905550610d99600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604561221f565b565b6701140bbd030c400081565b610db8610db26120c1565b8261223d565b610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90613a54565b60405180910390fd5b610e0283838361231b565b505050565b610e0f6120c1565b73ffffffffffffffffffffffffffffffffffffffff16610e2d6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a906139d4565b60405180910390fd5b60001515600c60049054906101000a900460ff16151514610ea357600080fd5b6001600c60046101000a81548160ff021916908315150217905550610eec600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101a461221f565b565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f4c6120c1565b73ffffffffffffffffffffffffffffffffffffffff16610f6a6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb7906139d4565b60405180910390fd5b60004711610fcd57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646005476110189190613c0c565b6110229190613bdb565b9081150290604051600060405180830381858888f1935050505015801561104d573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611094573d6000803e3d6000fd5b50565b6110b283838360405180602001604052806000815250611b35565b505050565b60098111156110c557600080fd5b600c60019054906101000a900460ff166110de57600080fd5b60098111156110ec57600080fd5b60006110f86007612182565b90506122b882826111099190613b85565b111561111457600080fd5b600982600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111619190613b85565b111561116c57600080fd5b6701140bbd030c4000826111809190613c0c565b34101561118c57600080fd5b60005b8281101561120b576001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111e79190613b85565b925050819055506111f733612190565b50808061120390613db3565b91505061118f565b505050565b6112186120c1565b73ffffffffffffffffffffffffffffffffffffffff166112366117ca565b73ffffffffffffffffffffffffffffffffffffffff161461128c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611283906139d4565b60405180910390fd5b80600d90805190602001906112a2929190612e7d565b5050565b6000600660009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613974565b60405180910390fd5b80915050919050565b6000600c60019054906101000a900460ff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90613954565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114466120c1565b73ffffffffffffffffffffffffffffffffffffffff166114646117ca565b73ffffffffffffffffffffffffffffffffffffffff16146114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b1906139d4565b60405180910390fd5b6114c46000612577565b565b6114ce6120c1565b73ffffffffffffffffffffffffffffffffffffffff166114ec6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611539906139d4565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b6115766120c1565b73ffffffffffffffffffffffffffffffffffffffff166115946117ca565b73ffffffffffffffffffffffffffffffffffffffff16146115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e1906139d4565b60405180910390fd5b60005b81518110156116da5760016009600084848151811061160f5761160e613eba565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600a600084848151811061168157611680613eba565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806116d290613db3565b9150506115ed565b5050565b6116e66120c1565b73ffffffffffffffffffffffffffffffffffffffff166117046117ca565b73ffffffffffffffffffffffffffffffffffffffff161461175a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611751906139d4565b60405180910390fd5b60006117666007612182565b90505b818110156117af576122b881101561179c57611785600761263d565b61179b336001836117969190613b85565b61221f565b5b80806117a790613db3565b915050611769565b5050565b6000600c60009054906101000a900460ff16905090565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d805461180190613d50565b80601f016020809104026020016040519081016040528092919081815260200182805461182d90613d50565b801561187a5780601f1061184f5761010080835404028352916020019161187a565b820191906000526020600020905b81548152906001019060200180831161185d57829003601f168201915b505050505081565b60606001805461189190613d50565b80601f01602080910402602001604051908101604052809291908181526020018280546118bd90613d50565b801561190a5780601f106118df5761010080835404028352916020019161190a565b820191906000526020600020905b8154815290600101906020018083116118ed57829003601f168201915b5050505050905090565b61191c6120c1565b73ffffffffffffffffffffffffffffffffffffffff1661193a6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614611990576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611987906139d4565b60405180910390fd5b6119986112a6565b6119a9576119a4612653565b6119b2565b6119b16126f6565b5b565b6119bc6120c1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a21906138d4565b60405180910390fd5b8060056000611a376120c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ae46120c1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b2991906137d7565b60405180910390a35050565b611b46611b406120c1565b8361223d565b611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90613a54565b60405180910390fd5b611b9184848484612798565b50505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060611beb82612055565b611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190613a14565b60405180910390fd5b6000611c346127f4565b90506000815111611c545760405180602001604052806000815250611c7f565b80611c5e84612886565b604051602001611c6f92919061374c565b6040516020818303038152906040525b915050919050565b611c8f6120c1565b73ffffffffffffffffffffffffffffffffffffffff16611cad6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa906139d4565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b611d376120c1565b73ffffffffffffffffffffffffffffffffffffffff16611d556117ca565b73ffffffffffffffffffffffffffffffffffffffff1614611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da2906139d4565b60405180910390fd5b60001515600c60039054906101000a900460ff16151514611dcb57600080fd5b6001600c60036101000a81548160ff021916908315150217905550611e14600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661053961221f565b565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611efb6120c1565b73ffffffffffffffffffffffffffffffffffffffff16611f196117ca565b73ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f66906139d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690613874565b60405180910390fd5b611fe881612577565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661213c836112bd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061219c600761263d565b60006121a86007612182565b905060458114156121ca576121bd600761263d565b6121c76007612182565b90505b6101a48114156121eb576121de600761263d565b6121e86007612182565b90505b61053981141561220c576121ff600761263d565b6122096007612182565b90505b612216838261221f565b80915050919050565b6122398282604051806020016040528060008152506129e7565b5050565b600061224882612055565b612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e906138f4565b60405180910390fd5b6000612292836112bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061230157508373ffffffffffffffffffffffffffffffffffffffff166122e98461099c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061231257506123118185611e16565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661233b826112bd565b73ffffffffffffffffffffffffffffffffffffffff1614612391576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612388906139f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f8906138b4565b60405180910390fd5b61240c838383612a42565b6124176000826120c9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124679190613c66565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124be9190613b85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b61265b6112a6565b1561269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269290613914565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126df6120c1565b6040516126ec9190613770565b60405180910390a1565b6126fe6112a6565b61273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490613834565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6127816120c1565b60405161278e9190613770565b60405180910390a1565b6127a384848461231b565b6127af84848484612b05565b6127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e590613854565b60405180910390fd5b50505050565b6060600d805461280390613d50565b80601f016020809104026020016040519081016040528092919081815260200182805461282f90613d50565b801561287c5780601f106128515761010080835404028352916020019161287c565b820191906000526020600020905b81548152906001019060200180831161285f57829003601f168201915b5050505050905090565b606060008214156128ce576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129e2565b600082905060005b600082146129005780806128e990613db3565b915050600a826128f99190613bdb565b91506128d6565b60008167ffffffffffffffff81111561291c5761291b613ee9565b5b6040519080825280601f01601f19166020018201604052801561294e5781602001600182028036833780820191505090505b5090505b600085146129db576001826129679190613c66565b9150600a856129769190613dfc565b60306129829190613b85565b60f81b81838151811061299857612997613eba565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129d49190613bdb565b9450612952565b8093505050505b919050565b6129f18383612c9c565b6129fe6000848484612b05565b612a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3490613854565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ab25750612a826117ca565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b0057612abf6112a6565b15612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af690613814565b60405180910390fd5b5b505050565b6000612b268473ffffffffffffffffffffffffffffffffffffffff16612e6a565b15612c8f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b4f6120c1565b8786866040518563ffffffff1660e01b8152600401612b71949392919061378b565b602060405180830381600087803b158015612b8b57600080fd5b505af1925050508015612bbc57506040513d601f19601f82011682018060405250810190612bb99190613340565b60015b612c3f573d8060008114612bec576040519150601f19603f3d011682016040523d82523d6000602084013e612bf1565b606091505b50600081511415612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e90613854565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c94565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390613994565b60405180910390fd5b612d1581612055565b15612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c90613894565b60405180910390fd5b612d6160008383612a42565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db19190613b85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e8990613d50565b90600052602060002090601f016020900481019282612eab5760008555612ef2565b82601f10612ec457805160ff1916838001178555612ef2565b82800160010185558215612ef2579182015b82811115612ef1578251825591602001919060010190612ed6565b5b509050612eff9190612f03565b5090565b5b80821115612f1c576000816000905550600101612f04565b5090565b6000612f33612f2e84613ab4565b613a8f565b90508083825260208201905082856020860282011115612f5657612f55613f1d565b5b60005b85811015612f865781612f6c8882613014565b845260208401935060208301925050600181019050612f59565b5050509392505050565b6000612fa3612f9e84613ae0565b613a8f565b905082815260208101848484011115612fbf57612fbe613f22565b5b612fca848285613d0e565b509392505050565b6000612fe5612fe084613b11565b613a8f565b90508281526020810184848401111561300157613000613f22565b5b61300c848285613d0e565b509392505050565b6000813590506130238161443b565b92915050565b600082601f83011261303e5761303d613f18565b5b813561304e848260208601612f20565b91505092915050565b60008135905061306681614452565b92915050565b60008135905061307b81614469565b92915050565b60008151905061309081614469565b92915050565b600082601f8301126130ab576130aa613f18565b5b81356130bb848260208601612f90565b91505092915050565b600082601f8301126130d9576130d8613f18565b5b81356130e9848260208601612fd2565b91505092915050565b60008135905061310181614480565b92915050565b60006020828403121561311d5761311c613f2c565b5b600061312b84828501613014565b91505092915050565b6000806040838503121561314b5761314a613f2c565b5b600061315985828601613014565b925050602061316a85828601613014565b9150509250929050565b60008060006060848603121561318d5761318c613f2c565b5b600061319b86828701613014565b93505060206131ac86828701613014565b92505060406131bd868287016130f2565b9150509250925092565b600080600080608085870312156131e1576131e0613f2c565b5b60006131ef87828801613014565b945050602061320087828801613014565b9350506040613211878288016130f2565b925050606085013567ffffffffffffffff81111561323257613231613f27565b5b61323e87828801613096565b91505092959194509250565b6000806040838503121561326157613260613f2c565b5b600061326f85828601613014565b925050602061328085828601613057565b9150509250929050565b600080604083850312156132a1576132a0613f2c565b5b60006132af85828601613014565b92505060206132c0858286016130f2565b9150509250929050565b6000602082840312156132e0576132df613f2c565b5b600082013567ffffffffffffffff8111156132fe576132fd613f27565b5b61330a84828501613029565b91505092915050565b60006020828403121561332957613328613f2c565b5b60006133378482850161306c565b91505092915050565b60006020828403121561335657613355613f2c565b5b600061336484828501613081565b91505092915050565b60006020828403121561338357613382613f2c565b5b600082013567ffffffffffffffff8111156133a1576133a0613f27565b5b6133ad848285016130c4565b91505092915050565b6000602082840312156133cc576133cb613f2c565b5b60006133da848285016130f2565b91505092915050565b6133ec81613c9a565b82525050565b6133fb81613cac565b82525050565b600061340c82613b42565b6134168185613b58565b9350613426818560208601613d1d565b61342f81613f31565b840191505092915050565b600061344582613b4d565b61344f8185613b69565b935061345f818560208601613d1d565b61346881613f31565b840191505092915050565b600061347e82613b4d565b6134888185613b7a565b9350613498818560208601613d1d565b80840191505092915050565b60006134b1602b83613b69565b91506134bc82613f42565b604082019050919050565b60006134d4601483613b69565b91506134df82613f91565b602082019050919050565b60006134f7603283613b69565b915061350282613fba565b604082019050919050565b600061351a602683613b69565b915061352582614009565b604082019050919050565b600061353d601c83613b69565b915061354882614058565b602082019050919050565b6000613560602483613b69565b915061356b82614081565b604082019050919050565b6000613583601983613b69565b915061358e826140d0565b602082019050919050565b60006135a6602c83613b69565b91506135b1826140f9565b604082019050919050565b60006135c9601083613b69565b91506135d482614148565b602082019050919050565b60006135ec603883613b69565b91506135f782614171565b604082019050919050565b600061360f602a83613b69565b915061361a826141c0565b604082019050919050565b6000613632602983613b69565b915061363d8261420f565b604082019050919050565b6000613655602083613b69565b91506136608261425e565b602082019050919050565b6000613678602c83613b69565b915061368382614287565b604082019050919050565b600061369b602083613b69565b91506136a6826142d6565b602082019050919050565b60006136be602983613b69565b91506136c9826142ff565b604082019050919050565b60006136e1602f83613b69565b91506136ec8261434e565b604082019050919050565b6000613704602183613b69565b915061370f8261439d565b604082019050919050565b6000613727603183613b69565b9150613732826143ec565b604082019050919050565b61374681613d04565b82525050565b60006137588285613473565b91506137648284613473565b91508190509392505050565b600060208201905061378560008301846133e3565b92915050565b60006080820190506137a060008301876133e3565b6137ad60208301866133e3565b6137ba604083018561373d565b81810360608301526137cc8184613401565b905095945050505050565b60006020820190506137ec60008301846133f2565b92915050565b6000602082019050818103600083015261380c818461343a565b905092915050565b6000602082019050818103600083015261382d816134a4565b9050919050565b6000602082019050818103600083015261384d816134c7565b9050919050565b6000602082019050818103600083015261386d816134ea565b9050919050565b6000602082019050818103600083015261388d8161350d565b9050919050565b600060208201905081810360008301526138ad81613530565b9050919050565b600060208201905081810360008301526138cd81613553565b9050919050565b600060208201905081810360008301526138ed81613576565b9050919050565b6000602082019050818103600083015261390d81613599565b9050919050565b6000602082019050818103600083015261392d816135bc565b9050919050565b6000602082019050818103600083015261394d816135df565b9050919050565b6000602082019050818103600083015261396d81613602565b9050919050565b6000602082019050818103600083015261398d81613625565b9050919050565b600060208201905081810360008301526139ad81613648565b9050919050565b600060208201905081810360008301526139cd8161366b565b9050919050565b600060208201905081810360008301526139ed8161368e565b9050919050565b60006020820190508181036000830152613a0d816136b1565b9050919050565b60006020820190508181036000830152613a2d816136d4565b9050919050565b60006020820190508181036000830152613a4d816136f7565b9050919050565b60006020820190508181036000830152613a6d8161371a565b9050919050565b6000602082019050613a89600083018461373d565b92915050565b6000613a99613aaa565b9050613aa58282613d82565b919050565b6000604051905090565b600067ffffffffffffffff821115613acf57613ace613ee9565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613afb57613afa613ee9565b5b613b0482613f31565b9050602081019050919050565b600067ffffffffffffffff821115613b2c57613b2b613ee9565b5b613b3582613f31565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b9082613d04565b9150613b9b83613d04565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bd057613bcf613e2d565b5b828201905092915050565b6000613be682613d04565b9150613bf183613d04565b925082613c0157613c00613e5c565b5b828204905092915050565b6000613c1782613d04565b9150613c2283613d04565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c5b57613c5a613e2d565b5b828202905092915050565b6000613c7182613d04565b9150613c7c83613d04565b925082821015613c8f57613c8e613e2d565b5b828203905092915050565b6000613ca582613ce4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d3b578082015181840152602081019050613d20565b83811115613d4a576000848401525b50505050565b60006002820490506001821680613d6857607f821691505b60208210811415613d7c57613d7b613e8b565b5b50919050565b613d8b82613f31565b810181811067ffffffffffffffff82111715613daa57613da9613ee9565b5b80604052505050565b6000613dbe82613d04565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613df157613df0613e2d565b5b600182019050919050565b6000613e0782613d04565b9150613e1283613d04565b925082613e2257613e21613e5c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61444481613c9a565b811461444f57600080fd5b50565b61445b81613cac565b811461446657600080fd5b50565b61447281613cb8565b811461447d57600080fd5b50565b61448981613d04565b811461449457600080fd5b5056fea264697066735822122051bf5e0089153f526f6cb7680ca6a62164df6d633dbb5deebb63c82d5803d90164736f6c63430008070033

Deployed Bytecode

0x60806040526004361061021a5760003560e01c806370a08231116101235780639752a017116100ab578063ca3cb5221161006f578063ca3cb52214610757578063cab093971461076e578063e985e9c514610785578063ebf0ab80146107c2578063f2fde38b146107ff5761021a565b80639752a01714610674578063a22cb4651461068b578063b88d4fde146106b4578063bc660cac146106dd578063c87b56dd1461071a5761021a565b8063819b25ba116100f2578063819b25ba1461059f57806384494708146105c85780638da5cb5b146105f357806391860f781461061e57806395d89b41146106495761021a565b806370a082311461050b578063715018a6146105485780637d8966e41461055f5780637f649783146105765761021a565b8063394dc2b7116101a65780635367de6a116101755780635367de6a1461043357806355f804b31461044f5780635c975abb146104785780636352211e146104a357806368428a1b146104e05761021a565b8063394dc2b71461039f5780633af32abf146103b65780633ccfd60b146103f357806342842e0e1461040a5761021a565b80630b4b9878116101ed5780630b4b9878146102ed57806318160ddd146103095780631b6ac55914610334578063235b6ea11461034b57806323b872dd146103765761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613313565b610828565b60405161025391906137d7565b60405180910390f35b34801561026857600080fd5b5061027161090a565b60405161027e91906137f2565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906133b6565b61099c565b6040516102bb9190613770565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061328a565b610a21565b005b610307600480360381019061030291906133b6565b610b39565b005b34801561031557600080fd5b5061031e610ca4565b60405161032b9190613a74565b60405180910390f35b34801561034057600080fd5b50610349610cb5565b005b34801561035757600080fd5b50610360610d9b565b60405161036d9190613a74565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190613174565b610da7565b005b3480156103ab57600080fd5b506103b4610e07565b005b3480156103c257600080fd5b506103dd60048036038101906103d89190613107565b610eee565b6040516103ea91906137d7565b60405180910390f35b3480156103ff57600080fd5b50610408610f44565b005b34801561041657600080fd5b50610431600480360381019061042c9190613174565b611097565b005b61044d600480360381019061044891906133b6565b6110b7565b005b34801561045b57600080fd5b506104766004803603810190610471919061336d565b611210565b005b34801561048457600080fd5b5061048d6112a6565b60405161049a91906137d7565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c591906133b6565b6112bd565b6040516104d79190613770565b60405180910390f35b3480156104ec57600080fd5b506104f561136f565b60405161050291906137d7565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190613107565b611386565b60405161053f9190613a74565b60405180910390f35b34801561055457600080fd5b5061055d61143e565b005b34801561056b57600080fd5b506105746114c6565b005b34801561058257600080fd5b5061059d600480360381019061059891906132ca565b61156e565b005b3480156105ab57600080fd5b506105c660048036038101906105c191906133b6565b6116de565b005b3480156105d457600080fd5b506105dd6117b3565b6040516105ea91906137d7565b60405180910390f35b3480156105ff57600080fd5b506106086117ca565b6040516106159190613770565b60405180910390f35b34801561062a57600080fd5b506106336117f4565b60405161064091906137f2565b60405180910390f35b34801561065557600080fd5b5061065e611882565b60405161066b91906137f2565b60405180910390f35b34801561068057600080fd5b50610689611914565b005b34801561069757600080fd5b506106b260048036038101906106ad919061324a565b6119b4565b005b3480156106c057600080fd5b506106db60048036038101906106d691906131c7565b611b35565b005b3480156106e957600080fd5b5061070460048036038101906106ff9190613107565b611b97565b6040516107119190613a74565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c91906133b6565b611be0565b60405161074e91906137f2565b60405180910390f35b34801561076357600080fd5b5061076c611c87565b005b34801561077a57600080fd5b50610783611d2f565b005b34801561079157600080fd5b506107ac60048036038101906107a79190613134565b611e16565b6040516107b991906137d7565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190613107565b611eaa565b6040516107f69190613a74565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190613107565b611ef3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610903575061090282611feb565b5b9050919050565b60606000805461091990613d50565b80601f016020809104026020016040519081016040528092919081815260200182805461094590613d50565b80156109925780601f1061096757610100808354040283529160200191610992565b820191906000526020600020905b81548152906001019060200180831161097557829003601f168201915b5050505050905090565b60006109a782612055565b6109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd906139b4565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2c826112bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9490613a34565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610abc6120c1565b73ffffffffffffffffffffffffffffffffffffffff161480610aeb5750610aea81610ae56120c1565b611e16565b5b610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2190613934565b60405180910390fd5b610b3483836120c9565b505050565b6009811115610b4757600080fd5b6003811115610b5557600080fd5b610b5e33610eee565b610b6757600080fd5b6701140bbd030c400081610b7b9190613c0c565b341015610b8757600080fd5b600381600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bd49190613b85565b1115610bdf57600080fd5b600c60009054906101000a900460ff16610bf857600080fd5b6000610c046007612182565b90506122b88282610c159190613b85565b1115610c2057600080fd5b60005b82811015610c9f576001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c7b9190613b85565b92505081905550610c8b33612190565b508080610c9790613db3565b915050610c23565b505050565b6000610cb06007612182565b905090565b610cbd6120c1565b73ffffffffffffffffffffffffffffffffffffffff16610cdb6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906139d4565b60405180910390fd5b60001515600c60029054906101000a900460ff16151514610d5157600080fd5b6001600c60026101000a81548160ff021916908315150217905550610d99600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604561221f565b565b6701140bbd030c400081565b610db8610db26120c1565b8261223d565b610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90613a54565b60405180910390fd5b610e0283838361231b565b505050565b610e0f6120c1565b73ffffffffffffffffffffffffffffffffffffffff16610e2d6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a906139d4565b60405180910390fd5b60001515600c60049054906101000a900460ff16151514610ea357600080fd5b6001600c60046101000a81548160ff021916908315150217905550610eec600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101a461221f565b565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f4c6120c1565b73ffffffffffffffffffffffffffffffffffffffff16610f6a6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb7906139d4565b60405180910390fd5b60004711610fcd57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646005476110189190613c0c565b6110229190613bdb565b9081150290604051600060405180830381858888f1935050505015801561104d573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611094573d6000803e3d6000fd5b50565b6110b283838360405180602001604052806000815250611b35565b505050565b60098111156110c557600080fd5b600c60019054906101000a900460ff166110de57600080fd5b60098111156110ec57600080fd5b60006110f86007612182565b90506122b882826111099190613b85565b111561111457600080fd5b600982600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111619190613b85565b111561116c57600080fd5b6701140bbd030c4000826111809190613c0c565b34101561118c57600080fd5b60005b8281101561120b576001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111e79190613b85565b925050819055506111f733612190565b50808061120390613db3565b91505061118f565b505050565b6112186120c1565b73ffffffffffffffffffffffffffffffffffffffff166112366117ca565b73ffffffffffffffffffffffffffffffffffffffff161461128c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611283906139d4565b60405180910390fd5b80600d90805190602001906112a2929190612e7d565b5050565b6000600660009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613974565b60405180910390fd5b80915050919050565b6000600c60019054906101000a900460ff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90613954565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114466120c1565b73ffffffffffffffffffffffffffffffffffffffff166114646117ca565b73ffffffffffffffffffffffffffffffffffffffff16146114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b1906139d4565b60405180910390fd5b6114c46000612577565b565b6114ce6120c1565b73ffffffffffffffffffffffffffffffffffffffff166114ec6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611539906139d4565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b6115766120c1565b73ffffffffffffffffffffffffffffffffffffffff166115946117ca565b73ffffffffffffffffffffffffffffffffffffffff16146115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e1906139d4565b60405180910390fd5b60005b81518110156116da5760016009600084848151811061160f5761160e613eba565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600a600084848151811061168157611680613eba565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806116d290613db3565b9150506115ed565b5050565b6116e66120c1565b73ffffffffffffffffffffffffffffffffffffffff166117046117ca565b73ffffffffffffffffffffffffffffffffffffffff161461175a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611751906139d4565b60405180910390fd5b60006117666007612182565b90505b818110156117af576122b881101561179c57611785600761263d565b61179b336001836117969190613b85565b61221f565b5b80806117a790613db3565b915050611769565b5050565b6000600c60009054906101000a900460ff16905090565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d805461180190613d50565b80601f016020809104026020016040519081016040528092919081815260200182805461182d90613d50565b801561187a5780601f1061184f5761010080835404028352916020019161187a565b820191906000526020600020905b81548152906001019060200180831161185d57829003601f168201915b505050505081565b60606001805461189190613d50565b80601f01602080910402602001604051908101604052809291908181526020018280546118bd90613d50565b801561190a5780601f106118df5761010080835404028352916020019161190a565b820191906000526020600020905b8154815290600101906020018083116118ed57829003601f168201915b5050505050905090565b61191c6120c1565b73ffffffffffffffffffffffffffffffffffffffff1661193a6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614611990576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611987906139d4565b60405180910390fd5b6119986112a6565b6119a9576119a4612653565b6119b2565b6119b16126f6565b5b565b6119bc6120c1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a21906138d4565b60405180910390fd5b8060056000611a376120c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ae46120c1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b2991906137d7565b60405180910390a35050565b611b46611b406120c1565b8361223d565b611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90613a54565b60405180910390fd5b611b9184848484612798565b50505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060611beb82612055565b611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190613a14565b60405180910390fd5b6000611c346127f4565b90506000815111611c545760405180602001604052806000815250611c7f565b80611c5e84612886565b604051602001611c6f92919061374c565b6040516020818303038152906040525b915050919050565b611c8f6120c1565b73ffffffffffffffffffffffffffffffffffffffff16611cad6117ca565b73ffffffffffffffffffffffffffffffffffffffff1614611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa906139d4565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b611d376120c1565b73ffffffffffffffffffffffffffffffffffffffff16611d556117ca565b73ffffffffffffffffffffffffffffffffffffffff1614611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da2906139d4565b60405180910390fd5b60001515600c60039054906101000a900460ff16151514611dcb57600080fd5b6001600c60036101000a81548160ff021916908315150217905550611e14600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661053961221f565b565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611efb6120c1565b73ffffffffffffffffffffffffffffffffffffffff16611f196117ca565b73ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f66906139d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690613874565b60405180910390fd5b611fe881612577565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661213c836112bd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061219c600761263d565b60006121a86007612182565b905060458114156121ca576121bd600761263d565b6121c76007612182565b90505b6101a48114156121eb576121de600761263d565b6121e86007612182565b90505b61053981141561220c576121ff600761263d565b6122096007612182565b90505b612216838261221f565b80915050919050565b6122398282604051806020016040528060008152506129e7565b5050565b600061224882612055565b612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e906138f4565b60405180910390fd5b6000612292836112bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061230157508373ffffffffffffffffffffffffffffffffffffffff166122e98461099c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061231257506123118185611e16565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661233b826112bd565b73ffffffffffffffffffffffffffffffffffffffff1614612391576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612388906139f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f8906138b4565b60405180910390fd5b61240c838383612a42565b6124176000826120c9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124679190613c66565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124be9190613b85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b61265b6112a6565b1561269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269290613914565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126df6120c1565b6040516126ec9190613770565b60405180910390a1565b6126fe6112a6565b61273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490613834565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6127816120c1565b60405161278e9190613770565b60405180910390a1565b6127a384848461231b565b6127af84848484612b05565b6127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e590613854565b60405180910390fd5b50505050565b6060600d805461280390613d50565b80601f016020809104026020016040519081016040528092919081815260200182805461282f90613d50565b801561287c5780601f106128515761010080835404028352916020019161287c565b820191906000526020600020905b81548152906001019060200180831161285f57829003601f168201915b5050505050905090565b606060008214156128ce576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129e2565b600082905060005b600082146129005780806128e990613db3565b915050600a826128f99190613bdb565b91506128d6565b60008167ffffffffffffffff81111561291c5761291b613ee9565b5b6040519080825280601f01601f19166020018201604052801561294e5781602001600182028036833780820191505090505b5090505b600085146129db576001826129679190613c66565b9150600a856129769190613dfc565b60306129829190613b85565b60f81b81838151811061299857612997613eba565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129d49190613bdb565b9450612952565b8093505050505b919050565b6129f18383612c9c565b6129fe6000848484612b05565b612a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3490613854565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ab25750612a826117ca565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b0057612abf6112a6565b15612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af690613814565b60405180910390fd5b5b505050565b6000612b268473ffffffffffffffffffffffffffffffffffffffff16612e6a565b15612c8f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b4f6120c1565b8786866040518563ffffffff1660e01b8152600401612b71949392919061378b565b602060405180830381600087803b158015612b8b57600080fd5b505af1925050508015612bbc57506040513d601f19601f82011682018060405250810190612bb99190613340565b60015b612c3f573d8060008114612bec576040519150601f19603f3d011682016040523d82523d6000602084013e612bf1565b606091505b50600081511415612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e90613854565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c94565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390613994565b60405180910390fd5b612d1581612055565b15612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c90613894565b60405180910390fd5b612d6160008383612a42565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db19190613b85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e8990613d50565b90600052602060002090601f016020900481019282612eab5760008555612ef2565b82601f10612ec457805160ff1916838001178555612ef2565b82800160010185558215612ef2579182015b82811115612ef1578251825591602001919060010190612ed6565b5b509050612eff9190612f03565b5090565b5b80821115612f1c576000816000905550600101612f04565b5090565b6000612f33612f2e84613ab4565b613a8f565b90508083825260208201905082856020860282011115612f5657612f55613f1d565b5b60005b85811015612f865781612f6c8882613014565b845260208401935060208301925050600181019050612f59565b5050509392505050565b6000612fa3612f9e84613ae0565b613a8f565b905082815260208101848484011115612fbf57612fbe613f22565b5b612fca848285613d0e565b509392505050565b6000612fe5612fe084613b11565b613a8f565b90508281526020810184848401111561300157613000613f22565b5b61300c848285613d0e565b509392505050565b6000813590506130238161443b565b92915050565b600082601f83011261303e5761303d613f18565b5b813561304e848260208601612f20565b91505092915050565b60008135905061306681614452565b92915050565b60008135905061307b81614469565b92915050565b60008151905061309081614469565b92915050565b600082601f8301126130ab576130aa613f18565b5b81356130bb848260208601612f90565b91505092915050565b600082601f8301126130d9576130d8613f18565b5b81356130e9848260208601612fd2565b91505092915050565b60008135905061310181614480565b92915050565b60006020828403121561311d5761311c613f2c565b5b600061312b84828501613014565b91505092915050565b6000806040838503121561314b5761314a613f2c565b5b600061315985828601613014565b925050602061316a85828601613014565b9150509250929050565b60008060006060848603121561318d5761318c613f2c565b5b600061319b86828701613014565b93505060206131ac86828701613014565b92505060406131bd868287016130f2565b9150509250925092565b600080600080608085870312156131e1576131e0613f2c565b5b60006131ef87828801613014565b945050602061320087828801613014565b9350506040613211878288016130f2565b925050606085013567ffffffffffffffff81111561323257613231613f27565b5b61323e87828801613096565b91505092959194509250565b6000806040838503121561326157613260613f2c565b5b600061326f85828601613014565b925050602061328085828601613057565b9150509250929050565b600080604083850312156132a1576132a0613f2c565b5b60006132af85828601613014565b92505060206132c0858286016130f2565b9150509250929050565b6000602082840312156132e0576132df613f2c565b5b600082013567ffffffffffffffff8111156132fe576132fd613f27565b5b61330a84828501613029565b91505092915050565b60006020828403121561332957613328613f2c565b5b60006133378482850161306c565b91505092915050565b60006020828403121561335657613355613f2c565b5b600061336484828501613081565b91505092915050565b60006020828403121561338357613382613f2c565b5b600082013567ffffffffffffffff8111156133a1576133a0613f27565b5b6133ad848285016130c4565b91505092915050565b6000602082840312156133cc576133cb613f2c565b5b60006133da848285016130f2565b91505092915050565b6133ec81613c9a565b82525050565b6133fb81613cac565b82525050565b600061340c82613b42565b6134168185613b58565b9350613426818560208601613d1d565b61342f81613f31565b840191505092915050565b600061344582613b4d565b61344f8185613b69565b935061345f818560208601613d1d565b61346881613f31565b840191505092915050565b600061347e82613b4d565b6134888185613b7a565b9350613498818560208601613d1d565b80840191505092915050565b60006134b1602b83613b69565b91506134bc82613f42565b604082019050919050565b60006134d4601483613b69565b91506134df82613f91565b602082019050919050565b60006134f7603283613b69565b915061350282613fba565b604082019050919050565b600061351a602683613b69565b915061352582614009565b604082019050919050565b600061353d601c83613b69565b915061354882614058565b602082019050919050565b6000613560602483613b69565b915061356b82614081565b604082019050919050565b6000613583601983613b69565b915061358e826140d0565b602082019050919050565b60006135a6602c83613b69565b91506135b1826140f9565b604082019050919050565b60006135c9601083613b69565b91506135d482614148565b602082019050919050565b60006135ec603883613b69565b91506135f782614171565b604082019050919050565b600061360f602a83613b69565b915061361a826141c0565b604082019050919050565b6000613632602983613b69565b915061363d8261420f565b604082019050919050565b6000613655602083613b69565b91506136608261425e565b602082019050919050565b6000613678602c83613b69565b915061368382614287565b604082019050919050565b600061369b602083613b69565b91506136a6826142d6565b602082019050919050565b60006136be602983613b69565b91506136c9826142ff565b604082019050919050565b60006136e1602f83613b69565b91506136ec8261434e565b604082019050919050565b6000613704602183613b69565b915061370f8261439d565b604082019050919050565b6000613727603183613b69565b9150613732826143ec565b604082019050919050565b61374681613d04565b82525050565b60006137588285613473565b91506137648284613473565b91508190509392505050565b600060208201905061378560008301846133e3565b92915050565b60006080820190506137a060008301876133e3565b6137ad60208301866133e3565b6137ba604083018561373d565b81810360608301526137cc8184613401565b905095945050505050565b60006020820190506137ec60008301846133f2565b92915050565b6000602082019050818103600083015261380c818461343a565b905092915050565b6000602082019050818103600083015261382d816134a4565b9050919050565b6000602082019050818103600083015261384d816134c7565b9050919050565b6000602082019050818103600083015261386d816134ea565b9050919050565b6000602082019050818103600083015261388d8161350d565b9050919050565b600060208201905081810360008301526138ad81613530565b9050919050565b600060208201905081810360008301526138cd81613553565b9050919050565b600060208201905081810360008301526138ed81613576565b9050919050565b6000602082019050818103600083015261390d81613599565b9050919050565b6000602082019050818103600083015261392d816135bc565b9050919050565b6000602082019050818103600083015261394d816135df565b9050919050565b6000602082019050818103600083015261396d81613602565b9050919050565b6000602082019050818103600083015261398d81613625565b9050919050565b600060208201905081810360008301526139ad81613648565b9050919050565b600060208201905081810360008301526139cd8161366b565b9050919050565b600060208201905081810360008301526139ed8161368e565b9050919050565b60006020820190508181036000830152613a0d816136b1565b9050919050565b60006020820190508181036000830152613a2d816136d4565b9050919050565b60006020820190508181036000830152613a4d816136f7565b9050919050565b60006020820190508181036000830152613a6d8161371a565b9050919050565b6000602082019050613a89600083018461373d565b92915050565b6000613a99613aaa565b9050613aa58282613d82565b919050565b6000604051905090565b600067ffffffffffffffff821115613acf57613ace613ee9565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613afb57613afa613ee9565b5b613b0482613f31565b9050602081019050919050565b600067ffffffffffffffff821115613b2c57613b2b613ee9565b5b613b3582613f31565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b9082613d04565b9150613b9b83613d04565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bd057613bcf613e2d565b5b828201905092915050565b6000613be682613d04565b9150613bf183613d04565b925082613c0157613c00613e5c565b5b828204905092915050565b6000613c1782613d04565b9150613c2283613d04565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c5b57613c5a613e2d565b5b828202905092915050565b6000613c7182613d04565b9150613c7c83613d04565b925082821015613c8f57613c8e613e2d565b5b828203905092915050565b6000613ca582613ce4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d3b578082015181840152602081019050613d20565b83811115613d4a576000848401525b50505050565b60006002820490506001821680613d6857607f821691505b60208210811415613d7c57613d7b613e8b565b5b50919050565b613d8b82613f31565b810181811067ffffffffffffffff82111715613daa57613da9613ee9565b5b80604052505050565b6000613dbe82613d04565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613df157613df0613e2d565b5b600182019050919050565b6000613e0782613d04565b9150613e1283613d04565b925082613e2257613e21613e5c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61444481613c9a565b811461444f57600080fd5b50565b61445b81613cac565b811461446657600080fd5b50565b61447281613cb8565b811461447d57600080fd5b50565b61448981613d04565b811461449457600080fd5b5056fea264697066735822122051bf5e0089153f526f6cb7680ca6a62164df6d633dbb5deebb63c82d5803d90164736f6c63430008070033

Deployed Bytecode Sourcemap

39812:5593:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19623:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20568:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22127:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21650:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42502:598;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41620:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40896:154;;;;;;;;;;;;;:::i;:::-;;40204:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23017:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41231:158;;;;;;;;;;;;;:::i;:::-;;41726:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44758:235;;;;;;;;;;;;;:::i;:::-;;23427:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43108:526;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41519:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32733:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20262:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41941:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19992:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37571:94;;;;;;;;;;;;;:::i;:::-;;44279:84;;;;;;;;;;;;;:::i;:::-;;42272:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44478:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41840:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36920:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40652:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20737:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44371:99;;;;;;;;;;;;;:::i;:::-;;22420:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23683:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42036:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20912:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44178:93;;;;;;;;;;;;;:::i;:::-;;41061:162;;;;;;;;;;;;;:::i;:::-;;22786:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42157:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37820:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19623:305;19725:4;19777:25;19762:40;;;:11;:40;;;;:105;;;;19834:33;19819:48;;;:11;:48;;;;19762:105;:158;;;;19884:36;19908:11;19884:23;:36::i;:::-;19762:158;19742:178;;19623:305;;;:::o;20568:100::-;20622:13;20655:5;20648:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20568:100;:::o;22127:221::-;22203:7;22231:16;22239:7;22231;:16::i;:::-;22223:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22316:15;:24;22332:7;22316:24;;;;;;;;;;;;;;;;;;;;;22309:31;;22127:221;;;:::o;21650:411::-;21731:13;21747:23;21762:7;21747:14;:23::i;:::-;21731:39;;21795:5;21789:11;;:2;:11;;;;21781:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21889:5;21873:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21898:37;21915:5;21922:12;:10;:12::i;:::-;21898:16;:37::i;:::-;21873:62;21851:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22032:21;22041:2;22045:7;22032:8;:21::i;:::-;21720:341;21650:411;;:::o;42502:598::-;40119:1;42578:6;:18;;42570:27;;;;;;40170:1;42616:6;:25;;42608:34;;;;;;42661:25;42675:10;42661:13;:25::i;:::-;42653:34;;;;;;40237:17;42719:6;:15;;;;:::i;:::-;42706:9;:28;;42698:37;;;;;;40170:1;42782:6;42754:13;:25;42768:10;42754:25;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;:53;;42746:62;;;;;;42827:14;;;;;;;;;;;42819:23;;;;;;42855:19;42877;:9;:17;:19::i;:::-;42855:41;;40072:4;42929:6;42915:11;:20;;;;:::i;:::-;:34;;42907:43;;;;;;42968:9;42963:130;42987:6;42983:1;:10;42963:130;;;43044:1;43015:13;:25;43029:10;43015:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;43060:21;43070:10;43060:9;:21::i;:::-;;42995:3;;;;;:::i;:::-;;;;42963:130;;;;42559:541;42502:598;:::o;41620:98::-;41664:7;41691:19;:9;:17;:19::i;:::-;41684:26;;41620:98;:::o;40896:154::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40964:5:::1;40951:18;;:9;;;;;;;;;;;:18;;;40943:27;;;::::0;::::1;;40993:4;40981:9;;:16;;;;;;;;;;;;;;;;;;41009:33;41019:18;;;;;;;;;;;41039:2;41009:9;:33::i;:::-;40896:154::o:0;40204:50::-;40237:17;40204:50;:::o;23017:339::-;23212:41;23231:12;:10;:12::i;:::-;23245:7;23212:18;:41::i;:::-;23204:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23320:28;23330:4;23336:2;23340:7;23320:9;:28::i;:::-;23017:339;;;:::o;41231:158::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41301:5:::1;41287:19;;:10;;;;;;;;;;;:19;;;41279:28;;;::::0;::::1;;41331:4;41318:10;;:17;;;;;;;;;;;;;;;;;;41347:34;41357:18;;;;;;;;;;;41377:3;41347:9;:34::i;:::-;41231:158::o:0;41726:106::-;41784:4;41808:10;:16;41819:4;41808:16;;;;;;;;;;;;;;;;;;;;;;;;;41801:23;;41726:106;;;:::o;44758:235::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44840:1:::1;44816:21;:25;44808:34;;;::::0;::::1;;44862:18;;;;;;;;;;;44854:36;;:69;44919:3;44915:1;44891:21;:25;;;;:::i;:::-;:31;;;;:::i;:::-;44854:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44942:10;44934:28;;:51;44963:21;44934:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44758:235::o:0;23427:185::-;23565:39;23582:4;23588:2;23592:7;23565:39;;;;;;;;;;;;:16;:39::i;:::-;23427:185;;;:::o;43108:526::-;40119:1;43177:6;:18;;43169:27;;;;;;43215:11;;;;;;;;;;;43207:20;;;;;;40119:1;43246:6;:18;;43238:27;;;;;;43277:19;43299;:9;:17;:19::i;:::-;43277:41;;40072:4;43351:6;43337:11;:20;;;;:::i;:::-;:34;;43329:43;;;;;;40119:1;43416:6;43391:10;:22;43402:10;43391:22;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;:43;;43383:52;;;;;;40237:17;43470:6;:15;;;;:::i;:::-;43457:9;:28;;43449:37;;;;;;43504:9;43499:128;43523:6;43519:1;:10;43499:128;;;43577:1;43551:10;:22;43562:10;43551:22;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;43594:21;43604:10;43594:9;:21::i;:::-;;43531:3;;;;;:::i;:::-;;;;43499:128;;;;43158:476;43108:526;:::o;41519:93::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41600:4:::1;41587:10;:17;;;;;;;;;;;;:::i;:::-;;41519:93:::0;:::o;32733:86::-;32780:4;32804:7;;;;;;;;;;;32797:14;;32733:86;:::o;20262:239::-;20334:7;20354:13;20370:7;:16;20378:7;20370:16;;;;;;;;;;;;;;;;;;;;;20354:32;;20422:1;20405:19;;:5;:19;;;;20397:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20488:5;20481:12;;;20262:239;;;:::o;41941:87::-;41984:4;42008:11;;;;;;;;;;;42001:18;;41941:87;:::o;19992:208::-;20064:7;20109:1;20092:19;;:5;:19;;;;20084:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20176:9;:16;20186:5;20176:16;;;;;;;;;;;;;;;;20169:23;;19992:208;;;:::o;37571:94::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37636:21:::1;37654:1;37636:9;:21::i;:::-;37571:94::o:0;44279:84::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44344:11:::1;;;;;;;;;;;44343:12;44329:11;;:26;;;;;;;;;;;;;;;;;;44279:84::o:0;42272:222::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42353:9:::1;42348:139;42372:5;:12;42368:1;:16;42348:139;;;42429:4;42406:10;:20;42417:5;42423:1;42417:8;;;;;;;;:::i;:::-;;;;;;;;42406:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;42474:1;42448:13;:23;42462:5;42468:1;42462:8;;;;;;;;:::i;:::-;;;;;;;;42448:23;;;;;;;;;;;;;;;:27;;;;42386:3;;;;;:::i;:::-;;;;42348:139;;;;42272:222:::0;:::o;44478:272::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44545:6:::1;44554:19;:9;:17;:19::i;:::-;44545:28;;44541:202;44579:8;44575:1;:12;44541:202;;;40072:4;44613:1;:14;44609:123;;;44648:21;:9;:19;:21::i;:::-;44688:28;44698:10;44714:1;44710;:5;;;;:::i;:::-;44688:9;:28::i;:::-;44609:123;44589:3;;;;;:::i;:::-;;;;44541:202;;;;44478:272:::0;:::o;41840:93::-;41886:4;41910:14;;;;;;;;;;;41903:21;;41840:93;:::o;36920:87::-;36966:7;36993:6;;;;;;;;;;;36986:13;;36920:87;:::o;40652:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20737:104::-;20793:13;20826:7;20819:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20737:104;:::o;44371:99::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44430:8:::1;:6;:8::i;:::-;:32;;44454:8;:6;:8::i;:::-;44430:32;;;44441:10;:8;:10::i;:::-;44430:32;44371:99::o:0;22420:295::-;22535:12;:10;:12::i;:::-;22523:24;;:8;:24;;;;22515:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22635:8;22590:18;:32;22609:12;:10;:12::i;:::-;22590:32;;;;;;;;;;;;;;;:42;22623:8;22590:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22688:8;22659:48;;22674:12;:10;:12::i;:::-;22659:48;;;22698:8;22659:48;;;;;;:::i;:::-;;;;;;;;22420:295;;:::o;23683:328::-;23858:41;23877:12;:10;:12::i;:::-;23891:7;23858:18;:41::i;:::-;23850:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23964:39;23978:4;23984:2;23988:7;23997:5;23964:13;:39::i;:::-;23683:328;;;;:::o;42036:113::-;42094:7;42121:13;:19;42135:4;42121:19;;;;;;;;;;;;;;;;42114:26;;42036:113;;;:::o;20912:334::-;20985:13;21019:16;21027:7;21019;:16::i;:::-;21011:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21100:21;21124:10;:8;:10::i;:::-;21100:34;;21176:1;21158:7;21152:21;:25;:86;;;;;;;;;;;;;;;;;21204:7;21213:18;:7;:16;:18::i;:::-;21187:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21152:86;21145:93;;;20912:334;;;:::o;44178:93::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44249:14:::1;;;;;;;;;;;44248:15;44231:14;;:32;;;;;;;;;;;;;;;;;;44178:93::o:0;41061:162::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41133:5:::1;41118:20;;:11;;;;;;;;;;;:20;;;41110:29;;;::::0;::::1;;41164:4;41150:11;;:18;;;;;;;;;;;;;;;;;;41180:35;41190:18;;;;;;;;;;;41210:4;41180:9;:35::i;:::-;41061:162::o:0;22786:164::-;22883:4;22907:18;:25;22926:5;22907:25;;;;;;;;;;;;;;;:35;22933:8;22907:35;;;;;;;;;;;;;;;;;;;;;;;;;22900:42;;22786:164;;;;:::o;42157:107::-;42212:7;42239:10;:16;42250:4;42239:16;;;;;;;;;;;;;;;;42232:23;;42157:107;;;:::o;37820:192::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37929:1:::1;37909:22;;:8;:22;;;;37901:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37985:19;37995:8;37985:9;:19::i;:::-;37820:192:::0;:::o;18232:157::-;18317:4;18356:25;18341:40;;;:11;:40;;;;18334:47;;18232:157;;;:::o;25521:127::-;25586:4;25638:1;25610:30;;:7;:16;25618:7;25610:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25603:37;;25521:127;;;:::o;15335:98::-;15388:7;15415:10;15408:17;;15335:98;:::o;29503:174::-;29605:2;29578:15;:24;29594:7;29578:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29661:7;29657:2;29623:46;;29632:23;29647:7;29632:14;:23::i;:::-;29623:46;;;;;;;;;;;;29503:174;;:::o;35417:114::-;35482:7;35509;:14;;;35502:21;;35417:114;;;:::o;43642:528::-;43691:7;43711:21;:9;:19;:21::i;:::-;43743:10;43756:19;:9;:17;:19::i;:::-;43743:32;;43795:2;43789;:8;43786:102;;;43814:21;:9;:19;:21::i;:::-;43856:19;:9;:17;:19::i;:::-;43851:24;;43786:102;43907:3;43901:2;:9;43898:103;;;43927:21;:9;:19;:21::i;:::-;43969:19;:9;:17;:19::i;:::-;43964:24;;43898:103;44020:4;44014:2;:10;44011:104;;;44041:21;:9;:19;:21::i;:::-;44083:19;:9;:17;:19::i;:::-;44078:24;;44011:104;44125:17;44135:2;44139;44125:9;:17::i;:::-;44160:2;44153:9;;;43642:528;;;:::o;26505:110::-;26581:26;26591:2;26595:7;26581:26;;;;;;;;;;;;:9;:26::i;:::-;26505:110;;:::o;25815:348::-;25908:4;25933:16;25941:7;25933;:16::i;:::-;25925:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26009:13;26025:23;26040:7;26025:14;:23::i;:::-;26009:39;;26078:5;26067:16;;:7;:16;;;:51;;;;26111:7;26087:31;;:20;26099:7;26087:11;:20::i;:::-;:31;;;26067:51;:87;;;;26122:32;26139:5;26146:7;26122:16;:32::i;:::-;26067:87;26059:96;;;25815:348;;;;:::o;28807:578::-;28966:4;28939:31;;:23;28954:7;28939:14;:23::i;:::-;:31;;;28931:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29049:1;29035:16;;:2;:16;;;;29027:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29105:39;29126:4;29132:2;29136:7;29105:20;:39::i;:::-;29209:29;29226:1;29230:7;29209:8;:29::i;:::-;29270:1;29251:9;:15;29261:4;29251:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29299:1;29282:9;:13;29292:2;29282:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29330:2;29311:7;:16;29319:7;29311:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29369:7;29365:2;29350:27;;29359:4;29350:27;;;;;;;;;;;;28807:578;;;:::o;38020:173::-;38076:16;38095:6;;;;;;;;;;;38076:25;;38121:8;38112:6;;:17;;;;;;;;;;;;;;;;;;38176:8;38145:40;;38166:8;38145:40;;;;;;;;;;;;38065:128;38020:173;:::o;35539:127::-;35646:1;35628:7;:14;;;:19;;;;;;;;;;;35539:127;:::o;33533:118::-;33059:8;:6;:8::i;:::-;33058:9;33050:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33603:4:::1;33593:7;;:14;;;;;;;;;;;;;;;;;;33623:20;33630:12;:10;:12::i;:::-;33623:20;;;;;;:::i;:::-;;;;;;;;33533:118::o:0;33792:120::-;33336:8;:6;:8::i;:::-;33328:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;33861:5:::1;33851:7;;:15;;;;;;;;;;;;;;;;;;33882:22;33891:12;:10;:12::i;:::-;33882:22;;;;;;:::i;:::-;;;;;;;;33792:120::o:0;24893:315::-;25050:28;25060:4;25066:2;25070:7;25050:9;:28::i;:::-;25097:48;25120:4;25126:2;25130:7;25139:5;25097:22;:48::i;:::-;25089:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24893:315;;;;:::o;41408:103::-;41460:13;41493:10;41486:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41408:103;:::o;15775:723::-;15831:13;16061:1;16052:5;:10;16048:53;;;16079:10;;;;;;;;;;;;;;;;;;;;;16048:53;16111:12;16126:5;16111:20;;16142:14;16167:78;16182:1;16174:4;:9;16167:78;;16200:8;;;;;:::i;:::-;;;;16231:2;16223:10;;;;;:::i;:::-;;;16167:78;;;16255:19;16287:6;16277:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16255:39;;16305:154;16321:1;16312:5;:10;16305:154;;16349:1;16339:11;;;;;:::i;:::-;;;16416:2;16408:5;:10;;;;:::i;:::-;16395:2;:24;;;;:::i;:::-;16382:39;;16365:6;16372;16365:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16445:2;16436:11;;;;;:::i;:::-;;;16305:154;;;16483:6;16469:21;;;;;15775:723;;;;:::o;26842:321::-;26972:18;26978:2;26982:7;26972:5;:18::i;:::-;27023:54;27054:1;27058:2;27062:7;27071:5;27023:22;:54::i;:::-;27001:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26842:321;;;:::o;45110:292::-;45276:1;45260:18;;:4;:18;;;45258:21;:43;;;;;45293:7;:5;:7::i;:::-;45285:15;;:4;:15;;;45283:18;45258:43;45254:141;;;45327:8;:6;:8::i;:::-;45326:9;45318:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45254:141;45110:292;;;:::o;30242:803::-;30397:4;30418:15;:2;:13;;;:15::i;:::-;30414:624;;;30470:2;30454:36;;;30491:12;:10;:12::i;:::-;30505:4;30511:7;30520:5;30454:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30450:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30717:1;30700:6;:13;:18;30696:272;;;30743:60;;;;;;;;;;:::i;:::-;;;;;;;;30696:272;30918:6;30912:13;30903:6;30899:2;30895:15;30888:38;30450:533;30587:45;;;30577:55;;;:6;:55;;;;30570:62;;;;;30414:624;31022:4;31015:11;;30242:803;;;;;;;:::o;27499:382::-;27593:1;27579:16;;:2;:16;;;;27571:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27652:16;27660:7;27652;:16::i;:::-;27651:17;27643:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27714:45;27743:1;27747:2;27751:7;27714:20;:45::i;:::-;27789:1;27772:9;:13;27782:2;27772:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27820:2;27801:7;:16;27809:7;27801:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27865:7;27861:2;27840:33;;27857:1;27840:33;;;;;;;;;;;;27499:382;;:::o;7682:387::-;7742:4;7950:12;8017:7;8005:20;7997:28;;8060:1;8053:4;:8;8046:15;;;7682: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:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:118::-;8928:24;8946:5;8928:24;:::i;:::-;8923:3;8916:37;8841:118;;:::o;8965:109::-;9046:21;9061:5;9046:21;:::i;:::-;9041:3;9034:34;8965:109;;:::o;9080:360::-;9166:3;9194:38;9226:5;9194:38;:::i;:::-;9248:70;9311:6;9306:3;9248:70;:::i;:::-;9241:77;;9327:52;9372:6;9367:3;9360:4;9353:5;9349:16;9327:52;:::i;:::-;9404:29;9426:6;9404:29;:::i;:::-;9399:3;9395:39;9388:46;;9170:270;9080:360;;;;:::o;9446:364::-;9534:3;9562:39;9595:5;9562:39;:::i;:::-;9617:71;9681:6;9676:3;9617:71;:::i;:::-;9610:78;;9697:52;9742:6;9737:3;9730:4;9723:5;9719:16;9697:52;:::i;:::-;9774:29;9796:6;9774:29;:::i;:::-;9769:3;9765:39;9758:46;;9538:272;9446:364;;;;:::o;9816:377::-;9922:3;9950:39;9983:5;9950:39;:::i;:::-;10005:89;10087:6;10082:3;10005:89;:::i;:::-;9998:96;;10103:52;10148:6;10143:3;10136:4;10129:5;10125:16;10103:52;:::i;:::-;10180:6;10175:3;10171:16;10164:23;;9926:267;9816:377;;;;:::o;10199:366::-;10341:3;10362:67;10426:2;10421:3;10362:67;:::i;:::-;10355:74;;10438:93;10527:3;10438:93;:::i;:::-;10556:2;10551:3;10547:12;10540:19;;10199:366;;;:::o;10571:::-;10713:3;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10810:93;10899:3;10810:93;:::i;:::-;10928:2;10923:3;10919:12;10912:19;;10571:366;;;:::o;10943:::-;11085:3;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11182:93;11271:3;11182:93;:::i;:::-;11300:2;11295:3;11291:12;11284:19;;10943:366;;;:::o;11315:::-;11457:3;11478:67;11542:2;11537:3;11478:67;:::i;:::-;11471:74;;11554:93;11643:3;11554:93;:::i;:::-;11672:2;11667:3;11663:12;11656:19;;11315:366;;;:::o;11687:::-;11829:3;11850:67;11914:2;11909:3;11850:67;:::i;:::-;11843:74;;11926:93;12015:3;11926:93;:::i;:::-;12044:2;12039:3;12035:12;12028:19;;11687:366;;;:::o;12059:::-;12201:3;12222:67;12286:2;12281:3;12222:67;:::i;:::-;12215:74;;12298:93;12387:3;12298:93;:::i;:::-;12416:2;12411:3;12407:12;12400:19;;12059:366;;;:::o;12431:::-;12573:3;12594:67;12658:2;12653:3;12594:67;:::i;:::-;12587:74;;12670:93;12759:3;12670:93;:::i;:::-;12788:2;12783:3;12779:12;12772:19;;12431:366;;;:::o;12803:::-;12945:3;12966:67;13030:2;13025:3;12966:67;:::i;:::-;12959:74;;13042:93;13131:3;13042:93;:::i;:::-;13160:2;13155:3;13151:12;13144:19;;12803:366;;;:::o;13175:::-;13317:3;13338:67;13402:2;13397:3;13338:67;:::i;:::-;13331:74;;13414:93;13503:3;13414:93;:::i;:::-;13532:2;13527:3;13523:12;13516:19;;13175:366;;;:::o;13547:::-;13689:3;13710:67;13774:2;13769:3;13710:67;:::i;:::-;13703:74;;13786:93;13875:3;13786:93;:::i;:::-;13904:2;13899:3;13895:12;13888:19;;13547:366;;;:::o;13919:::-;14061:3;14082:67;14146:2;14141:3;14082:67;:::i;:::-;14075:74;;14158:93;14247:3;14158:93;:::i;:::-;14276:2;14271:3;14267:12;14260:19;;13919:366;;;:::o;14291:::-;14433:3;14454:67;14518:2;14513:3;14454:67;:::i;:::-;14447:74;;14530:93;14619:3;14530:93;:::i;:::-;14648:2;14643:3;14639:12;14632:19;;14291:366;;;:::o;14663:::-;14805:3;14826:67;14890:2;14885:3;14826:67;:::i;:::-;14819:74;;14902:93;14991:3;14902:93;:::i;:::-;15020:2;15015:3;15011:12;15004:19;;14663:366;;;:::o;15035:::-;15177:3;15198:67;15262:2;15257:3;15198:67;:::i;:::-;15191:74;;15274:93;15363:3;15274:93;:::i;:::-;15392:2;15387:3;15383:12;15376:19;;15035:366;;;:::o;15407:::-;15549:3;15570:67;15634:2;15629:3;15570:67;:::i;:::-;15563:74;;15646:93;15735:3;15646:93;:::i;:::-;15764:2;15759:3;15755:12;15748:19;;15407:366;;;:::o;15779:::-;15921:3;15942:67;16006:2;16001:3;15942:67;:::i;:::-;15935:74;;16018:93;16107:3;16018:93;:::i;:::-;16136:2;16131:3;16127:12;16120:19;;15779:366;;;:::o;16151:::-;16293:3;16314:67;16378:2;16373:3;16314:67;:::i;:::-;16307:74;;16390:93;16479:3;16390:93;:::i;:::-;16508:2;16503:3;16499:12;16492:19;;16151:366;;;:::o;16523:::-;16665:3;16686:67;16750:2;16745:3;16686:67;:::i;:::-;16679:74;;16762:93;16851:3;16762:93;:::i;:::-;16880:2;16875:3;16871:12;16864:19;;16523:366;;;:::o;16895:::-;17037:3;17058:67;17122:2;17117:3;17058:67;:::i;:::-;17051:74;;17134:93;17223:3;17134:93;:::i;:::-;17252:2;17247:3;17243:12;17236:19;;16895:366;;;:::o;17267:118::-;17354:24;17372:5;17354:24;:::i;:::-;17349:3;17342:37;17267:118;;:::o;17391:435::-;17571:3;17593:95;17684:3;17675:6;17593:95;:::i;:::-;17586:102;;17705:95;17796:3;17787:6;17705:95;:::i;:::-;17698:102;;17817:3;17810:10;;17391:435;;;;;:::o;17832:222::-;17925:4;17963:2;17952:9;17948:18;17940:26;;17976:71;18044:1;18033:9;18029:17;18020:6;17976:71;:::i;:::-;17832:222;;;;:::o;18060:640::-;18255:4;18293:3;18282:9;18278:19;18270:27;;18307:71;18375:1;18364:9;18360:17;18351:6;18307:71;:::i;:::-;18388:72;18456:2;18445:9;18441:18;18432:6;18388:72;:::i;:::-;18470;18538:2;18527:9;18523:18;18514:6;18470:72;:::i;:::-;18589:9;18583:4;18579:20;18574:2;18563:9;18559:18;18552:48;18617:76;18688:4;18679:6;18617:76;:::i;:::-;18609:84;;18060:640;;;;;;;:::o;18706:210::-;18793:4;18831:2;18820:9;18816:18;18808:26;;18844:65;18906:1;18895:9;18891:17;18882:6;18844:65;:::i;:::-;18706:210;;;;:::o;18922:313::-;19035:4;19073:2;19062:9;19058:18;19050:26;;19122:9;19116:4;19112:20;19108:1;19097:9;19093:17;19086:47;19150:78;19223:4;19214:6;19150:78;:::i;:::-;19142:86;;18922:313;;;;:::o;19241:419::-;19407:4;19445:2;19434:9;19430:18;19422:26;;19494:9;19488:4;19484:20;19480:1;19469:9;19465:17;19458:47;19522:131;19648:4;19522:131;:::i;:::-;19514:139;;19241:419;;;:::o;19666:::-;19832:4;19870:2;19859:9;19855:18;19847:26;;19919:9;19913:4;19909:20;19905:1;19894:9;19890:17;19883:47;19947:131;20073:4;19947:131;:::i;:::-;19939:139;;19666:419;;;:::o;20091:::-;20257:4;20295:2;20284:9;20280:18;20272:26;;20344:9;20338:4;20334:20;20330:1;20319:9;20315:17;20308:47;20372:131;20498:4;20372:131;:::i;:::-;20364:139;;20091:419;;;:::o;20516:::-;20682:4;20720:2;20709:9;20705:18;20697:26;;20769:9;20763:4;20759:20;20755:1;20744:9;20740:17;20733:47;20797:131;20923:4;20797:131;:::i;:::-;20789:139;;20516:419;;;:::o;20941:::-;21107:4;21145:2;21134:9;21130:18;21122:26;;21194:9;21188:4;21184:20;21180:1;21169:9;21165:17;21158:47;21222:131;21348:4;21222:131;:::i;:::-;21214:139;;20941:419;;;:::o;21366:::-;21532:4;21570:2;21559:9;21555:18;21547:26;;21619:9;21613:4;21609:20;21605:1;21594:9;21590:17;21583:47;21647:131;21773:4;21647:131;:::i;:::-;21639:139;;21366:419;;;:::o;21791:::-;21957:4;21995:2;21984:9;21980:18;21972:26;;22044:9;22038:4;22034:20;22030:1;22019:9;22015:17;22008:47;22072:131;22198:4;22072:131;:::i;:::-;22064:139;;21791:419;;;:::o;22216:::-;22382:4;22420:2;22409:9;22405:18;22397:26;;22469:9;22463:4;22459:20;22455:1;22444:9;22440:17;22433:47;22497:131;22623:4;22497:131;:::i;:::-;22489:139;;22216:419;;;:::o;22641:::-;22807:4;22845:2;22834:9;22830:18;22822:26;;22894:9;22888:4;22884:20;22880:1;22869:9;22865:17;22858:47;22922:131;23048:4;22922:131;:::i;:::-;22914:139;;22641:419;;;:::o;23066:::-;23232:4;23270:2;23259:9;23255:18;23247:26;;23319:9;23313:4;23309:20;23305:1;23294:9;23290:17;23283:47;23347:131;23473:4;23347:131;:::i;:::-;23339:139;;23066:419;;;:::o;23491:::-;23657:4;23695:2;23684:9;23680:18;23672:26;;23744:9;23738:4;23734:20;23730:1;23719:9;23715:17;23708:47;23772:131;23898:4;23772:131;:::i;:::-;23764:139;;23491:419;;;:::o;23916:::-;24082:4;24120:2;24109:9;24105:18;24097:26;;24169:9;24163:4;24159:20;24155:1;24144:9;24140:17;24133:47;24197:131;24323:4;24197:131;:::i;:::-;24189:139;;23916:419;;;:::o;24341:::-;24507:4;24545:2;24534:9;24530:18;24522:26;;24594:9;24588:4;24584:20;24580:1;24569:9;24565:17;24558:47;24622:131;24748:4;24622:131;:::i;:::-;24614:139;;24341:419;;;:::o;24766:::-;24932:4;24970:2;24959:9;24955:18;24947:26;;25019:9;25013:4;25009:20;25005:1;24994:9;24990:17;24983:47;25047:131;25173:4;25047:131;:::i;:::-;25039:139;;24766:419;;;:::o;25191:::-;25357:4;25395:2;25384:9;25380:18;25372:26;;25444:9;25438:4;25434:20;25430:1;25419:9;25415:17;25408:47;25472:131;25598:4;25472:131;:::i;:::-;25464:139;;25191:419;;;:::o;25616:::-;25782:4;25820:2;25809:9;25805:18;25797:26;;25869:9;25863:4;25859:20;25855:1;25844:9;25840:17;25833:47;25897:131;26023:4;25897:131;:::i;:::-;25889:139;;25616:419;;;:::o;26041:::-;26207:4;26245:2;26234:9;26230:18;26222:26;;26294:9;26288:4;26284:20;26280:1;26269:9;26265:17;26258:47;26322:131;26448:4;26322:131;:::i;:::-;26314:139;;26041:419;;;:::o;26466:::-;26632:4;26670:2;26659:9;26655:18;26647:26;;26719:9;26713:4;26709:20;26705:1;26694:9;26690:17;26683:47;26747:131;26873:4;26747:131;:::i;:::-;26739:139;;26466:419;;;:::o;26891:::-;27057:4;27095:2;27084:9;27080:18;27072:26;;27144:9;27138:4;27134:20;27130:1;27119:9;27115:17;27108:47;27172:131;27298:4;27172:131;:::i;:::-;27164:139;;26891:419;;;:::o;27316:222::-;27409:4;27447:2;27436:9;27432:18;27424:26;;27460:71;27528:1;27517:9;27513:17;27504:6;27460:71;:::i;:::-;27316:222;;;;:::o;27544:129::-;27578:6;27605:20;;:::i;:::-;27595:30;;27634:33;27662:4;27654:6;27634:33;:::i;:::-;27544:129;;;:::o;27679:75::-;27712:6;27745:2;27739:9;27729:19;;27679:75;:::o;27760:311::-;27837:4;27927:18;27919:6;27916:30;27913:56;;;27949:18;;:::i;:::-;27913:56;27999:4;27991:6;27987:17;27979:25;;28059:4;28053;28049:15;28041:23;;27760:311;;;:::o;28077:307::-;28138:4;28228:18;28220:6;28217:30;28214:56;;;28250:18;;:::i;:::-;28214:56;28288:29;28310:6;28288:29;:::i;:::-;28280:37;;28372:4;28366;28362:15;28354:23;;28077:307;;;:::o;28390:308::-;28452:4;28542:18;28534:6;28531:30;28528:56;;;28564:18;;:::i;:::-;28528:56;28602:29;28624:6;28602:29;:::i;:::-;28594:37;;28686:4;28680;28676:15;28668:23;;28390:308;;;:::o;28704:98::-;28755:6;28789:5;28783:12;28773:22;;28704:98;;;:::o;28808:99::-;28860:6;28894:5;28888:12;28878:22;;28808:99;;;:::o;28913:168::-;28996:11;29030:6;29025:3;29018:19;29070:4;29065:3;29061:14;29046:29;;28913:168;;;;:::o;29087:169::-;29171:11;29205:6;29200:3;29193:19;29245:4;29240:3;29236:14;29221:29;;29087:169;;;;:::o;29262:148::-;29364:11;29401:3;29386:18;;29262:148;;;;:::o;29416:305::-;29456:3;29475:20;29493:1;29475:20;:::i;:::-;29470:25;;29509:20;29527:1;29509:20;:::i;:::-;29504:25;;29663:1;29595:66;29591:74;29588:1;29585:81;29582:107;;;29669:18;;:::i;:::-;29582:107;29713:1;29710;29706:9;29699:16;;29416:305;;;;:::o;29727:185::-;29767:1;29784:20;29802:1;29784:20;:::i;:::-;29779:25;;29818:20;29836:1;29818:20;:::i;:::-;29813:25;;29857:1;29847:35;;29862:18;;:::i;:::-;29847:35;29904:1;29901;29897:9;29892:14;;29727:185;;;;:::o;29918:348::-;29958:7;29981:20;29999:1;29981:20;:::i;:::-;29976:25;;30015:20;30033:1;30015:20;:::i;:::-;30010:25;;30203:1;30135:66;30131:74;30128:1;30125:81;30120:1;30113:9;30106:17;30102:105;30099:131;;;30210:18;;:::i;:::-;30099:131;30258:1;30255;30251:9;30240:20;;29918:348;;;;:::o;30272:191::-;30312:4;30332:20;30350:1;30332:20;:::i;:::-;30327:25;;30366:20;30384:1;30366:20;:::i;:::-;30361:25;;30405:1;30402;30399:8;30396:34;;;30410:18;;:::i;:::-;30396:34;30455:1;30452;30448:9;30440:17;;30272:191;;;;:::o;30469:96::-;30506:7;30535:24;30553:5;30535:24;:::i;:::-;30524:35;;30469:96;;;:::o;30571:90::-;30605:7;30648:5;30641:13;30634:21;30623:32;;30571:90;;;:::o;30667:149::-;30703:7;30743:66;30736:5;30732:78;30721:89;;30667:149;;;:::o;30822:126::-;30859:7;30899:42;30892:5;30888:54;30877:65;;30822:126;;;:::o;30954:77::-;30991:7;31020:5;31009:16;;30954:77;;;:::o;31037:154::-;31121:6;31116:3;31111;31098:30;31183:1;31174:6;31169:3;31165:16;31158:27;31037:154;;;:::o;31197:307::-;31265:1;31275:113;31289:6;31286:1;31283:13;31275:113;;;31374:1;31369:3;31365:11;31359:18;31355:1;31350:3;31346:11;31339:39;31311:2;31308:1;31304:10;31299:15;;31275:113;;;31406:6;31403:1;31400:13;31397:101;;;31486:1;31477:6;31472:3;31468:16;31461:27;31397:101;31246:258;31197:307;;;:::o;31510:320::-;31554:6;31591:1;31585:4;31581:12;31571:22;;31638:1;31632:4;31628:12;31659:18;31649:81;;31715:4;31707:6;31703:17;31693:27;;31649:81;31777:2;31769:6;31766:14;31746:18;31743:38;31740:84;;;31796:18;;:::i;:::-;31740:84;31561:269;31510:320;;;:::o;31836:281::-;31919:27;31941:4;31919:27;:::i;:::-;31911:6;31907:40;32049:6;32037:10;32034:22;32013:18;32001:10;31998:34;31995:62;31992:88;;;32060:18;;:::i;:::-;31992:88;32100:10;32096:2;32089:22;31879:238;31836:281;;:::o;32123:233::-;32162:3;32185:24;32203:5;32185:24;:::i;:::-;32176:33;;32231:66;32224:5;32221:77;32218:103;;;32301:18;;:::i;:::-;32218:103;32348:1;32341:5;32337:13;32330:20;;32123:233;;;:::o;32362:176::-;32394:1;32411:20;32429:1;32411:20;:::i;:::-;32406:25;;32445:20;32463:1;32445:20;:::i;:::-;32440:25;;32484:1;32474:35;;32489:18;;:::i;:::-;32474:35;32530:1;32527;32523:9;32518:14;;32362:176;;;;:::o;32544:180::-;32592:77;32589:1;32582:88;32689:4;32686:1;32679:15;32713:4;32710:1;32703:15;32730:180;32778:77;32775:1;32768:88;32875:4;32872:1;32865:15;32899:4;32896:1;32889:15;32916:180;32964:77;32961:1;32954:88;33061:4;33058:1;33051:15;33085:4;33082:1;33075:15;33102:180;33150:77;33147:1;33140:88;33247:4;33244:1;33237:15;33271:4;33268:1;33261:15;33288:180;33336:77;33333:1;33326:88;33433:4;33430:1;33423:15;33457:4;33454:1;33447:15;33474:117;33583:1;33580;33573:12;33597:117;33706:1;33703;33696:12;33720:117;33829:1;33826;33819:12;33843:117;33952:1;33949;33942:12;33966:117;34075:1;34072;34065:12;34089:102;34130:6;34181:2;34177:7;34172:2;34165:5;34161:14;34157:28;34147:38;;34089:102;;;:::o;34197:230::-;34337:34;34333:1;34325:6;34321:14;34314:58;34406:13;34401:2;34393:6;34389:15;34382:38;34197:230;:::o;34433:170::-;34573:22;34569:1;34561:6;34557:14;34550:46;34433:170;:::o;34609:237::-;34749:34;34745:1;34737:6;34733:14;34726:58;34818:20;34813:2;34805:6;34801:15;34794:45;34609:237;:::o;34852:225::-;34992:34;34988:1;34980:6;34976:14;34969:58;35061:8;35056:2;35048:6;35044:15;35037:33;34852:225;:::o;35083:178::-;35223:30;35219:1;35211:6;35207:14;35200:54;35083:178;:::o;35267:223::-;35407:34;35403:1;35395:6;35391:14;35384:58;35476:6;35471:2;35463:6;35459:15;35452:31;35267:223;:::o;35496:175::-;35636:27;35632:1;35624:6;35620:14;35613:51;35496:175;:::o;35677:231::-;35817:34;35813:1;35805:6;35801:14;35794:58;35886:14;35881:2;35873:6;35869:15;35862:39;35677:231;:::o;35914:166::-;36054:18;36050:1;36042:6;36038:14;36031:42;35914:166;:::o;36086:243::-;36226:34;36222:1;36214:6;36210:14;36203:58;36295:26;36290:2;36282:6;36278:15;36271:51;36086:243;:::o;36335:229::-;36475:34;36471:1;36463:6;36459:14;36452:58;36544:12;36539:2;36531:6;36527:15;36520:37;36335:229;:::o;36570:228::-;36710:34;36706:1;36698:6;36694:14;36687:58;36779:11;36774:2;36766:6;36762:15;36755:36;36570:228;:::o;36804:182::-;36944:34;36940:1;36932:6;36928:14;36921:58;36804:182;:::o;36992:231::-;37132:34;37128:1;37120:6;37116:14;37109:58;37201:14;37196:2;37188:6;37184:15;37177:39;36992:231;:::o;37229:182::-;37369:34;37365:1;37357:6;37353:14;37346:58;37229:182;:::o;37417:228::-;37557:34;37553:1;37545:6;37541:14;37534:58;37626:11;37621:2;37613:6;37609:15;37602:36;37417:228;:::o;37651:234::-;37791:34;37787:1;37779:6;37775:14;37768:58;37860:17;37855:2;37847:6;37843:15;37836:42;37651:234;:::o;37891:220::-;38031:34;38027:1;38019:6;38015:14;38008:58;38100:3;38095:2;38087:6;38083:15;38076:28;37891:220;:::o;38117:236::-;38257:34;38253:1;38245:6;38241:14;38234:58;38326:19;38321:2;38313:6;38309:15;38302:44;38117:236;:::o;38359:122::-;38432:24;38450:5;38432:24;:::i;:::-;38425:5;38422:35;38412:63;;38471:1;38468;38461:12;38412:63;38359:122;:::o;38487:116::-;38557:21;38572:5;38557:21;:::i;:::-;38550:5;38547:32;38537:60;;38593:1;38590;38583:12;38537:60;38487:116;:::o;38609:120::-;38681:23;38698:5;38681:23;:::i;:::-;38674:5;38671:34;38661:62;;38719:1;38716;38709:12;38661:62;38609:120;:::o;38735:122::-;38808:24;38826:5;38808:24;:::i;:::-;38801:5;38798:35;38788:63;;38847:1;38844;38837:12;38788:63;38735:122;:::o

Swarm Source

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