ETH Price: $3,337.60 (-1.10%)
Gas: 9 Gwei

Token

Pixel Doge (Pixel Doge)
 

Overview

Max Total Supply

196 Pixel Doge

Holders

42

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
14 Pixel Doge
0x91338ccfb8c0adb7756034a82008531d7713009d
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:
PixelDoge

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-15
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


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

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

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


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


pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


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



pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


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


pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


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



pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}


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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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


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



pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}


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



pragma solidity ^0.8.0;

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


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



pragma solidity ^0.8.0;







/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`. creds Ba
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}


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



pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


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



pragma solidity ^0.8.0;


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}





pragma solidity ^0.8.0;

contract PixelDoge is ERC721Enumerable, Ownable {
    using Strings for uint256;
    event Mint(address indexed sender, uint256 startWith, uint256 times);

    //supply counters
    uint256 public totalMints;
    uint256 public totalCount = 10000;
   
    //token Index tracker
    uint256 public maxBatch = 10;
    uint256 public price = 0.03 * 10 ** 18;

    //string
    string public baseURI;

    //bool
    bool private started;
    
    //constructor args
    constructor(string memory name_, string memory symbol_, string memory baseURI_) ERC721(name_, symbol_) {
        baseURI = baseURI_;
    }

    //basic functions.
    function _baseURI() internal view virtual override returns (string memory){
        return baseURI;
    }
    function setBaseURI(string memory _newURI) public onlyOwner {
        baseURI = _newURI;
    }

    //erc721
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token.");

        string memory baseURI2 = _baseURI();
        return bytes(baseURI2).length > 0
            ? string(abi.encodePacked(baseURI2, tokenId.toString(), ".json")) : '.json';
    }
    function setStart(bool _start) public onlyOwner {
        started = _start;
    }

    function tokensOfOwner(address owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 count = balanceOf(owner);
        uint256[] memory ids = new uint256[](count);
        for (uint256 i = 0; i < count; i++) {
            ids[i] = tokenOfOwnerByIndex(owner, i);
        }
        return ids;
    }

    function mint(uint256 _times) payable public {
        require(started, "not started");
        require(_times >0 && _times <= maxBatch, "must mint fewer in each batch");
        require(totalMints + _times <= totalCount, "max supply reached!");
        require(msg.value == _times * price, "value error, please check price.");
        payable(owner()).transfer(msg.value);
        emit Mint(_msgSender(), totalMints+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalMints++);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"startWith","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"times","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052612710600c55600a600d55666a94d74f430000600e553480156200002757600080fd5b50604051620043743803806200437483398181016040528101906200004d9190620002b5565b828281600090805190602001906200006792919062000193565b5080600190805190602001906200008092919062000193565b505050620000a362000097620000c560201b60201c565b620000cd60201b60201c565b80600f9080519060200190620000bb92919062000193565b5050505062000487565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001a190620003f3565b90600052602060002090601f016020900481019282620001c5576000855562000211565b82601f10620001e057805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000210578251825591602001919060010190620001f3565b5b50905062000220919062000224565b5090565b5b808211156200023f57600081600090555060010162000225565b5090565b60006200025a62000254846200038a565b62000356565b9050828152602081018484840111156200027357600080fd5b62000280848285620003bd565b509392505050565b600082601f8301126200029a57600080fd5b8151620002ac84826020860162000243565b91505092915050565b600080600060608486031215620002cb57600080fd5b600084015167ffffffffffffffff811115620002e657600080fd5b620002f48682870162000288565b935050602084015167ffffffffffffffff8111156200031257600080fd5b620003208682870162000288565b925050604084015167ffffffffffffffff8111156200033e57600080fd5b6200034c8682870162000288565b9150509250925092565b6000604051905081810181811067ffffffffffffffff8211171562000380576200037f62000458565b5b8060405250919050565b600067ffffffffffffffff821115620003a857620003a762000458565b5b601f19601f8301169050602081019050919050565b60005b83811015620003dd578082015181840152602081019050620003c0565b83811115620003ed576000848401525b50505050565b600060028204905060018216806200040c57607f821691505b6020821081141562000423576200042262000429565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613edd80620004976000396000f3fe6080604052600436106101b75760003560e01c806368e24327116100ec578063a035b1fe1161008a578063b88d4fde11610064578063b88d4fde14610613578063c87b56dd1461063c578063e985e9c514610679578063f2fde38b146106b6576101b7565b8063a035b1fe146105a3578063a0712d68146105ce578063a22cb465146105ea576101b7565b8063715018a6116100c6578063715018a6146104f95780638462151c146105105780638da5cb5b1461054d57806395d89b4114610578576101b7565b806368e24327146104685780636c0360eb1461049157806370a08231146104bc576101b7565b80632f745c59116101595780634f6ccce7116101335780634f6ccce71461039a57806355f804b3146103d75780636352211e1461040057806367765b871461043d576101b7565b80632f745c591461030957806334eafb111461034657806342842e0e14610371576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631f21bfbf146102b557806323b872dd146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612c1c565b6106df565b6040516101f091906136b9565b60405180910390f35b34801561020557600080fd5b5061020e610759565b60405161021b91906136d4565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612caf565b6107eb565b6040516102589190613630565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612bb7565b610870565b005b34801561029657600080fd5b5061029f610988565b6040516102ac91906139b6565b60405180910390f35b3480156102c157600080fd5b506102ca610995565b6040516102d791906139b6565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190612ab1565b61099b565b005b34801561031557600080fd5b50610330600480360381019061032b9190612bb7565b6109fb565b60405161033d91906139b6565b60405180910390f35b34801561035257600080fd5b5061035b610aa0565b60405161036891906139b6565b60405180910390f35b34801561037d57600080fd5b5061039860048036038101906103939190612ab1565b610aa6565b005b3480156103a657600080fd5b506103c160048036038101906103bc9190612caf565b610ac6565b6040516103ce91906139b6565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190612c6e565b610b5d565b005b34801561040c57600080fd5b5061042760048036038101906104229190612caf565b610bf3565b6040516104349190613630565b60405180910390f35b34801561044957600080fd5b50610452610ca5565b60405161045f91906139b6565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190612bf3565b610cab565b005b34801561049d57600080fd5b506104a6610d44565b6040516104b391906136d4565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de9190612a4c565b610dd2565b6040516104f091906139b6565b60405180910390f35b34801561050557600080fd5b5061050e610e8a565b005b34801561051c57600080fd5b5061053760048036038101906105329190612a4c565b610f12565b6040516105449190613697565b60405180910390f35b34801561055957600080fd5b5061056261100c565b60405161056f9190613630565b60405180910390f35b34801561058457600080fd5b5061058d611036565b60405161059a91906136d4565b60405180910390f35b3480156105af57600080fd5b506105b86110c8565b6040516105c591906139b6565b60405180910390f35b6105e860048036038101906105e39190612caf565b6110ce565b005b3480156105f657600080fd5b50610611600480360381019061060c9190612b7b565b611317565b005b34801561061f57600080fd5b5061063a60048036038101906106359190612b00565b611498565b005b34801561064857600080fd5b50610663600480360381019061065e9190612caf565b6114fa565b60405161067091906136d4565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190612a75565b6115c7565b6040516106ad91906136b9565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190612a4c565b61165b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610752575061075182611753565b5b9050919050565b60606000805461076890613cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461079490613cd2565b80156107e15780601f106107b6576101008083540402835291602001916107e1565b820191906000526020600020905b8154815290600101906020018083116107c457829003601f168201915b5050505050905090565b60006107f682611835565b610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082c90613856565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061087b82610bf3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e3906138d6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661090b6118a1565b73ffffffffffffffffffffffffffffffffffffffff16148061093a5750610939816109346118a1565b6115c7565b5b610979576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610970906137d6565b60405180910390fd5b61098383836118a9565b505050565b6000600880549050905090565b600b5481565b6109ac6109a66118a1565b82611962565b6109eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e290613916565b60405180910390fd5b6109f6838383611a40565b505050565b6000610a0683610dd2565b8210610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e906136f6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c5481565b610ac183838360405180602001604052806000815250611498565b505050565b6000610ad0610988565b8210610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890613936565b60405180910390fd5b60088281548110610b4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610b656118a1565b73ffffffffffffffffffffffffffffffffffffffff16610b8361100c565b73ffffffffffffffffffffffffffffffffffffffff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090613876565b60405180910390fd5b80600f9080519060200190610bef929190612870565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9390613816565b60405180910390fd5b80915050919050565b600d5481565b610cb36118a1565b73ffffffffffffffffffffffffffffffffffffffff16610cd161100c565b73ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613876565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b600f8054610d5190613cd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7d90613cd2565b8015610dca5780601f10610d9f57610100808354040283529160200191610dca565b820191906000526020600020905b815481529060010190602001808311610dad57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a906137f6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e926118a1565b73ffffffffffffffffffffffffffffffffffffffff16610eb061100c565b73ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd90613876565b60405180910390fd5b610f106000611c9c565b565b60606000610f1f83610dd2565b905060008167ffffffffffffffff811115610f63577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610f915781602001602082028036833780820191505090505b50905060005b8281101561100157610fa985826109fb565b828281518110610fe2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610ff990613d04565b915050610f97565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461104590613cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461107190613cd2565b80156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b5050505050905090565b600e5481565b601060009054906101000a900460ff1661111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490613956565b60405180910390fd5b60008111801561112f5750600d548111155b61116e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611165906138b6565b60405180910390fd5b600c5481600b5461117f9190613b07565b11156111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613996565b60405180910390fd5b600e54816111ce9190613b8e565b341461120f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611206906138f6565b60405180910390fd5b61121761100c565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561125c573d6000803e3d6000fd5b506112656118a1565b73ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f6001600b546112ab9190613b07565b836040516112ba9291906139d1565b60405180910390a260005b81811015611313576113006112d86118a1565b600b60008154809291906112eb90613d04565b9190505560016112fb9190613b07565b611d62565b808061130b90613d04565b9150506112c5565b5050565b61131f6118a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490613796565b60405180910390fd5b806005600061139a6118a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114476118a1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161148c91906136b9565b60405180910390a35050565b6114a96114a36118a1565b83611962565b6114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613916565b60405180910390fd5b6114f484848484611f30565b50505050565b606061150582611835565b611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613976565b60405180910390fd5b600061154e611f8c565b90506000815111611594576040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506115bf565b8061159e8461201e565b6040516020016115af929190613601565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116636118a1565b73ffffffffffffffffffffffffffffffffffffffff1661168161100c565b73ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613876565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173e90613736565b60405180910390fd5b61175081611c9c565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061181e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061182e575061182d826121cb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661191c83610bf3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061196d82611835565b6119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a3906137b6565b60405180910390fd5b60006119b783610bf3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a2657508373ffffffffffffffffffffffffffffffffffffffff16611a0e846107eb565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a375750611a3681856115c7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a6082610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90613896565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613776565b60405180910390fd5b611b31838383612235565b611b3c6000826118a9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8c9190613be8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611be39190613b07565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc990613836565b60405180910390fd5b611ddb81611835565b15611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290613756565b60405180910390fd5b611e2760008383612235565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e779190613b07565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611f3b848484611a40565b611f4784848484612349565b611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613716565b60405180910390fd5b50505050565b6060600f8054611f9b90613cd2565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc790613cd2565b80156120145780601f10611fe957610100808354040283529160200191612014565b820191906000526020600020905b815481529060010190602001808311611ff757829003601f168201915b5050505050905090565b60606000821415612066576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121c6565b600082905060005b6000821461209857808061208190613d04565b915050600a826120919190613b5d565b915061206e565b60008167ffffffffffffffff8111156120da577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561210c5781602001600182028036833780820191505090505b5090505b600085146121bf576001826121259190613be8565b9150600a856121349190613d4d565b60306121409190613b07565b60f81b81838151811061217c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121b89190613b5d565b9450612110565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122408383836124e0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122835761227e816124e5565b6122c2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122c1576122c0838261252e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612305576123008161269b565b612344565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123435761234282826127de565b5b5b505050565b600061236a8473ffffffffffffffffffffffffffffffffffffffff1661285d565b156124d3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123936118a1565b8786866040518563ffffffff1660e01b81526004016123b5949392919061364b565b602060405180830381600087803b1580156123cf57600080fd5b505af192505050801561240057506040513d601f19601f820116820180604052508101906123fd9190612c45565b60015b612483573d8060008114612430576040519150601f19603f3d011682016040523d82523d6000602084013e612435565b606091505b5060008151141561247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290613716565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124d8565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161253b84610dd2565b6125459190613be8565b905060006007600084815260200190815260200160002054905081811461262a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126af9190613be8565b9050600060096000848152602001908152602001600020549050600060088381548110612705577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061274d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806127c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006127e983610dd2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b82805461287c90613cd2565b90600052602060002090601f01602090048101928261289e57600085556128e5565b82601f106128b757805160ff19168380011785556128e5565b828001600101855582156128e5579182015b828111156128e45782518255916020019190600101906128c9565b5b5090506128f291906128f6565b5090565b5b8082111561290f5760008160009055506001016128f7565b5090565b600061292661292184613a2b565b6139fa565b90508281526020810184848401111561293e57600080fd5b612949848285613c90565b509392505050565b600061296461295f84613a5b565b6139fa565b90508281526020810184848401111561297c57600080fd5b612987848285613c90565b509392505050565b60008135905061299e81613e4b565b92915050565b6000813590506129b381613e62565b92915050565b6000813590506129c881613e79565b92915050565b6000815190506129dd81613e79565b92915050565b600082601f8301126129f457600080fd5b8135612a04848260208601612913565b91505092915050565b600082601f830112612a1e57600080fd5b8135612a2e848260208601612951565b91505092915050565b600081359050612a4681613e90565b92915050565b600060208284031215612a5e57600080fd5b6000612a6c8482850161298f565b91505092915050565b60008060408385031215612a8857600080fd5b6000612a968582860161298f565b9250506020612aa78582860161298f565b9150509250929050565b600080600060608486031215612ac657600080fd5b6000612ad48682870161298f565b9350506020612ae58682870161298f565b9250506040612af686828701612a37565b9150509250925092565b60008060008060808587031215612b1657600080fd5b6000612b248782880161298f565b9450506020612b358782880161298f565b9350506040612b4687828801612a37565b925050606085013567ffffffffffffffff811115612b6357600080fd5b612b6f878288016129e3565b91505092959194509250565b60008060408385031215612b8e57600080fd5b6000612b9c8582860161298f565b9250506020612bad858286016129a4565b9150509250929050565b60008060408385031215612bca57600080fd5b6000612bd88582860161298f565b9250506020612be985828601612a37565b9150509250929050565b600060208284031215612c0557600080fd5b6000612c13848285016129a4565b91505092915050565b600060208284031215612c2e57600080fd5b6000612c3c848285016129b9565b91505092915050565b600060208284031215612c5757600080fd5b6000612c65848285016129ce565b91505092915050565b600060208284031215612c8057600080fd5b600082013567ffffffffffffffff811115612c9a57600080fd5b612ca684828501612a0d565b91505092915050565b600060208284031215612cc157600080fd5b6000612ccf84828501612a37565b91505092915050565b6000612ce483836135e3565b60208301905092915050565b612cf981613c1c565b82525050565b6000612d0a82613a9b565b612d148185613ac9565b9350612d1f83613a8b565b8060005b83811015612d50578151612d378882612cd8565b9750612d4283613abc565b925050600181019050612d23565b5085935050505092915050565b612d6681613c2e565b82525050565b6000612d7782613aa6565b612d818185613ada565b9350612d91818560208601613c9f565b612d9a81613e3a565b840191505092915050565b6000612db082613ab1565b612dba8185613aeb565b9350612dca818560208601613c9f565b612dd381613e3a565b840191505092915050565b6000612de982613ab1565b612df38185613afc565b9350612e03818560208601613c9f565b80840191505092915050565b6000612e1c602b83613aeb565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000612e82603283613aeb565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612ee8602683613aeb565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f4e601c83613aeb565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612f8e602483613aeb565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ff4601983613aeb565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613034602c83613aeb565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061309a603883613aeb565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613100602a83613aeb565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613166602983613aeb565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006131cc602083613aeb565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061320c602c83613aeb565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613272600583613afc565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b60006132b2602083613aeb565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006132f2602983613aeb565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613358601d83613aeb565b91507f6d757374206d696e7420666577657220696e20656163682062617463680000006000830152602082019050919050565b6000613398602183613aeb565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133fe602083613aeb565b91507f76616c7565206572726f722c20706c6561736520636865636b2070726963652e6000830152602082019050919050565b600061343e603183613aeb565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006134a4602c83613aeb565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061350a600b83613aeb565b91507f6e6f7420737461727465640000000000000000000000000000000000000000006000830152602082019050919050565b600061354a603083613aeb565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e2e000000000000000000000000000000006020830152604082019050919050565b60006135b0601383613aeb565b91507f6d617820737570706c79207265616368656421000000000000000000000000006000830152602082019050919050565b6135ec81613c86565b82525050565b6135fb81613c86565b82525050565b600061360d8285612dde565b91506136198284612dde565b915061362482613265565b91508190509392505050565b60006020820190506136456000830184612cf0565b92915050565b60006080820190506136606000830187612cf0565b61366d6020830186612cf0565b61367a60408301856135f2565b818103606083015261368c8184612d6c565b905095945050505050565b600060208201905081810360008301526136b18184612cff565b905092915050565b60006020820190506136ce6000830184612d5d565b92915050565b600060208201905081810360008301526136ee8184612da5565b905092915050565b6000602082019050818103600083015261370f81612e0f565b9050919050565b6000602082019050818103600083015261372f81612e75565b9050919050565b6000602082019050818103600083015261374f81612edb565b9050919050565b6000602082019050818103600083015261376f81612f41565b9050919050565b6000602082019050818103600083015261378f81612f81565b9050919050565b600060208201905081810360008301526137af81612fe7565b9050919050565b600060208201905081810360008301526137cf81613027565b9050919050565b600060208201905081810360008301526137ef8161308d565b9050919050565b6000602082019050818103600083015261380f816130f3565b9050919050565b6000602082019050818103600083015261382f81613159565b9050919050565b6000602082019050818103600083015261384f816131bf565b9050919050565b6000602082019050818103600083015261386f816131ff565b9050919050565b6000602082019050818103600083015261388f816132a5565b9050919050565b600060208201905081810360008301526138af816132e5565b9050919050565b600060208201905081810360008301526138cf8161334b565b9050919050565b600060208201905081810360008301526138ef8161338b565b9050919050565b6000602082019050818103600083015261390f816133f1565b9050919050565b6000602082019050818103600083015261392f81613431565b9050919050565b6000602082019050818103600083015261394f81613497565b9050919050565b6000602082019050818103600083015261396f816134fd565b9050919050565b6000602082019050818103600083015261398f8161353d565b9050919050565b600060208201905081810360008301526139af816135a3565b9050919050565b60006020820190506139cb60008301846135f2565b92915050565b60006040820190506139e660008301856135f2565b6139f360208301846135f2565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715613a2157613a20613e0b565b5b8060405250919050565b600067ffffffffffffffff821115613a4657613a45613e0b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613a7657613a75613e0b565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b1282613c86565b9150613b1d83613c86565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b5257613b51613d7e565b5b828201905092915050565b6000613b6882613c86565b9150613b7383613c86565b925082613b8357613b82613dad565b5b828204905092915050565b6000613b9982613c86565b9150613ba483613c86565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bdd57613bdc613d7e565b5b828202905092915050565b6000613bf382613c86565b9150613bfe83613c86565b925082821015613c1157613c10613d7e565b5b828203905092915050565b6000613c2782613c66565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cbd578082015181840152602081019050613ca2565b83811115613ccc576000848401525b50505050565b60006002820490506001821680613cea57607f821691505b60208210811415613cfe57613cfd613ddc565b5b50919050565b6000613d0f82613c86565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d4257613d41613d7e565b5b600182019050919050565b6000613d5882613c86565b9150613d6383613c86565b925082613d7357613d72613dad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613e5481613c1c565b8114613e5f57600080fd5b50565b613e6b81613c2e565b8114613e7657600080fd5b50565b613e8281613c3a565b8114613e8d57600080fd5b50565b613e9981613c86565b8114613ea457600080fd5b5056fea264697066735822122044242a11714e07f5f1abe20671e066ba35987e5d0ff28ee927ff8e45b4f5c85164736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a506978656c20446f676500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a506978656c20446f676500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002868747470733a2f2f6e66747370726f6a656374732e636f6d2f6e66742f506978656c5f446f67652f000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101b75760003560e01c806368e24327116100ec578063a035b1fe1161008a578063b88d4fde11610064578063b88d4fde14610613578063c87b56dd1461063c578063e985e9c514610679578063f2fde38b146106b6576101b7565b8063a035b1fe146105a3578063a0712d68146105ce578063a22cb465146105ea576101b7565b8063715018a6116100c6578063715018a6146104f95780638462151c146105105780638da5cb5b1461054d57806395d89b4114610578576101b7565b806368e24327146104685780636c0360eb1461049157806370a08231146104bc576101b7565b80632f745c59116101595780634f6ccce7116101335780634f6ccce71461039a57806355f804b3146103d75780636352211e1461040057806367765b871461043d576101b7565b80632f745c591461030957806334eafb111461034657806342842e0e14610371576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631f21bfbf146102b557806323b872dd146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612c1c565b6106df565b6040516101f091906136b9565b60405180910390f35b34801561020557600080fd5b5061020e610759565b60405161021b91906136d4565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612caf565b6107eb565b6040516102589190613630565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612bb7565b610870565b005b34801561029657600080fd5b5061029f610988565b6040516102ac91906139b6565b60405180910390f35b3480156102c157600080fd5b506102ca610995565b6040516102d791906139b6565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190612ab1565b61099b565b005b34801561031557600080fd5b50610330600480360381019061032b9190612bb7565b6109fb565b60405161033d91906139b6565b60405180910390f35b34801561035257600080fd5b5061035b610aa0565b60405161036891906139b6565b60405180910390f35b34801561037d57600080fd5b5061039860048036038101906103939190612ab1565b610aa6565b005b3480156103a657600080fd5b506103c160048036038101906103bc9190612caf565b610ac6565b6040516103ce91906139b6565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190612c6e565b610b5d565b005b34801561040c57600080fd5b5061042760048036038101906104229190612caf565b610bf3565b6040516104349190613630565b60405180910390f35b34801561044957600080fd5b50610452610ca5565b60405161045f91906139b6565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190612bf3565b610cab565b005b34801561049d57600080fd5b506104a6610d44565b6040516104b391906136d4565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de9190612a4c565b610dd2565b6040516104f091906139b6565b60405180910390f35b34801561050557600080fd5b5061050e610e8a565b005b34801561051c57600080fd5b5061053760048036038101906105329190612a4c565b610f12565b6040516105449190613697565b60405180910390f35b34801561055957600080fd5b5061056261100c565b60405161056f9190613630565b60405180910390f35b34801561058457600080fd5b5061058d611036565b60405161059a91906136d4565b60405180910390f35b3480156105af57600080fd5b506105b86110c8565b6040516105c591906139b6565b60405180910390f35b6105e860048036038101906105e39190612caf565b6110ce565b005b3480156105f657600080fd5b50610611600480360381019061060c9190612b7b565b611317565b005b34801561061f57600080fd5b5061063a60048036038101906106359190612b00565b611498565b005b34801561064857600080fd5b50610663600480360381019061065e9190612caf565b6114fa565b60405161067091906136d4565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190612a75565b6115c7565b6040516106ad91906136b9565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190612a4c565b61165b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610752575061075182611753565b5b9050919050565b60606000805461076890613cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461079490613cd2565b80156107e15780601f106107b6576101008083540402835291602001916107e1565b820191906000526020600020905b8154815290600101906020018083116107c457829003601f168201915b5050505050905090565b60006107f682611835565b610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082c90613856565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061087b82610bf3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e3906138d6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661090b6118a1565b73ffffffffffffffffffffffffffffffffffffffff16148061093a5750610939816109346118a1565b6115c7565b5b610979576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610970906137d6565b60405180910390fd5b61098383836118a9565b505050565b6000600880549050905090565b600b5481565b6109ac6109a66118a1565b82611962565b6109eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e290613916565b60405180910390fd5b6109f6838383611a40565b505050565b6000610a0683610dd2565b8210610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e906136f6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c5481565b610ac183838360405180602001604052806000815250611498565b505050565b6000610ad0610988565b8210610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890613936565b60405180910390fd5b60088281548110610b4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610b656118a1565b73ffffffffffffffffffffffffffffffffffffffff16610b8361100c565b73ffffffffffffffffffffffffffffffffffffffff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090613876565b60405180910390fd5b80600f9080519060200190610bef929190612870565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9390613816565b60405180910390fd5b80915050919050565b600d5481565b610cb36118a1565b73ffffffffffffffffffffffffffffffffffffffff16610cd161100c565b73ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613876565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b600f8054610d5190613cd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7d90613cd2565b8015610dca5780601f10610d9f57610100808354040283529160200191610dca565b820191906000526020600020905b815481529060010190602001808311610dad57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a906137f6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e926118a1565b73ffffffffffffffffffffffffffffffffffffffff16610eb061100c565b73ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd90613876565b60405180910390fd5b610f106000611c9c565b565b60606000610f1f83610dd2565b905060008167ffffffffffffffff811115610f63577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610f915781602001602082028036833780820191505090505b50905060005b8281101561100157610fa985826109fb565b828281518110610fe2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610ff990613d04565b915050610f97565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461104590613cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461107190613cd2565b80156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b5050505050905090565b600e5481565b601060009054906101000a900460ff1661111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490613956565b60405180910390fd5b60008111801561112f5750600d548111155b61116e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611165906138b6565b60405180910390fd5b600c5481600b5461117f9190613b07565b11156111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613996565b60405180910390fd5b600e54816111ce9190613b8e565b341461120f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611206906138f6565b60405180910390fd5b61121761100c565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561125c573d6000803e3d6000fd5b506112656118a1565b73ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f6001600b546112ab9190613b07565b836040516112ba9291906139d1565b60405180910390a260005b81811015611313576113006112d86118a1565b600b60008154809291906112eb90613d04565b9190505560016112fb9190613b07565b611d62565b808061130b90613d04565b9150506112c5565b5050565b61131f6118a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490613796565b60405180910390fd5b806005600061139a6118a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114476118a1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161148c91906136b9565b60405180910390a35050565b6114a96114a36118a1565b83611962565b6114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613916565b60405180910390fd5b6114f484848484611f30565b50505050565b606061150582611835565b611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613976565b60405180910390fd5b600061154e611f8c565b90506000815111611594576040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506115bf565b8061159e8461201e565b6040516020016115af929190613601565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116636118a1565b73ffffffffffffffffffffffffffffffffffffffff1661168161100c565b73ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613876565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173e90613736565b60405180910390fd5b61175081611c9c565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061181e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061182e575061182d826121cb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661191c83610bf3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061196d82611835565b6119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a3906137b6565b60405180910390fd5b60006119b783610bf3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a2657508373ffffffffffffffffffffffffffffffffffffffff16611a0e846107eb565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a375750611a3681856115c7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a6082610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90613896565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613776565b60405180910390fd5b611b31838383612235565b611b3c6000826118a9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8c9190613be8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611be39190613b07565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc990613836565b60405180910390fd5b611ddb81611835565b15611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290613756565b60405180910390fd5b611e2760008383612235565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e779190613b07565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611f3b848484611a40565b611f4784848484612349565b611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613716565b60405180910390fd5b50505050565b6060600f8054611f9b90613cd2565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc790613cd2565b80156120145780601f10611fe957610100808354040283529160200191612014565b820191906000526020600020905b815481529060010190602001808311611ff757829003601f168201915b5050505050905090565b60606000821415612066576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121c6565b600082905060005b6000821461209857808061208190613d04565b915050600a826120919190613b5d565b915061206e565b60008167ffffffffffffffff8111156120da577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561210c5781602001600182028036833780820191505090505b5090505b600085146121bf576001826121259190613be8565b9150600a856121349190613d4d565b60306121409190613b07565b60f81b81838151811061217c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121b89190613b5d565b9450612110565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122408383836124e0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122835761227e816124e5565b6122c2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122c1576122c0838261252e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612305576123008161269b565b612344565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123435761234282826127de565b5b5b505050565b600061236a8473ffffffffffffffffffffffffffffffffffffffff1661285d565b156124d3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123936118a1565b8786866040518563ffffffff1660e01b81526004016123b5949392919061364b565b602060405180830381600087803b1580156123cf57600080fd5b505af192505050801561240057506040513d601f19601f820116820180604052508101906123fd9190612c45565b60015b612483573d8060008114612430576040519150601f19603f3d011682016040523d82523d6000602084013e612435565b606091505b5060008151141561247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290613716565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124d8565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161253b84610dd2565b6125459190613be8565b905060006007600084815260200190815260200160002054905081811461262a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126af9190613be8565b9050600060096000848152602001908152602001600020549050600060088381548110612705577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061274d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806127c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006127e983610dd2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b82805461287c90613cd2565b90600052602060002090601f01602090048101928261289e57600085556128e5565b82601f106128b757805160ff19168380011785556128e5565b828001600101855582156128e5579182015b828111156128e45782518255916020019190600101906128c9565b5b5090506128f291906128f6565b5090565b5b8082111561290f5760008160009055506001016128f7565b5090565b600061292661292184613a2b565b6139fa565b90508281526020810184848401111561293e57600080fd5b612949848285613c90565b509392505050565b600061296461295f84613a5b565b6139fa565b90508281526020810184848401111561297c57600080fd5b612987848285613c90565b509392505050565b60008135905061299e81613e4b565b92915050565b6000813590506129b381613e62565b92915050565b6000813590506129c881613e79565b92915050565b6000815190506129dd81613e79565b92915050565b600082601f8301126129f457600080fd5b8135612a04848260208601612913565b91505092915050565b600082601f830112612a1e57600080fd5b8135612a2e848260208601612951565b91505092915050565b600081359050612a4681613e90565b92915050565b600060208284031215612a5e57600080fd5b6000612a6c8482850161298f565b91505092915050565b60008060408385031215612a8857600080fd5b6000612a968582860161298f565b9250506020612aa78582860161298f565b9150509250929050565b600080600060608486031215612ac657600080fd5b6000612ad48682870161298f565b9350506020612ae58682870161298f565b9250506040612af686828701612a37565b9150509250925092565b60008060008060808587031215612b1657600080fd5b6000612b248782880161298f565b9450506020612b358782880161298f565b9350506040612b4687828801612a37565b925050606085013567ffffffffffffffff811115612b6357600080fd5b612b6f878288016129e3565b91505092959194509250565b60008060408385031215612b8e57600080fd5b6000612b9c8582860161298f565b9250506020612bad858286016129a4565b9150509250929050565b60008060408385031215612bca57600080fd5b6000612bd88582860161298f565b9250506020612be985828601612a37565b9150509250929050565b600060208284031215612c0557600080fd5b6000612c13848285016129a4565b91505092915050565b600060208284031215612c2e57600080fd5b6000612c3c848285016129b9565b91505092915050565b600060208284031215612c5757600080fd5b6000612c65848285016129ce565b91505092915050565b600060208284031215612c8057600080fd5b600082013567ffffffffffffffff811115612c9a57600080fd5b612ca684828501612a0d565b91505092915050565b600060208284031215612cc157600080fd5b6000612ccf84828501612a37565b91505092915050565b6000612ce483836135e3565b60208301905092915050565b612cf981613c1c565b82525050565b6000612d0a82613a9b565b612d148185613ac9565b9350612d1f83613a8b565b8060005b83811015612d50578151612d378882612cd8565b9750612d4283613abc565b925050600181019050612d23565b5085935050505092915050565b612d6681613c2e565b82525050565b6000612d7782613aa6565b612d818185613ada565b9350612d91818560208601613c9f565b612d9a81613e3a565b840191505092915050565b6000612db082613ab1565b612dba8185613aeb565b9350612dca818560208601613c9f565b612dd381613e3a565b840191505092915050565b6000612de982613ab1565b612df38185613afc565b9350612e03818560208601613c9f565b80840191505092915050565b6000612e1c602b83613aeb565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000612e82603283613aeb565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612ee8602683613aeb565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f4e601c83613aeb565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612f8e602483613aeb565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ff4601983613aeb565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613034602c83613aeb565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061309a603883613aeb565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613100602a83613aeb565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613166602983613aeb565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006131cc602083613aeb565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061320c602c83613aeb565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613272600583613afc565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b60006132b2602083613aeb565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006132f2602983613aeb565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613358601d83613aeb565b91507f6d757374206d696e7420666577657220696e20656163682062617463680000006000830152602082019050919050565b6000613398602183613aeb565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133fe602083613aeb565b91507f76616c7565206572726f722c20706c6561736520636865636b2070726963652e6000830152602082019050919050565b600061343e603183613aeb565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006134a4602c83613aeb565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061350a600b83613aeb565b91507f6e6f7420737461727465640000000000000000000000000000000000000000006000830152602082019050919050565b600061354a603083613aeb565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e2e000000000000000000000000000000006020830152604082019050919050565b60006135b0601383613aeb565b91507f6d617820737570706c79207265616368656421000000000000000000000000006000830152602082019050919050565b6135ec81613c86565b82525050565b6135fb81613c86565b82525050565b600061360d8285612dde565b91506136198284612dde565b915061362482613265565b91508190509392505050565b60006020820190506136456000830184612cf0565b92915050565b60006080820190506136606000830187612cf0565b61366d6020830186612cf0565b61367a60408301856135f2565b818103606083015261368c8184612d6c565b905095945050505050565b600060208201905081810360008301526136b18184612cff565b905092915050565b60006020820190506136ce6000830184612d5d565b92915050565b600060208201905081810360008301526136ee8184612da5565b905092915050565b6000602082019050818103600083015261370f81612e0f565b9050919050565b6000602082019050818103600083015261372f81612e75565b9050919050565b6000602082019050818103600083015261374f81612edb565b9050919050565b6000602082019050818103600083015261376f81612f41565b9050919050565b6000602082019050818103600083015261378f81612f81565b9050919050565b600060208201905081810360008301526137af81612fe7565b9050919050565b600060208201905081810360008301526137cf81613027565b9050919050565b600060208201905081810360008301526137ef8161308d565b9050919050565b6000602082019050818103600083015261380f816130f3565b9050919050565b6000602082019050818103600083015261382f81613159565b9050919050565b6000602082019050818103600083015261384f816131bf565b9050919050565b6000602082019050818103600083015261386f816131ff565b9050919050565b6000602082019050818103600083015261388f816132a5565b9050919050565b600060208201905081810360008301526138af816132e5565b9050919050565b600060208201905081810360008301526138cf8161334b565b9050919050565b600060208201905081810360008301526138ef8161338b565b9050919050565b6000602082019050818103600083015261390f816133f1565b9050919050565b6000602082019050818103600083015261392f81613431565b9050919050565b6000602082019050818103600083015261394f81613497565b9050919050565b6000602082019050818103600083015261396f816134fd565b9050919050565b6000602082019050818103600083015261398f8161353d565b9050919050565b600060208201905081810360008301526139af816135a3565b9050919050565b60006020820190506139cb60008301846135f2565b92915050565b60006040820190506139e660008301856135f2565b6139f360208301846135f2565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715613a2157613a20613e0b565b5b8060405250919050565b600067ffffffffffffffff821115613a4657613a45613e0b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613a7657613a75613e0b565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b1282613c86565b9150613b1d83613c86565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b5257613b51613d7e565b5b828201905092915050565b6000613b6882613c86565b9150613b7383613c86565b925082613b8357613b82613dad565b5b828204905092915050565b6000613b9982613c86565b9150613ba483613c86565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bdd57613bdc613d7e565b5b828202905092915050565b6000613bf382613c86565b9150613bfe83613c86565b925082821015613c1157613c10613d7e565b5b828203905092915050565b6000613c2782613c66565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cbd578082015181840152602081019050613ca2565b83811115613ccc576000848401525b50505050565b60006002820490506001821680613cea57607f821691505b60208210811415613cfe57613cfd613ddc565b5b50919050565b6000613d0f82613c86565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d4257613d41613d7e565b5b600182019050919050565b6000613d5882613c86565b9150613d6383613c86565b925082613d7357613d72613dad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613e5481613c1c565b8114613e5f57600080fd5b50565b613e6b81613c2e565b8114613e7657600080fd5b50565b613e8281613c3a565b8114613e8d57600080fd5b50565b613e9981613c86565b8114613ea457600080fd5b5056fea264697066735822122044242a11714e07f5f1abe20671e066ba35987e5d0ff28ee927ff8e45b4f5c85164736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a506978656c20446f676500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a506978656c20446f676500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002868747470733a2f2f6e66747370726f6a656374732e636f6d2f6e66742f506978656c5f446f67652f000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Pixel Doge
Arg [1] : symbol_ (string): Pixel Doge
Arg [2] : baseURI_ (string): https://nftsprojects.com/nft/Pixel_Doge/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 506978656c20446f676500000000000000000000000000000000000000000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [6] : 506978656c20446f676500000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [8] : 68747470733a2f2f6e66747370726f6a656374732e636f6d2f6e66742f506978
Arg [9] : 656c5f446f67652f000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43200:2255:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37017:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23897:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25456:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24979:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37657:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43387:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26346:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37325:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43419:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26756:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37847:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43971:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23591:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43491:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44460:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43587:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23321:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2465:94;;;;;;;;;;;;;:::i;:::-;;44551:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1814:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24066:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43526:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44905:547;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25749:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27012:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44089:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26115:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2714:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37017:224;37119:4;37158:35;37143:50;;;:11;:50;;;;:90;;;;37197:36;37221:11;37197:23;:36::i;:::-;37143:90;37136:97;;37017:224;;;:::o;23897:100::-;23951:13;23984:5;23977:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23897:100;:::o;25456:221::-;25532:7;25560:16;25568:7;25560;:16::i;:::-;25552:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25645:15;:24;25661:7;25645:24;;;;;;;;;;;;;;;;;;;;;25638:31;;25456:221;;;:::o;24979:411::-;25060:13;25076:23;25091:7;25076:14;:23::i;:::-;25060:39;;25124:5;25118:11;;:2;:11;;;;25110:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25218:5;25202:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25227:37;25244:5;25251:12;:10;:12::i;:::-;25227:16;:37::i;:::-;25202:62;25180:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25361:21;25370:2;25374:7;25361:8;:21::i;:::-;24979:411;;;:::o;37657:113::-;37718:7;37745:10;:17;;;;37738:24;;37657:113;:::o;43387:25::-;;;;:::o;26346:339::-;26541:41;26560:12;:10;:12::i;:::-;26574:7;26541:18;:41::i;:::-;26533:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26649:28;26659:4;26665:2;26669:7;26649:9;:28::i;:::-;26346:339;;;:::o;37325:256::-;37422:7;37458:23;37475:5;37458:16;:23::i;:::-;37450:5;:31;37442:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37547:12;:19;37560:5;37547:19;;;;;;;;;;;;;;;:26;37567:5;37547:26;;;;;;;;;;;;37540:33;;37325:256;;;;:::o;43419:33::-;;;;:::o;26756:185::-;26894:39;26911:4;26917:2;26921:7;26894:39;;;;;;;;;;;;:16;:39::i;:::-;26756:185;;;:::o;37847:233::-;37922:7;37958:30;:28;:30::i;:::-;37950:5;:38;37942:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38055:10;38066:5;38055:17;;;;;;;;;;;;;;;;;;;;;;;;38048:24;;37847:233;;;:::o;43971:96::-;2045:12;:10;:12::i;:::-;2034:23;;:7;:5;:7::i;:::-;:23;;;2026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44052:7:::1;44042;:17;;;;;;;;;;;;:::i;:::-;;43971:96:::0;:::o;23591:239::-;23663:7;23683:13;23699:7;:16;23707:7;23699:16;;;;;;;;;;;;;;;;;;;;;23683:32;;23751:1;23734:19;;:5;:19;;;;23726:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23817:5;23810:12;;;23591:239;;;:::o;43491:28::-;;;;:::o;44460:83::-;2045:12;:10;:12::i;:::-;2034:23;;:7;:5;:7::i;:::-;:23;;;2026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44529:6:::1;44519:7;;:16;;;;;;;;;;;;;;;;;;44460:83:::0;:::o;43587:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23321:208::-;23393:7;23438:1;23421:19;;:5;:19;;;;23413:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23505:9;:16;23515:5;23505:16;;;;;;;;;;;;;;;;23498:23;;23321:208;;;:::o;2465:94::-;2045:12;:10;:12::i;:::-;2034:23;;:7;:5;:7::i;:::-;:23;;;2026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2530:21:::1;2548:1;2530:9;:21::i;:::-;2465:94::o:0;44551:346::-;44637:16;44671:13;44687:16;44697:5;44687:9;:16::i;:::-;44671:32;;44714:20;44751:5;44737:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44714:43;;44773:9;44768:101;44792:5;44788:1;:9;44768:101;;;44828:29;44848:5;44855:1;44828:19;:29::i;:::-;44819:3;44823:1;44819:6;;;;;;;;;;;;;;;;;;;;;:38;;;;;44799:3;;;;;:::i;:::-;;;;44768:101;;;;44886:3;44879:10;;;;44551:346;;;:::o;1814:87::-;1860:7;1887:6;;;;;;;;;;;1880:13;;1814:87;:::o;24066:104::-;24122:13;24155:7;24148:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24066:104;:::o;43526:38::-;;;;:::o;44905:547::-;44969:7;;;;;;;;;;;44961:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;45019:1;45011:6;:9;:31;;;;;45034:8;;45024:6;:18;;45011:31;45003:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45118:10;;45108:6;45095:10;;:19;;;;:::i;:::-;:33;;45087:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45193:5;;45184:6;:14;;;;:::i;:::-;45171:9;:27;45163:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;45254:7;:5;:7::i;:::-;45246:25;;:36;45272:9;45246:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45303:12;:10;:12::i;:::-;45298:40;;;45328:1;45317:10;;:12;;;;:::i;:::-;45331:6;45298:40;;;;;;;:::i;:::-;;;;;;;;45353:9;45349:96;45369:6;45366:1;:9;45349:96;;;45396:37;45402:12;:10;:12::i;:::-;45420:10;;:12;;;;;;;;;:::i;:::-;;;;;45416:1;:16;;;;:::i;:::-;45396:5;:37::i;:::-;45377:3;;;;;:::i;:::-;;;;45349:96;;;;44905:547;:::o;25749:295::-;25864:12;:10;:12::i;:::-;25852:24;;:8;:24;;;;25844:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25964:8;25919:18;:32;25938:12;:10;:12::i;:::-;25919:32;;;;;;;;;;;;;;;:42;25952:8;25919:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26017:8;25988:48;;26003:12;:10;:12::i;:::-;25988:48;;;26027:8;25988:48;;;;;;:::i;:::-;;;;;;;;25749:295;;:::o;27012:328::-;27187:41;27206:12;:10;:12::i;:::-;27220:7;27187:18;:41::i;:::-;27179:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27293:39;27307:4;27313:2;27317:7;27326:5;27293:13;:39::i;:::-;27012:328;;;;:::o;44089:365::-;44162:13;44196:16;44204:7;44196;:16::i;:::-;44188:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44278:22;44303:10;:8;:10::i;:::-;44278:35;;44356:1;44337:8;44331:22;:26;:115;;;;;;;;;;;;;;;;;;;;;;44397:8;44407:18;:7;:16;:18::i;:::-;44380:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44331:115;44324:122;;;44089:365;;;:::o;26115:164::-;26212:4;26236:18;:25;26255:5;26236:25;;;;;;;;;;;;;;;:35;26262:8;26236:35;;;;;;;;;;;;;;;;;;;;;;;;;26229:42;;26115:164;;;;:::o;2714:192::-;2045:12;:10;:12::i;:::-;2034:23;;:7;:5;:7::i;:::-;:23;;;2026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2823:1:::1;2803:22;;:8;:22;;;;2795:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2879:19;2889:8;2879:9;:19::i;:::-;2714:192:::0;:::o;22952:305::-;23054:4;23106:25;23091:40;;;:11;:40;;;;:105;;;;23163:33;23148:48;;;:11;:48;;;;23091:105;:158;;;;23213:36;23237:11;23213:23;:36::i;:::-;23091:158;23071:178;;22952:305;;;:::o;28850:127::-;28915:4;28967:1;28939:30;;:7;:16;28947:7;28939:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28932:37;;28850:127;;;:::o;600:98::-;653:7;680:10;673:17;;600:98;:::o;32841:174::-;32943:2;32916:15;:24;32932:7;32916:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32999:7;32995:2;32961:46;;32970:23;32985:7;32970:14;:23::i;:::-;32961:46;;;;;;;;;;;;32841:174;;:::o;29144:348::-;29237:4;29262:16;29270:7;29262;:16::i;:::-;29254:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29338:13;29354:23;29369:7;29354:14;:23::i;:::-;29338:39;;29407:5;29396:16;;:7;:16;;;:51;;;;29440:7;29416:31;;:20;29428:7;29416:11;:20::i;:::-;:31;;;29396:51;:87;;;;29451:32;29468:5;29475:7;29451:16;:32::i;:::-;29396:87;29388:96;;;29144:348;;;;:::o;32145:578::-;32304:4;32277:31;;:23;32292:7;32277:14;:23::i;:::-;:31;;;32269:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32387:1;32373:16;;:2;:16;;;;32365:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32443:39;32464:4;32470:2;32474:7;32443:20;:39::i;:::-;32547:29;32564:1;32568:7;32547:8;:29::i;:::-;32608:1;32589:9;:15;32599:4;32589:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32637:1;32620:9;:13;32630:2;32620:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32668:2;32649:7;:16;32657:7;32649:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32707:7;32703:2;32688:27;;32697:4;32688:27;;;;;;;;;;;;32145:578;;;:::o;2914:173::-;2970:16;2989:6;;;;;;;;;;;2970:25;;3015:8;3006:6;;:17;;;;;;;;;;;;;;;;;;3070:8;3039:40;;3060:8;3039:40;;;;;;;;;;;;2914:173;;:::o;30837:382::-;30931:1;30917:16;;:2;:16;;;;30909:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30990:16;30998:7;30990;:16::i;:::-;30989:17;30981:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31052:45;31081:1;31085:2;31089:7;31052:20;:45::i;:::-;31127:1;31110:9;:13;31120:2;31110:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31158:2;31139:7;:16;31147:7;31139:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31203:7;31199:2;31178:33;;31195:1;31178:33;;;;;;;;;;;;30837:382;;:::o;28222:315::-;28379:28;28389:4;28395:2;28399:7;28379:9;:28::i;:::-;28426:48;28449:4;28455:2;28459:7;28468:5;28426:22;:48::i;:::-;28418:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28222:315;;;;:::o;43858:107::-;43918:13;43950:7;43943:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43858:107;:::o;18887:723::-;18943:13;19173:1;19164:5;:10;19160:53;;;19191:10;;;;;;;;;;;;;;;;;;;;;19160:53;19223:12;19238:5;19223:20;;19254:14;19279:78;19294:1;19286:4;:9;19279:78;;19312:8;;;;;:::i;:::-;;;;19343:2;19335:10;;;;;:::i;:::-;;;19279:78;;;19367:19;19399:6;19389:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19367:39;;19417:154;19433:1;19424:5;:10;19417:154;;19461:1;19451:11;;;;;:::i;:::-;;;19528:2;19520:5;:10;;;;:::i;:::-;19507:2;:24;;;;:::i;:::-;19494:39;;19477:6;19484;19477:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;19557:2;19548:11;;;;;:::i;:::-;;;19417:154;;;19595:6;19581:21;;;;;18887:723;;;;:::o;21450:157::-;21535:4;21574:25;21559:40;;;:11;:40;;;;21552:47;;21450:157;;;:::o;38693:589::-;38837:45;38864:4;38870:2;38874:7;38837:26;:45::i;:::-;38915:1;38899:18;;:4;:18;;;38895:187;;;38934:40;38966:7;38934:31;:40::i;:::-;38895:187;;;39004:2;38996:10;;:4;:10;;;38992:90;;39023:47;39056:4;39062:7;39023:32;:47::i;:::-;38992:90;38895:187;39110:1;39096:16;;:2;:16;;;39092:183;;;39129:45;39166:7;39129:36;:45::i;:::-;39092:183;;;39202:4;39196:10;;:2;:10;;;39192:83;;39223:40;39251:2;39255:7;39223:27;:40::i;:::-;39192:83;39092:183;38693:589;;;:::o;33580:799::-;33735:4;33756:15;:2;:13;;;:15::i;:::-;33752:620;;;33808:2;33792:36;;;33829:12;:10;:12::i;:::-;33843:4;33849:7;33858:5;33792:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33788:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34051:1;34034:6;:13;:18;34030:272;;;34077:60;;;;;;;;;;:::i;:::-;;;;;;;;34030:272;34252:6;34246:13;34237:6;34233:2;34229:15;34222:38;33788:529;33925:41;;;33915:51;;;:6;:51;;;;33908:58;;;;;33752:620;34356:4;34349:11;;33580:799;;;;;;;:::o;34951:126::-;;;;:::o;40005:164::-;40109:10;:17;;;;40082:15;:24;40098:7;40082:24;;;;;;;;;;;:44;;;;40137:10;40153:7;40137:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40005:164;:::o;40796:988::-;41062:22;41112:1;41087:22;41104:4;41087:16;:22::i;:::-;:26;;;;:::i;:::-;41062:51;;41124:18;41145:17;:26;41163:7;41145:26;;;;;;;;;;;;41124:47;;41292:14;41278:10;:28;41274:328;;41323:19;41345:12;:18;41358:4;41345:18;;;;;;;;;;;;;;;:34;41364:14;41345:34;;;;;;;;;;;;41323:56;;41429:11;41396:12;:18;41409:4;41396:18;;;;;;;;;;;;;;;:30;41415:10;41396:30;;;;;;;;;;;:44;;;;41546:10;41513:17;:30;41531:11;41513:30;;;;;;;;;;;:43;;;;41274:328;;41698:17;:26;41716:7;41698:26;;;;;;;;;;;41691:33;;;41742:12;:18;41755:4;41742:18;;;;;;;;;;;;;;;:34;41761:14;41742:34;;;;;;;;;;;41735:41;;;40796:988;;;;:::o;42079:1079::-;42332:22;42377:1;42357:10;:17;;;;:21;;;;:::i;:::-;42332:46;;42389:18;42410:15;:24;42426:7;42410:24;;;;;;;;;;;;42389:45;;42761:19;42783:10;42794:14;42783:26;;;;;;;;;;;;;;;;;;;;;;;;42761:48;;42847:11;42822:10;42833;42822:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;42958:10;42927:15;:28;42943:11;42927:28;;;;;;;;;;;:41;;;;43099:15;:24;43115:7;43099:24;;;;;;;;;;;43092:31;;;43134:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42079:1079;;;;:::o;39583:221::-;39668:14;39685:20;39702:2;39685:16;:20::i;:::-;39668:37;;39743:7;39716:12;:16;39729:2;39716:16;;;;;;;;;;;;;;;:24;39733:6;39716:24;;;;;;;;;;;:34;;;;39790:6;39761:17;:26;39779:7;39761:26;;;;;;;;;;;:35;;;;39583:221;;;:::o;11237:387::-;11297:4;11505:12;11572:7;11560:20;11552:28;;11615:1;11608:4;:8;11601:15;;;11237:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:179::-;;6436:46;6478:3;6470:6;6436:46;:::i;:::-;6514:4;6509:3;6505:14;6491:28;;6426:99;;;;:::o;6531:118::-;6618:24;6636:5;6618:24;:::i;:::-;6613:3;6606:37;6596:53;;:::o;6685:732::-;;6833:54;6881:5;6833:54;:::i;:::-;6903:86;6982:6;6977:3;6903:86;:::i;:::-;6896:93;;7013:56;7063:5;7013:56;:::i;:::-;7092:7;7123:1;7108:284;7133:6;7130:1;7127:13;7108:284;;;7209:6;7203:13;7236:63;7295:3;7280:13;7236:63;:::i;:::-;7229:70;;7322:60;7375:6;7322:60;:::i;:::-;7312:70;;7168:224;7155:1;7152;7148:9;7143:14;;7108:284;;;7112:14;7408:3;7401:10;;6809:608;;;;;;;:::o;7423:109::-;7504:21;7519:5;7504:21;:::i;:::-;7499:3;7492:34;7482:50;;:::o;7538:360::-;;7652:38;7684:5;7652:38;:::i;:::-;7706:70;7769:6;7764:3;7706:70;:::i;:::-;7699:77;;7785:52;7830:6;7825:3;7818:4;7811:5;7807:16;7785:52;:::i;:::-;7862:29;7884:6;7862:29;:::i;:::-;7857:3;7853:39;7846:46;;7628:270;;;;;:::o;7904:364::-;;8020:39;8053:5;8020:39;:::i;:::-;8075:71;8139:6;8134:3;8075:71;:::i;:::-;8068:78;;8155:52;8200:6;8195:3;8188:4;8181:5;8177:16;8155:52;:::i;:::-;8232:29;8254:6;8232:29;:::i;:::-;8227:3;8223:39;8216:46;;7996:272;;;;;:::o;8274:377::-;;8408:39;8441:5;8408:39;:::i;:::-;8463:89;8545:6;8540:3;8463:89;:::i;:::-;8456:96;;8561:52;8606:6;8601:3;8594:4;8587:5;8583:16;8561:52;:::i;:::-;8638:6;8633:3;8629:16;8622:23;;8384:267;;;;;:::o;8657:375::-;;8820:67;8884:2;8879:3;8820:67;:::i;:::-;8813:74;;8917:34;8913:1;8908:3;8904:11;8897:55;8983:13;8978:2;8973:3;8969:12;8962:35;9023:2;9018:3;9014:12;9007:19;;8803:229;;;:::o;9038:382::-;;9201:67;9265:2;9260:3;9201:67;:::i;:::-;9194:74;;9298:34;9294:1;9289:3;9285:11;9278:55;9364:20;9359:2;9354:3;9350:12;9343:42;9411:2;9406:3;9402:12;9395:19;;9184:236;;;:::o;9426:370::-;;9589:67;9653:2;9648:3;9589:67;:::i;:::-;9582:74;;9686:34;9682:1;9677:3;9673:11;9666:55;9752:8;9747:2;9742:3;9738:12;9731:30;9787:2;9782:3;9778:12;9771:19;;9572:224;;;:::o;9802:326::-;;9965:67;10029:2;10024:3;9965:67;:::i;:::-;9958:74;;10062:30;10058:1;10053:3;10049:11;10042:51;10119:2;10114:3;10110:12;10103:19;;9948:180;;;:::o;10134:368::-;;10297:67;10361:2;10356:3;10297:67;:::i;:::-;10290:74;;10394:34;10390:1;10385:3;10381:11;10374:55;10460:6;10455:2;10450:3;10446:12;10439:28;10493:2;10488:3;10484:12;10477:19;;10280:222;;;:::o;10508:323::-;;10671:67;10735:2;10730:3;10671:67;:::i;:::-;10664:74;;10768:27;10764:1;10759:3;10755:11;10748:48;10822:2;10817:3;10813:12;10806:19;;10654:177;;;:::o;10837:376::-;;11000:67;11064:2;11059:3;11000:67;:::i;:::-;10993:74;;11097:34;11093:1;11088:3;11084:11;11077:55;11163:14;11158:2;11153:3;11149:12;11142:36;11204:2;11199:3;11195:12;11188:19;;10983:230;;;:::o;11219:388::-;;11382:67;11446:2;11441:3;11382:67;:::i;:::-;11375:74;;11479:34;11475:1;11470:3;11466:11;11459:55;11545:26;11540:2;11535:3;11531:12;11524:48;11598:2;11593:3;11589:12;11582:19;;11365:242;;;:::o;11613:374::-;;11776:67;11840:2;11835:3;11776:67;:::i;:::-;11769:74;;11873:34;11869:1;11864:3;11860:11;11853:55;11939:12;11934:2;11929:3;11925:12;11918:34;11978:2;11973:3;11969:12;11962:19;;11759:228;;;:::o;11993:373::-;;12156:67;12220:2;12215:3;12156:67;:::i;:::-;12149:74;;12253:34;12249:1;12244:3;12240:11;12233:55;12319:11;12314:2;12309:3;12305:12;12298:33;12357:2;12352:3;12348:12;12341:19;;12139:227;;;:::o;12372:330::-;;12535:67;12599:2;12594:3;12535:67;:::i;:::-;12528:74;;12632:34;12628:1;12623:3;12619:11;12612:55;12693:2;12688:3;12684:12;12677:19;;12518:184;;;:::o;12708:376::-;;12871:67;12935:2;12930:3;12871:67;:::i;:::-;12864:74;;12968:34;12964:1;12959:3;12955:11;12948:55;13034:14;13029:2;13024:3;13020:12;13013:36;13075:2;13070:3;13066:12;13059:19;;12854:230;;;:::o;13090:337::-;;13271:84;13353:1;13348:3;13271:84;:::i;:::-;13264:91;;13385:7;13381:1;13376:3;13372:11;13365:28;13419:1;13414:3;13410:11;13403:18;;13254:173;;;:::o;13433:330::-;;13596:67;13660:2;13655:3;13596:67;:::i;:::-;13589:74;;13693:34;13689:1;13684:3;13680:11;13673:55;13754:2;13749:3;13745:12;13738:19;;13579:184;;;:::o;13769:373::-;;13932:67;13996:2;13991:3;13932:67;:::i;:::-;13925:74;;14029:34;14025:1;14020:3;14016:11;14009:55;14095:11;14090:2;14085:3;14081:12;14074:33;14133:2;14128:3;14124:12;14117:19;;13915:227;;;:::o;14148:327::-;;14311:67;14375:2;14370:3;14311:67;:::i;:::-;14304:74;;14408:31;14404:1;14399:3;14395:11;14388:52;14466:2;14461:3;14457:12;14450:19;;14294:181;;;:::o;14481:365::-;;14644:67;14708:2;14703:3;14644:67;:::i;:::-;14637:74;;14741:34;14737:1;14732:3;14728:11;14721:55;14807:3;14802:2;14797:3;14793:12;14786:25;14837:2;14832:3;14828:12;14821:19;;14627:219;;;:::o;14852:330::-;;15015:67;15079:2;15074:3;15015:67;:::i;:::-;15008:74;;15112:34;15108:1;15103:3;15099:11;15092:55;15173:2;15168:3;15164:12;15157:19;;14998:184;;;:::o;15188:381::-;;15351:67;15415:2;15410:3;15351:67;:::i;:::-;15344:74;;15448:34;15444:1;15439:3;15435:11;15428:55;15514:19;15509:2;15504:3;15500:12;15493:41;15560:2;15555:3;15551:12;15544:19;;15334:235;;;:::o;15575:376::-;;15738:67;15802:2;15797:3;15738:67;:::i;:::-;15731:74;;15835:34;15831:1;15826:3;15822:11;15815:55;15901:14;15896:2;15891:3;15887:12;15880:36;15942:2;15937:3;15933:12;15926:19;;15721:230;;;:::o;15957:309::-;;16120:67;16184:2;16179:3;16120:67;:::i;:::-;16113:74;;16217:13;16213:1;16208:3;16204:11;16197:34;16257:2;16252:3;16248:12;16241:19;;16103:163;;;:::o;16272:380::-;;16435:67;16499:2;16494:3;16435:67;:::i;:::-;16428:74;;16532:34;16528:1;16523:3;16519:11;16512:55;16598:18;16593:2;16588:3;16584:12;16577:40;16643:2;16638:3;16634:12;16627:19;;16418:234;;;:::o;16658:317::-;;16821:67;16885:2;16880:3;16821:67;:::i;:::-;16814:74;;16918:21;16914:1;16909:3;16905:11;16898:42;16966:2;16961:3;16957:12;16950:19;;16804:171;;;:::o;16981:108::-;17058:24;17076:5;17058:24;:::i;:::-;17053:3;17046:37;17036:53;;:::o;17095:118::-;17182:24;17200:5;17182:24;:::i;:::-;17177:3;17170:37;17160:53;;:::o;17219:701::-;;17522:95;17613:3;17604:6;17522:95;:::i;:::-;17515:102;;17634:95;17725:3;17716:6;17634:95;:::i;:::-;17627:102;;17746:148;17890:3;17746:148;:::i;:::-;17739:155;;17911:3;17904:10;;17504:416;;;;;:::o;17926:222::-;;18057:2;18046:9;18042:18;18034:26;;18070:71;18138:1;18127:9;18123:17;18114:6;18070:71;:::i;:::-;18024:124;;;;:::o;18154:640::-;;18387:3;18376:9;18372:19;18364:27;;18401:71;18469:1;18458:9;18454:17;18445:6;18401:71;:::i;:::-;18482:72;18550:2;18539:9;18535:18;18526:6;18482:72;:::i;:::-;18564;18632:2;18621:9;18617:18;18608:6;18564:72;:::i;:::-;18683:9;18677:4;18673:20;18668:2;18657:9;18653:18;18646:48;18711:76;18782:4;18773:6;18711:76;:::i;:::-;18703:84;;18354:440;;;;;;;:::o;18800:373::-;;18981:2;18970:9;18966:18;18958:26;;19030:9;19024:4;19020:20;19016:1;19005:9;19001:17;18994:47;19058:108;19161:4;19152:6;19058:108;:::i;:::-;19050:116;;18948:225;;;;:::o;19179:210::-;;19304:2;19293:9;19289:18;19281:26;;19317:65;19379:1;19368:9;19364:17;19355:6;19317:65;:::i;:::-;19271:118;;;;:::o;19395:313::-;;19546:2;19535:9;19531:18;19523:26;;19595:9;19589:4;19585:20;19581:1;19570:9;19566:17;19559:47;19623:78;19696:4;19687:6;19623:78;:::i;:::-;19615:86;;19513:195;;;;:::o;19714:419::-;;19918:2;19907:9;19903:18;19895:26;;19967:9;19961:4;19957:20;19953:1;19942:9;19938:17;19931:47;19995:131;20121:4;19995:131;:::i;:::-;19987:139;;19885:248;;;:::o;20139:419::-;;20343:2;20332:9;20328:18;20320:26;;20392:9;20386:4;20382:20;20378:1;20367:9;20363:17;20356:47;20420:131;20546:4;20420:131;:::i;:::-;20412:139;;20310:248;;;:::o;20564:419::-;;20768:2;20757:9;20753:18;20745:26;;20817:9;20811:4;20807:20;20803:1;20792:9;20788:17;20781:47;20845:131;20971:4;20845:131;:::i;:::-;20837:139;;20735:248;;;:::o;20989:419::-;;21193:2;21182:9;21178:18;21170:26;;21242:9;21236:4;21232:20;21228:1;21217:9;21213:17;21206:47;21270:131;21396:4;21270:131;:::i;:::-;21262:139;;21160:248;;;:::o;21414:419::-;;21618:2;21607:9;21603:18;21595:26;;21667:9;21661:4;21657:20;21653:1;21642:9;21638:17;21631:47;21695:131;21821:4;21695:131;:::i;:::-;21687:139;;21585:248;;;:::o;21839:419::-;;22043:2;22032:9;22028:18;22020:26;;22092:9;22086:4;22082:20;22078:1;22067:9;22063:17;22056:47;22120:131;22246:4;22120:131;:::i;:::-;22112:139;;22010:248;;;:::o;22264:419::-;;22468:2;22457:9;22453:18;22445:26;;22517:9;22511:4;22507:20;22503:1;22492:9;22488:17;22481:47;22545:131;22671:4;22545:131;:::i;:::-;22537:139;;22435:248;;;:::o;22689:419::-;;22893:2;22882:9;22878:18;22870:26;;22942:9;22936:4;22932:20;22928:1;22917:9;22913:17;22906:47;22970:131;23096:4;22970:131;:::i;:::-;22962:139;;22860:248;;;:::o;23114:419::-;;23318:2;23307:9;23303:18;23295:26;;23367:9;23361:4;23357:20;23353:1;23342:9;23338:17;23331:47;23395:131;23521:4;23395:131;:::i;:::-;23387:139;;23285:248;;;:::o;23539:419::-;;23743:2;23732:9;23728:18;23720:26;;23792:9;23786:4;23782:20;23778:1;23767:9;23763:17;23756:47;23820:131;23946:4;23820:131;:::i;:::-;23812:139;;23710:248;;;:::o;23964:419::-;;24168:2;24157:9;24153:18;24145:26;;24217:9;24211:4;24207:20;24203:1;24192:9;24188:17;24181:47;24245:131;24371:4;24245:131;:::i;:::-;24237:139;;24135:248;;;:::o;24389:419::-;;24593:2;24582:9;24578:18;24570:26;;24642:9;24636:4;24632:20;24628:1;24617:9;24613:17;24606:47;24670:131;24796:4;24670:131;:::i;:::-;24662:139;;24560:248;;;:::o;24814:419::-;;25018:2;25007:9;25003:18;24995:26;;25067:9;25061:4;25057:20;25053:1;25042:9;25038:17;25031:47;25095:131;25221:4;25095:131;:::i;:::-;25087:139;;24985:248;;;:::o;25239:419::-;;25443:2;25432:9;25428:18;25420:26;;25492:9;25486:4;25482:20;25478:1;25467:9;25463:17;25456:47;25520:131;25646:4;25520:131;:::i;:::-;25512:139;;25410:248;;;:::o;25664:419::-;;25868:2;25857:9;25853:18;25845:26;;25917:9;25911:4;25907:20;25903:1;25892:9;25888:17;25881:47;25945:131;26071:4;25945:131;:::i;:::-;25937:139;;25835:248;;;:::o;26089:419::-;;26293:2;26282:9;26278:18;26270:26;;26342:9;26336:4;26332:20;26328:1;26317:9;26313:17;26306:47;26370:131;26496:4;26370:131;:::i;:::-;26362:139;;26260:248;;;:::o;26514:419::-;;26718:2;26707:9;26703:18;26695:26;;26767:9;26761:4;26757:20;26753:1;26742:9;26738:17;26731:47;26795:131;26921:4;26795:131;:::i;:::-;26787:139;;26685:248;;;:::o;26939:419::-;;27143:2;27132:9;27128:18;27120:26;;27192:9;27186:4;27182:20;27178:1;27167:9;27163:17;27156:47;27220:131;27346:4;27220:131;:::i;:::-;27212:139;;27110:248;;;:::o;27364:419::-;;27568:2;27557:9;27553:18;27545:26;;27617:9;27611:4;27607:20;27603:1;27592:9;27588:17;27581:47;27645:131;27771:4;27645:131;:::i;:::-;27637:139;;27535:248;;;:::o;27789:419::-;;27993:2;27982:9;27978:18;27970:26;;28042:9;28036:4;28032:20;28028:1;28017:9;28013:17;28006:47;28070:131;28196:4;28070:131;:::i;:::-;28062:139;;27960:248;;;:::o;28214:419::-;;28418:2;28407:9;28403:18;28395:26;;28467:9;28461:4;28457:20;28453:1;28442:9;28438:17;28431:47;28495:131;28621:4;28495:131;:::i;:::-;28487:139;;28385:248;;;:::o;28639:419::-;;28843:2;28832:9;28828:18;28820:26;;28892:9;28886:4;28882:20;28878:1;28867:9;28863:17;28856:47;28920:131;29046:4;28920:131;:::i;:::-;28912:139;;28810:248;;;:::o;29064:222::-;;29195:2;29184:9;29180:18;29172:26;;29208:71;29276:1;29265:9;29261:17;29252:6;29208:71;:::i;:::-;29162:124;;;;:::o;29292:332::-;;29451:2;29440:9;29436:18;29428:26;;29464:71;29532:1;29521:9;29517:17;29508:6;29464:71;:::i;:::-;29545:72;29613:2;29602:9;29598:18;29589:6;29545:72;:::i;:::-;29418:206;;;;;:::o;29630:283::-;;29696:2;29690:9;29680:19;;29738:4;29730:6;29726:17;29845:6;29833:10;29830:22;29809:18;29797:10;29794:34;29791:62;29788:2;;;29856:18;;:::i;:::-;29788:2;29896:10;29892:2;29885:22;29670:243;;;;:::o;29919:331::-;;30070:18;30062:6;30059:30;30056:2;;;30092:18;;:::i;:::-;30056:2;30177:4;30173:9;30166:4;30158:6;30154:17;30150:33;30142:41;;30238:4;30232;30228:15;30220:23;;29985:265;;;:::o;30256:332::-;;30408:18;30400:6;30397:30;30394:2;;;30430:18;;:::i;:::-;30394:2;30515:4;30511:9;30504:4;30496:6;30492:17;30488:33;30480:41;;30576:4;30570;30566:15;30558:23;;30323:265;;;:::o;30594:132::-;;30684:3;30676:11;;30714:4;30709:3;30705:14;30697:22;;30666:60;;;:::o;30732:114::-;;30833:5;30827:12;30817:22;;30806:40;;;:::o;30852:98::-;;30937:5;30931:12;30921:22;;30910:40;;;:::o;30956:99::-;;31042:5;31036:12;31026:22;;31015:40;;;:::o;31061:113::-;;31163:4;31158:3;31154:14;31146:22;;31136:38;;;:::o;31180:184::-;;31313:6;31308:3;31301:19;31353:4;31348:3;31344:14;31329:29;;31291:73;;;;:::o;31370:168::-;;31487:6;31482:3;31475:19;31527:4;31522:3;31518:14;31503:29;;31465:73;;;;:::o;31544:169::-;;31662:6;31657:3;31650:19;31702:4;31697:3;31693:14;31678:29;;31640:73;;;;:::o;31719:148::-;;31858:3;31843:18;;31833:34;;;;:::o;31873:305::-;;31932:20;31950:1;31932:20;:::i;:::-;31927:25;;31966:20;31984:1;31966:20;:::i;:::-;31961:25;;32120:1;32052:66;32048:74;32045:1;32042:81;32039:2;;;32126:18;;:::i;:::-;32039:2;32170:1;32167;32163:9;32156:16;;31917:261;;;;:::o;32184:185::-;;32241:20;32259:1;32241:20;:::i;:::-;32236:25;;32275:20;32293:1;32275:20;:::i;:::-;32270:25;;32314:1;32304:2;;32319:18;;:::i;:::-;32304:2;32361:1;32358;32354:9;32349:14;;32226:143;;;;:::o;32375:348::-;;32438:20;32456:1;32438:20;:::i;:::-;32433:25;;32472:20;32490:1;32472:20;:::i;:::-;32467:25;;32660:1;32592:66;32588:74;32585:1;32582:81;32577:1;32570:9;32563:17;32559:105;32556:2;;;32667:18;;:::i;:::-;32556:2;32715:1;32712;32708:9;32697:20;;32423:300;;;;:::o;32729:191::-;;32789:20;32807:1;32789:20;:::i;:::-;32784:25;;32823:20;32841:1;32823:20;:::i;:::-;32818:25;;32862:1;32859;32856:8;32853:2;;;32867:18;;:::i;:::-;32853:2;32912:1;32909;32905:9;32897:17;;32774:146;;;;:::o;32926:96::-;;32992:24;33010:5;32992:24;:::i;:::-;32981:35;;32971:51;;;:::o;33028:90::-;;33105:5;33098:13;33091:21;33080:32;;33070:48;;;:::o;33124:149::-;;33200:66;33193:5;33189:78;33178:89;;33168:105;;;:::o;33279:126::-;;33356:42;33349:5;33345:54;33334:65;;33324:81;;;:::o;33411:77::-;;33477:5;33466:16;;33456:32;;;:::o;33494:154::-;33578:6;33573:3;33568;33555:30;33640:1;33631:6;33626:3;33622:16;33615:27;33545:103;;;:::o;33654:307::-;33722:1;33732:113;33746:6;33743:1;33740:13;33732:113;;;33831:1;33826:3;33822:11;33816:18;33812:1;33807:3;33803:11;33796:39;33768:2;33765:1;33761:10;33756:15;;33732:113;;;33863:6;33860:1;33857:13;33854:2;;;33943:1;33934:6;33929:3;33925:16;33918:27;33854:2;33703:258;;;;:::o;33967:320::-;;34048:1;34042:4;34038:12;34028:22;;34095:1;34089:4;34085:12;34116:18;34106:2;;34172:4;34164:6;34160:17;34150:27;;34106:2;34234;34226:6;34223:14;34203:18;34200:38;34197:2;;;34253:18;;:::i;:::-;34197:2;34018:269;;;;:::o;34293:233::-;;34355:24;34373:5;34355:24;:::i;:::-;34346:33;;34401:66;34394:5;34391:77;34388:2;;;34471:18;;:::i;:::-;34388:2;34518:1;34511:5;34507:13;34500:20;;34336:190;;;:::o;34532:176::-;;34581:20;34599:1;34581:20;:::i;:::-;34576:25;;34615:20;34633:1;34615:20;:::i;:::-;34610:25;;34654:1;34644:2;;34659:18;;:::i;:::-;34644:2;34700:1;34697;34693:9;34688:14;;34566:142;;;;:::o;34714:180::-;34762:77;34759:1;34752:88;34859:4;34856:1;34849:15;34883:4;34880:1;34873:15;34900:180;34948:77;34945:1;34938:88;35045:4;35042:1;35035:15;35069:4;35066:1;35059:15;35086:180;35134:77;35131:1;35124:88;35231:4;35228:1;35221:15;35255:4;35252:1;35245:15;35272:180;35320:77;35317:1;35310:88;35417:4;35414:1;35407:15;35441:4;35438:1;35431:15;35458:102;;35550:2;35546:7;35541:2;35534:5;35530:14;35526:28;35516:38;;35506:54;;;:::o;35566:122::-;35639:24;35657:5;35639:24;:::i;:::-;35632:5;35629:35;35619:2;;35678:1;35675;35668:12;35619:2;35609:79;:::o;35694:116::-;35764:21;35779:5;35764:21;:::i;:::-;35757:5;35754:32;35744:2;;35800:1;35797;35790:12;35744:2;35734:76;:::o;35816:120::-;35888:23;35905:5;35888:23;:::i;:::-;35881:5;35878:34;35868:2;;35926:1;35923;35916:12;35868:2;35858:78;:::o;35942:122::-;36015:24;36033:5;36015:24;:::i;:::-;36008:5;36005:35;35995:2;;36054:1;36051;36044:12;35995:2;35985:79;:::o

Swarm Source

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