ETH Price: $3,029.42 (+3.85%)

Token

Web3 Wrapped 2021 (WEB3WRAPPED2021)
 

Overview

Max Total Supply

1,847 WEB3WRAPPED2021

Holders

1,837

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
paulpau.eth
Balance
1 WEB3WRAPPED2021
0x48c767aadf1c5f6abf59053aa7c463ba8d921de3
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:
NFT

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 12 of 15: NFT.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "./ERC721Enumerable.sol";
import "./Pausable.sol";

contract NFT is ERC721Enumerable, Pausable {
    using Strings for uint256;

    string public baseURI;
    mapping(uint256 => string) _tokenURIs;

    mapping(address => bool) public hasMinted;
    
    constructor(
        string memory _name,
        string memory _symbol
    ) ERC721(_name, _symbol) {}

    // public
    function mint(string memory _tokenURI) public WhenNotPaused {
        require(!hasMinted[msg.sender], "duplicated");

        uint256 tokenId = totalSupply() + 1;
        _safeMint(msg.sender, tokenId);
        _setTokenURI(tokenId, _tokenURI);

        hasMinted[msg.sender] = true;
    }

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        _tokenURIs[tokenId] = _tokenURI;
    }

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

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }
}

File 1 of 15: Address.sol
// SPDX-License-Identifier: GPL-3.0
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 2 of 15: Context.sol
// SPDX-License-Identifier: GPL-3.0
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 3 of 15: ERC165.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 4 of 15: ERC721.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "./Context.sol";
import "./ERC165.sol";
import "./IERC721.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Strings.sol";
import "./IERC721Receiver.sol";

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

File 5 of 15: ERC721Enumerable.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./IERC721Enumerable.sol";

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

File 6 of 15: IERC165.sol
// SPDX-License-Identifier: GPL-3.0
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 7 of 15: IERC721.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 8 of 15: IERC721Enumerable.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "./IERC721.sol";


/**
 * @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 9 of 15: IERC721Metadata.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @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 10 of 15: IERC721Receiver.sol
// SPDX-License-Identifier: GPL-3.0
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 11 of 15: Migrations.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

contract Migrations {
  address public owner = msg.sender;
  uint public last_completed_migration;

  modifier restricted() {
    require(
      msg.sender == owner,
      "This function is restricted to the contract's owner"
    );
    _;
  }

  function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }
}

File 13 of 15: Ownable.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @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 14 of 15: Pausable.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "./Ownable.sol";

abstract contract Pausable is Ownable {
    event Paused(address account);
    event Unpaused(address account);

    bool public paused;

    constructor ()  {
        paused = false;
    }

    modifier WhenNotPaused() {
        require(!paused, "Pausable: paused");
        _;
    }

    modifier WhenPaused() {
        require(paused, "Pausable: not paused");
        _;
    }

    function Pause() public onlyOwner {
        paused = true;
        emit Paused(msg.sender);
    }

    function Unpause() public onlyOwner {
        paused = false;
        emit Unpaused(msg.sender);
    }
}

File 15 of 15: Strings.sol
// SPDX-License-Identifier: GPL-3.0
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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"Pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"","type":"address"}],"name":"hasMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[],"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"}]

60806040523480156200001157600080fd5b5060405162003fc538038062003fc58339818101604052810190620000379190620002a0565b81818160009080519060200190620000519291906200017e565b5080600190805190602001906200006a9291906200017e565b5050506200008d62000081620000b060201b60201c565b620000b860201b60201c565b6000600a60146101000a81548160ff021916908315150217905550505062000444565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200018c90620003b0565b90600052602060002090601f016020900481019282620001b05760008555620001fc565b82601f10620001cb57805160ff1916838001178555620001fc565b82800160010185558215620001fc579182015b82811115620001fb578251825591602001919060010190620001de565b5b5090506200020b91906200020f565b5090565b5b808211156200022a57600081600090555060010162000210565b5090565b6000620002456200023f8462000347565b62000313565b9050828152602081018484840111156200025e57600080fd5b6200026b8482856200037a565b509392505050565b600082601f8301126200028557600080fd5b8151620002978482602086016200022e565b91505092915050565b60008060408385031215620002b457600080fd5b600083015167ffffffffffffffff811115620002cf57600080fd5b620002dd8582860162000273565b925050602083015167ffffffffffffffff811115620002fb57600080fd5b620003098582860162000273565b9150509250929050565b6000604051905081810181811067ffffffffffffffff821117156200033d576200033c62000415565b5b8060405250919050565b600067ffffffffffffffff82111562000365576200036462000415565b5b601f19601f8301169050602081019050919050565b60005b838110156200039a5780820151818401526020810190506200037d565b83811115620003aa576000848401525b50505050565b60006002820490506001821680620003c957607f821691505b60208210811415620003e057620003df620003e6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b7180620004546000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80636985a022116100de57806395d89b4111610097578063c87b56dd11610071578063c87b56dd1461045d578063d85d3d271461048d578063e985e9c5146104a9578063f2fde38b146104d95761018e565b806395d89b4114610407578063a22cb46514610425578063b88d4fde146104415761018e565b80636985a0221461037d5780636c0360eb1461038757806370a08231146103a5578063715018a6146103d55780637805862f146103df5780638da5cb5b146103e95761018e565b80632f745c591161014b5780634f6ccce7116101255780634f6ccce7146102e357806355f804b3146103135780635c975abb1461032f5780636352211e1461034d5761018e565b80632f745c591461026757806338e21cce1461029757806342842e0e146102c75761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b31461021157806318160ddd1461022d57806323b872dd1461024b575b600080fd5b6101ad60048036038101906101a89190612b1e565b6104f5565b6040516101ba9190613449565b60405180910390f35b6101cb61056f565b6040516101d89190613464565b60405180910390f35b6101fb60048036038101906101f69190612bb1565b610601565b60405161020891906133e2565b60405180910390f35b61022b60048036038101906102269190612ae2565b610686565b005b61023561079e565b6040516102429190613706565b60405180910390f35b610265600480360381019061026091906129dc565b6107ab565b005b610281600480360381019061027c9190612ae2565b61080b565b60405161028e9190613706565b60405180910390f35b6102b160048036038101906102ac9190612977565b6108b0565b6040516102be9190613449565b60405180910390f35b6102e160048036038101906102dc91906129dc565b6108d0565b005b6102fd60048036038101906102f89190612bb1565b6108f0565b60405161030a9190613706565b60405180910390f35b61032d60048036038101906103289190612b70565b610987565b005b610337610a1d565b6040516103449190613449565b60405180910390f35b61036760048036038101906103629190612bb1565b610a30565b60405161037491906133e2565b60405180910390f35b610385610ae2565b005b61038f610bb2565b60405161039c9190613464565b60405180910390f35b6103bf60048036038101906103ba9190612977565b610c40565b6040516103cc9190613706565b60405180910390f35b6103dd610cf8565b005b6103e7610d80565b005b6103f1610e50565b6040516103fe91906133e2565b60405180910390f35b61040f610e7a565b60405161041c9190613464565b60405180910390f35b61043f600480360381019061043a9190612aa6565b610f0c565b005b61045b60048036038101906104569190612a2b565b61108d565b005b61047760048036038101906104729190612bb1565b6110ef565b6040516104849190613464565b60405180910390f35b6104a760048036038101906104a29190612b70565b611241565b005b6104c360048036038101906104be91906129a0565b6113a6565b6040516104d09190613449565b60405180910390f35b6104f360048036038101906104ee9190612977565b61143a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610568575061056782611532565b5b9050919050565b60606000805461057e90613966565b80601f01602080910402602001604051908101604052809291908181526020018280546105aa90613966565b80156105f75780601f106105cc576101008083540402835291602001916105f7565b820191906000526020600020905b8154815290600101906020018083116105da57829003601f168201915b5050505050905090565b600061060c82611614565b61064b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064290613606565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061069182610a30565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f990613686565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610721611680565b73ffffffffffffffffffffffffffffffffffffffff161480610750575061074f8161074a611680565b6113a6565b5b61078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078690613586565b60405180910390fd5b6107998383611688565b505050565b6000600880549050905090565b6107bc6107b6611680565b82611741565b6107fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f2906136c6565b60405180910390fd5b61080683838361181f565b505050565b600061081683610c40565b8210610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e90613486565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6108eb8383836040518060200160405280600081525061108d565b505050565b60006108fa61079e565b821061093b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610932906136e6565b60405180910390fd5b60088281548110610975577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61098f611680565b73ffffffffffffffffffffffffffffffffffffffff166109ad610e50565b73ffffffffffffffffffffffffffffffffffffffff1614610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa90613626565b60405180910390fd5b80600b9080519060200190610a1992919061279b565b5050565b600a60149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad0906135c6565b60405180910390fd5b80915050919050565b610aea611680565b73ffffffffffffffffffffffffffffffffffffffff16610b08610e50565b73ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613626565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051610ba891906133e2565b60405180910390a1565b600b8054610bbf90613966565b80601f0160208091040260200160405190810160405280929190818152602001828054610beb90613966565b8015610c385780601f10610c0d57610100808354040283529160200191610c38565b820191906000526020600020905b815481529060010190602001808311610c1b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca8906135a6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d00611680565b73ffffffffffffffffffffffffffffffffffffffff16610d1e610e50565b73ffffffffffffffffffffffffffffffffffffffff1614610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90613626565b60405180910390fd5b610d7e6000611a7b565b565b610d88611680565b73ffffffffffffffffffffffffffffffffffffffff16610da6610e50565b73ffffffffffffffffffffffffffffffffffffffff1614610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613626565b60405180910390fd5b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051610e4691906133e2565b60405180910390a1565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e8990613966565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590613966565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b5050505050905090565b610f14611680565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613526565b60405180910390fd5b8060056000610f8f611680565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661103c611680565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110819190613449565b60405180910390a35050565b61109e611098611680565b83611741565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d4906136c6565b60405180910390fd5b6110e984848484611b41565b50505050565b60606110fa82611614565b611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090613666565b60405180910390fd5b6000600c6000848152602001908152602001600020805461115990613966565b80601f016020809104026020016040519081016040528092919081815260200182805461118590613966565b80156111d25780601f106111a7576101008083540402835291602001916111d2565b820191906000526020600020905b8154815290600101906020018083116111b557829003601f168201915b5050505050905060006111e3611b9d565b90506000815114156111f957819250505061123c565b60008251111561122e5780826040516020016112169291906133be565b6040516020818303038152906040529250505061123c565b61123784611c2f565b925050505b919050565b600a60149054906101000a900460ff1615611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890613566565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561131e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611315906136a6565b60405180910390fd5b6000600161132a61079e565b61133491906137f5565b90506113403382611cd6565b61134a8183611cf4565b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611442611680565b73ffffffffffffffffffffffffffffffffffffffff16611460610e50565b73ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90613626565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d906134c6565b60405180910390fd5b61152f81611a7b565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806115fd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061160d575061160c82611d20565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116fb83610a30565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061174c82611614565b61178b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178290613546565b60405180910390fd5b600061179683610a30565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061180557508373ffffffffffffffffffffffffffffffffffffffff166117ed84610601565b73ffffffffffffffffffffffffffffffffffffffff16145b80611816575061181581856113a6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661183f82610a30565b73ffffffffffffffffffffffffffffffffffffffff1614611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90613646565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90613506565b60405180910390fd5b611910838383611d8a565b61191b600082611688565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196b919061387c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119c291906137f5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b4c84848461181f565b611b5884848484611e9e565b611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e906134a6565b60405180910390fd5b50505050565b6060600b8054611bac90613966565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd890613966565b8015611c255780601f10611bfa57610100808354040283529160200191611c25565b820191906000526020600020905b815481529060010190602001808311611c0857829003601f168201915b5050505050905090565b6060611c3a82611614565b611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7090613666565b60405180910390fd5b6000611c83611b9d565b90506000815111611ca35760405180602001604052806000815250611cce565b80611cad84612035565b604051602001611cbe9291906133be565b6040516020818303038152906040525b915050919050565b611cf08282604051806020016040528060008152506121e2565b5050565b80600c60008481526020019081526020016000209080519060200190611d1b92919061279b565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611d9583838361223d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dd857611dd381612242565b611e17565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611e1657611e15838261228b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e5a57611e55816123f8565b611e99565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611e9857611e97828261253b565b5b5b505050565b6000611ebf8473ffffffffffffffffffffffffffffffffffffffff166125ba565b15612028578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ee8611680565b8786866040518563ffffffff1660e01b8152600401611f0a94939291906133fd565b602060405180830381600087803b158015611f2457600080fd5b505af1925050508015611f5557506040513d601f19601f82011682018060405250810190611f529190612b47565b60015b611fd8573d8060008114611f85576040519150601f19603f3d011682016040523d82523d6000602084013e611f8a565b606091505b50600081511415611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc7906134a6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061202d565b600190505b949350505050565b6060600082141561207d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121dd565b600082905060005b600082146120af57808061209890613998565b915050600a826120a8919061384b565b9150612085565b60008167ffffffffffffffff8111156120f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121235781602001600182028036833780820191505090505b5090505b600085146121d65760018261213c919061387c565b9150600a8561214b91906139e1565b603061215791906137f5565b60f81b818381518110612193577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121cf919061384b565b9450612127565b8093505050505b919050565b6121ec83836125cd565b6121f96000848484611e9e565b612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f906134a6565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161229884610c40565b6122a2919061387c565b9050600060076000848152602001908152602001600020549050818114612387576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061240c919061387c565b9050600060096000848152602001908152602001600020549050600060088381548110612462577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106124aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061251f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061254683610c40565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612634906135e6565b60405180910390fd5b61264681611614565b15612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d906134e6565b60405180910390fd5b61269260008383611d8a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126e291906137f5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546127a790613966565b90600052602060002090601f0160209004810192826127c95760008555612810565b82601f106127e257805160ff1916838001178555612810565b82800160010185558215612810579182015b8281111561280f5782518255916020019190600101906127f4565b5b50905061281d9190612821565b5090565b5b8082111561283a576000816000905550600101612822565b5090565b600061285161284c84613752565b613721565b90508281526020810184848401111561286957600080fd5b612874848285613924565b509392505050565b600061288f61288a84613782565b613721565b9050828152602081018484840111156128a757600080fd5b6128b2848285613924565b509392505050565b6000813590506128c981613adf565b92915050565b6000813590506128de81613af6565b92915050565b6000813590506128f381613b0d565b92915050565b60008151905061290881613b0d565b92915050565b600082601f83011261291f57600080fd5b813561292f84826020860161283e565b91505092915050565b600082601f83011261294957600080fd5b813561295984826020860161287c565b91505092915050565b60008135905061297181613b24565b92915050565b60006020828403121561298957600080fd5b6000612997848285016128ba565b91505092915050565b600080604083850312156129b357600080fd5b60006129c1858286016128ba565b92505060206129d2858286016128ba565b9150509250929050565b6000806000606084860312156129f157600080fd5b60006129ff868287016128ba565b9350506020612a10868287016128ba565b9250506040612a2186828701612962565b9150509250925092565b60008060008060808587031215612a4157600080fd5b6000612a4f878288016128ba565b9450506020612a60878288016128ba565b9350506040612a7187828801612962565b925050606085013567ffffffffffffffff811115612a8e57600080fd5b612a9a8782880161290e565b91505092959194509250565b60008060408385031215612ab957600080fd5b6000612ac7858286016128ba565b9250506020612ad8858286016128cf565b9150509250929050565b60008060408385031215612af557600080fd5b6000612b03858286016128ba565b9250506020612b1485828601612962565b9150509250929050565b600060208284031215612b3057600080fd5b6000612b3e848285016128e4565b91505092915050565b600060208284031215612b5957600080fd5b6000612b67848285016128f9565b91505092915050565b600060208284031215612b8257600080fd5b600082013567ffffffffffffffff811115612b9c57600080fd5b612ba884828501612938565b91505092915050565b600060208284031215612bc357600080fd5b6000612bd184828501612962565b91505092915050565b612be3816138b0565b82525050565b612bf2816138c2565b82525050565b6000612c03826137b2565b612c0d81856137c8565b9350612c1d818560208601613933565b612c2681613ace565b840191505092915050565b6000612c3c826137bd565b612c4681856137d9565b9350612c56818560208601613933565b612c5f81613ace565b840191505092915050565b6000612c75826137bd565b612c7f81856137ea565b9350612c8f818560208601613933565b80840191505092915050565b6000612ca8602b836137d9565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000612d0e6032836137d9565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612d746026836137d9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612dda601c836137d9565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612e1a6024836137d9565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e806019836137d9565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612ec0602c836137d9565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612f266010836137d9565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000612f666038836137d9565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612fcc602a836137d9565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006130326029836137d9565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006130986020836137d9565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006130d8602c836137d9565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061313e6020836137d9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061317e6029836137d9565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006131e4602f836137d9565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061324a6021836137d9565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132b0600a836137d9565b91507f6475706c696361746564000000000000000000000000000000000000000000006000830152602082019050919050565b60006132f06031836137d9565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613356602c836137d9565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6133b88161391a565b82525050565b60006133ca8285612c6a565b91506133d68284612c6a565b91508190509392505050565b60006020820190506133f76000830184612bda565b92915050565b60006080820190506134126000830187612bda565b61341f6020830186612bda565b61342c60408301856133af565b818103606083015261343e8184612bf8565b905095945050505050565b600060208201905061345e6000830184612be9565b92915050565b6000602082019050818103600083015261347e8184612c31565b905092915050565b6000602082019050818103600083015261349f81612c9b565b9050919050565b600060208201905081810360008301526134bf81612d01565b9050919050565b600060208201905081810360008301526134df81612d67565b9050919050565b600060208201905081810360008301526134ff81612dcd565b9050919050565b6000602082019050818103600083015261351f81612e0d565b9050919050565b6000602082019050818103600083015261353f81612e73565b9050919050565b6000602082019050818103600083015261355f81612eb3565b9050919050565b6000602082019050818103600083015261357f81612f19565b9050919050565b6000602082019050818103600083015261359f81612f59565b9050919050565b600060208201905081810360008301526135bf81612fbf565b9050919050565b600060208201905081810360008301526135df81613025565b9050919050565b600060208201905081810360008301526135ff8161308b565b9050919050565b6000602082019050818103600083015261361f816130cb565b9050919050565b6000602082019050818103600083015261363f81613131565b9050919050565b6000602082019050818103600083015261365f81613171565b9050919050565b6000602082019050818103600083015261367f816131d7565b9050919050565b6000602082019050818103600083015261369f8161323d565b9050919050565b600060208201905081810360008301526136bf816132a3565b9050919050565b600060208201905081810360008301526136df816132e3565b9050919050565b600060208201905081810360008301526136ff81613349565b9050919050565b600060208201905061371b60008301846133af565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561374857613747613a9f565b5b8060405250919050565b600067ffffffffffffffff82111561376d5761376c613a9f565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561379d5761379c613a9f565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006138008261391a565b915061380b8361391a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138405761383f613a12565b5b828201905092915050565b60006138568261391a565b91506138618361391a565b92508261387157613870613a41565b5b828204905092915050565b60006138878261391a565b91506138928361391a565b9250828210156138a5576138a4613a12565b5b828203905092915050565b60006138bb826138fa565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613951578082015181840152602081019050613936565b83811115613960576000848401525b50505050565b6000600282049050600182168061397e57607f821691505b6020821081141561399257613991613a70565b5b50919050565b60006139a38261391a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139d6576139d5613a12565b5b600182019050919050565b60006139ec8261391a565b91506139f78361391a565b925082613a0757613a06613a41565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613ae8816138b0565b8114613af357600080fd5b50565b613aff816138c2565b8114613b0a57600080fd5b50565b613b16816138ce565b8114613b2157600080fd5b50565b613b2d8161391a565b8114613b3857600080fd5b5056fea2646970667358221220c41a5cc0dc4ea7c7b56c600266ceb2b3d2d62b7cb3fc6c98833fe8df730471fb64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000115765623320577261707065642032303231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5745423357524150504544323032310000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80636985a022116100de57806395d89b4111610097578063c87b56dd11610071578063c87b56dd1461045d578063d85d3d271461048d578063e985e9c5146104a9578063f2fde38b146104d95761018e565b806395d89b4114610407578063a22cb46514610425578063b88d4fde146104415761018e565b80636985a0221461037d5780636c0360eb1461038757806370a08231146103a5578063715018a6146103d55780637805862f146103df5780638da5cb5b146103e95761018e565b80632f745c591161014b5780634f6ccce7116101255780634f6ccce7146102e357806355f804b3146103135780635c975abb1461032f5780636352211e1461034d5761018e565b80632f745c591461026757806338e21cce1461029757806342842e0e146102c75761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b31461021157806318160ddd1461022d57806323b872dd1461024b575b600080fd5b6101ad60048036038101906101a89190612b1e565b6104f5565b6040516101ba9190613449565b60405180910390f35b6101cb61056f565b6040516101d89190613464565b60405180910390f35b6101fb60048036038101906101f69190612bb1565b610601565b60405161020891906133e2565b60405180910390f35b61022b60048036038101906102269190612ae2565b610686565b005b61023561079e565b6040516102429190613706565b60405180910390f35b610265600480360381019061026091906129dc565b6107ab565b005b610281600480360381019061027c9190612ae2565b61080b565b60405161028e9190613706565b60405180910390f35b6102b160048036038101906102ac9190612977565b6108b0565b6040516102be9190613449565b60405180910390f35b6102e160048036038101906102dc91906129dc565b6108d0565b005b6102fd60048036038101906102f89190612bb1565b6108f0565b60405161030a9190613706565b60405180910390f35b61032d60048036038101906103289190612b70565b610987565b005b610337610a1d565b6040516103449190613449565b60405180910390f35b61036760048036038101906103629190612bb1565b610a30565b60405161037491906133e2565b60405180910390f35b610385610ae2565b005b61038f610bb2565b60405161039c9190613464565b60405180910390f35b6103bf60048036038101906103ba9190612977565b610c40565b6040516103cc9190613706565b60405180910390f35b6103dd610cf8565b005b6103e7610d80565b005b6103f1610e50565b6040516103fe91906133e2565b60405180910390f35b61040f610e7a565b60405161041c9190613464565b60405180910390f35b61043f600480360381019061043a9190612aa6565b610f0c565b005b61045b60048036038101906104569190612a2b565b61108d565b005b61047760048036038101906104729190612bb1565b6110ef565b6040516104849190613464565b60405180910390f35b6104a760048036038101906104a29190612b70565b611241565b005b6104c360048036038101906104be91906129a0565b6113a6565b6040516104d09190613449565b60405180910390f35b6104f360048036038101906104ee9190612977565b61143a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610568575061056782611532565b5b9050919050565b60606000805461057e90613966565b80601f01602080910402602001604051908101604052809291908181526020018280546105aa90613966565b80156105f75780601f106105cc576101008083540402835291602001916105f7565b820191906000526020600020905b8154815290600101906020018083116105da57829003601f168201915b5050505050905090565b600061060c82611614565b61064b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064290613606565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061069182610a30565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f990613686565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610721611680565b73ffffffffffffffffffffffffffffffffffffffff161480610750575061074f8161074a611680565b6113a6565b5b61078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078690613586565b60405180910390fd5b6107998383611688565b505050565b6000600880549050905090565b6107bc6107b6611680565b82611741565b6107fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f2906136c6565b60405180910390fd5b61080683838361181f565b505050565b600061081683610c40565b8210610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e90613486565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6108eb8383836040518060200160405280600081525061108d565b505050565b60006108fa61079e565b821061093b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610932906136e6565b60405180910390fd5b60088281548110610975577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61098f611680565b73ffffffffffffffffffffffffffffffffffffffff166109ad610e50565b73ffffffffffffffffffffffffffffffffffffffff1614610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa90613626565b60405180910390fd5b80600b9080519060200190610a1992919061279b565b5050565b600a60149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad0906135c6565b60405180910390fd5b80915050919050565b610aea611680565b73ffffffffffffffffffffffffffffffffffffffff16610b08610e50565b73ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613626565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051610ba891906133e2565b60405180910390a1565b600b8054610bbf90613966565b80601f0160208091040260200160405190810160405280929190818152602001828054610beb90613966565b8015610c385780601f10610c0d57610100808354040283529160200191610c38565b820191906000526020600020905b815481529060010190602001808311610c1b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca8906135a6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d00611680565b73ffffffffffffffffffffffffffffffffffffffff16610d1e610e50565b73ffffffffffffffffffffffffffffffffffffffff1614610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90613626565b60405180910390fd5b610d7e6000611a7b565b565b610d88611680565b73ffffffffffffffffffffffffffffffffffffffff16610da6610e50565b73ffffffffffffffffffffffffffffffffffffffff1614610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613626565b60405180910390fd5b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051610e4691906133e2565b60405180910390a1565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e8990613966565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590613966565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b5050505050905090565b610f14611680565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613526565b60405180910390fd5b8060056000610f8f611680565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661103c611680565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110819190613449565b60405180910390a35050565b61109e611098611680565b83611741565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d4906136c6565b60405180910390fd5b6110e984848484611b41565b50505050565b60606110fa82611614565b611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090613666565b60405180910390fd5b6000600c6000848152602001908152602001600020805461115990613966565b80601f016020809104026020016040519081016040528092919081815260200182805461118590613966565b80156111d25780601f106111a7576101008083540402835291602001916111d2565b820191906000526020600020905b8154815290600101906020018083116111b557829003601f168201915b5050505050905060006111e3611b9d565b90506000815114156111f957819250505061123c565b60008251111561122e5780826040516020016112169291906133be565b6040516020818303038152906040529250505061123c565b61123784611c2f565b925050505b919050565b600a60149054906101000a900460ff1615611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890613566565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561131e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611315906136a6565b60405180910390fd5b6000600161132a61079e565b61133491906137f5565b90506113403382611cd6565b61134a8183611cf4565b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611442611680565b73ffffffffffffffffffffffffffffffffffffffff16611460610e50565b73ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90613626565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d906134c6565b60405180910390fd5b61152f81611a7b565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806115fd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061160d575061160c82611d20565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116fb83610a30565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061174c82611614565b61178b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178290613546565b60405180910390fd5b600061179683610a30565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061180557508373ffffffffffffffffffffffffffffffffffffffff166117ed84610601565b73ffffffffffffffffffffffffffffffffffffffff16145b80611816575061181581856113a6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661183f82610a30565b73ffffffffffffffffffffffffffffffffffffffff1614611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90613646565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90613506565b60405180910390fd5b611910838383611d8a565b61191b600082611688565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196b919061387c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119c291906137f5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b4c84848461181f565b611b5884848484611e9e565b611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e906134a6565b60405180910390fd5b50505050565b6060600b8054611bac90613966565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd890613966565b8015611c255780601f10611bfa57610100808354040283529160200191611c25565b820191906000526020600020905b815481529060010190602001808311611c0857829003601f168201915b5050505050905090565b6060611c3a82611614565b611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7090613666565b60405180910390fd5b6000611c83611b9d565b90506000815111611ca35760405180602001604052806000815250611cce565b80611cad84612035565b604051602001611cbe9291906133be565b6040516020818303038152906040525b915050919050565b611cf08282604051806020016040528060008152506121e2565b5050565b80600c60008481526020019081526020016000209080519060200190611d1b92919061279b565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611d9583838361223d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dd857611dd381612242565b611e17565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611e1657611e15838261228b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e5a57611e55816123f8565b611e99565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611e9857611e97828261253b565b5b5b505050565b6000611ebf8473ffffffffffffffffffffffffffffffffffffffff166125ba565b15612028578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ee8611680565b8786866040518563ffffffff1660e01b8152600401611f0a94939291906133fd565b602060405180830381600087803b158015611f2457600080fd5b505af1925050508015611f5557506040513d601f19601f82011682018060405250810190611f529190612b47565b60015b611fd8573d8060008114611f85576040519150601f19603f3d011682016040523d82523d6000602084013e611f8a565b606091505b50600081511415611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc7906134a6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061202d565b600190505b949350505050565b6060600082141561207d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121dd565b600082905060005b600082146120af57808061209890613998565b915050600a826120a8919061384b565b9150612085565b60008167ffffffffffffffff8111156120f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121235781602001600182028036833780820191505090505b5090505b600085146121d65760018261213c919061387c565b9150600a8561214b91906139e1565b603061215791906137f5565b60f81b818381518110612193577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121cf919061384b565b9450612127565b8093505050505b919050565b6121ec83836125cd565b6121f96000848484611e9e565b612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f906134a6565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161229884610c40565b6122a2919061387c565b9050600060076000848152602001908152602001600020549050818114612387576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061240c919061387c565b9050600060096000848152602001908152602001600020549050600060088381548110612462577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106124aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061251f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061254683610c40565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612634906135e6565b60405180910390fd5b61264681611614565b15612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d906134e6565b60405180910390fd5b61269260008383611d8a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126e291906137f5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546127a790613966565b90600052602060002090601f0160209004810192826127c95760008555612810565b82601f106127e257805160ff1916838001178555612810565b82800160010185558215612810579182015b8281111561280f5782518255916020019190600101906127f4565b5b50905061281d9190612821565b5090565b5b8082111561283a576000816000905550600101612822565b5090565b600061285161284c84613752565b613721565b90508281526020810184848401111561286957600080fd5b612874848285613924565b509392505050565b600061288f61288a84613782565b613721565b9050828152602081018484840111156128a757600080fd5b6128b2848285613924565b509392505050565b6000813590506128c981613adf565b92915050565b6000813590506128de81613af6565b92915050565b6000813590506128f381613b0d565b92915050565b60008151905061290881613b0d565b92915050565b600082601f83011261291f57600080fd5b813561292f84826020860161283e565b91505092915050565b600082601f83011261294957600080fd5b813561295984826020860161287c565b91505092915050565b60008135905061297181613b24565b92915050565b60006020828403121561298957600080fd5b6000612997848285016128ba565b91505092915050565b600080604083850312156129b357600080fd5b60006129c1858286016128ba565b92505060206129d2858286016128ba565b9150509250929050565b6000806000606084860312156129f157600080fd5b60006129ff868287016128ba565b9350506020612a10868287016128ba565b9250506040612a2186828701612962565b9150509250925092565b60008060008060808587031215612a4157600080fd5b6000612a4f878288016128ba565b9450506020612a60878288016128ba565b9350506040612a7187828801612962565b925050606085013567ffffffffffffffff811115612a8e57600080fd5b612a9a8782880161290e565b91505092959194509250565b60008060408385031215612ab957600080fd5b6000612ac7858286016128ba565b9250506020612ad8858286016128cf565b9150509250929050565b60008060408385031215612af557600080fd5b6000612b03858286016128ba565b9250506020612b1485828601612962565b9150509250929050565b600060208284031215612b3057600080fd5b6000612b3e848285016128e4565b91505092915050565b600060208284031215612b5957600080fd5b6000612b67848285016128f9565b91505092915050565b600060208284031215612b8257600080fd5b600082013567ffffffffffffffff811115612b9c57600080fd5b612ba884828501612938565b91505092915050565b600060208284031215612bc357600080fd5b6000612bd184828501612962565b91505092915050565b612be3816138b0565b82525050565b612bf2816138c2565b82525050565b6000612c03826137b2565b612c0d81856137c8565b9350612c1d818560208601613933565b612c2681613ace565b840191505092915050565b6000612c3c826137bd565b612c4681856137d9565b9350612c56818560208601613933565b612c5f81613ace565b840191505092915050565b6000612c75826137bd565b612c7f81856137ea565b9350612c8f818560208601613933565b80840191505092915050565b6000612ca8602b836137d9565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000612d0e6032836137d9565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612d746026836137d9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612dda601c836137d9565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612e1a6024836137d9565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e806019836137d9565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612ec0602c836137d9565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612f266010836137d9565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000612f666038836137d9565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612fcc602a836137d9565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006130326029836137d9565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006130986020836137d9565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006130d8602c836137d9565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061313e6020836137d9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061317e6029836137d9565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006131e4602f836137d9565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061324a6021836137d9565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132b0600a836137d9565b91507f6475706c696361746564000000000000000000000000000000000000000000006000830152602082019050919050565b60006132f06031836137d9565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613356602c836137d9565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6133b88161391a565b82525050565b60006133ca8285612c6a565b91506133d68284612c6a565b91508190509392505050565b60006020820190506133f76000830184612bda565b92915050565b60006080820190506134126000830187612bda565b61341f6020830186612bda565b61342c60408301856133af565b818103606083015261343e8184612bf8565b905095945050505050565b600060208201905061345e6000830184612be9565b92915050565b6000602082019050818103600083015261347e8184612c31565b905092915050565b6000602082019050818103600083015261349f81612c9b565b9050919050565b600060208201905081810360008301526134bf81612d01565b9050919050565b600060208201905081810360008301526134df81612d67565b9050919050565b600060208201905081810360008301526134ff81612dcd565b9050919050565b6000602082019050818103600083015261351f81612e0d565b9050919050565b6000602082019050818103600083015261353f81612e73565b9050919050565b6000602082019050818103600083015261355f81612eb3565b9050919050565b6000602082019050818103600083015261357f81612f19565b9050919050565b6000602082019050818103600083015261359f81612f59565b9050919050565b600060208201905081810360008301526135bf81612fbf565b9050919050565b600060208201905081810360008301526135df81613025565b9050919050565b600060208201905081810360008301526135ff8161308b565b9050919050565b6000602082019050818103600083015261361f816130cb565b9050919050565b6000602082019050818103600083015261363f81613131565b9050919050565b6000602082019050818103600083015261365f81613171565b9050919050565b6000602082019050818103600083015261367f816131d7565b9050919050565b6000602082019050818103600083015261369f8161323d565b9050919050565b600060208201905081810360008301526136bf816132a3565b9050919050565b600060208201905081810360008301526136df816132e3565b9050919050565b600060208201905081810360008301526136ff81613349565b9050919050565b600060208201905061371b60008301846133af565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561374857613747613a9f565b5b8060405250919050565b600067ffffffffffffffff82111561376d5761376c613a9f565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561379d5761379c613a9f565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006138008261391a565b915061380b8361391a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138405761383f613a12565b5b828201905092915050565b60006138568261391a565b91506138618361391a565b92508261387157613870613a41565b5b828204905092915050565b60006138878261391a565b91506138928361391a565b9250828210156138a5576138a4613a12565b5b828203905092915050565b60006138bb826138fa565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613951578082015181840152602081019050613936565b83811115613960576000848401525b50505050565b6000600282049050600182168061397e57607f821691505b6020821081141561399257613991613a70565b5b50919050565b60006139a38261391a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139d6576139d5613a12565b5b600182019050919050565b60006139ec8261391a565b91506139f78361391a565b925082613a0757613a06613a41565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613ae8816138b0565b8114613af357600080fd5b50565b613aff816138c2565b8114613b0a57600080fd5b50565b613b16816138ce565b8114613b2157600080fd5b50565b613b2d8161391a565b8114613b3857600080fd5b5056fea2646970667358221220c41a5cc0dc4ea7c7b56c600266ceb2b3d2d62b7cb3fc6c98833fe8df730471fb64736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000115765623320577261707065642032303231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5745423357524150504544323032310000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Web3 Wrapped 2021
Arg [1] : _symbol (string): WEB3WRAPPED2021

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [3] : 5765623320577261707065642032303231000000000000000000000000000000
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 5745423357524150504544323032310000000000000000000000000000000000


Deployed Bytecode Sourcemap

120:1636:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;912:222:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2332:98:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3843:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3381:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1537:111:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4707:330:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1213:253:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;272:41:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5103:179:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1720:230:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1652:102:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;203:18:13;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2035:235:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;471:97:13;;;:::i;:::-;;201:21:11;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1773:205:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1601:92:12;;;:::i;:::-;;574:102:13;;;:::i;:::-;;969:85:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2494:102:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4127:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5348:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;742:657:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;447:289;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4483:162:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1842:189:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;912:222:4;1014:4;1052:35;1037:50;;;:11;:50;;;;:90;;;;1091:36;1115:11;1091:23;:36::i;:::-;1037:90;1030:97;;912:222;;;:::o;2332:98:3:-;2386:13;2418:5;2411:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2332:98;:::o;3843:217::-;3919:7;3946:16;3954:7;3946;:16::i;:::-;3938:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4029:15;:24;4045:7;4029:24;;;;;;;;;;;;;;;;;;;;;4022:31;;3843:217;;;:::o;3381:401::-;3461:13;3477:23;3492:7;3477:14;:23::i;:::-;3461:39;;3524:5;3518:11;;:2;:11;;;;3510:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3615:5;3599:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3624:37;3641:5;3648:12;:10;:12::i;:::-;3624:16;:37::i;:::-;3599:62;3578:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3754:21;3763:2;3767:7;3754:8;:21::i;:::-;3381:401;;;:::o;1537:111:4:-;1598:7;1624:10;:17;;;;1617:24;;1537:111;:::o;4707:330:3:-;4896:41;4915:12;:10;:12::i;:::-;4929:7;4896:18;:41::i;:::-;4888:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5002:28;5012:4;5018:2;5022:7;5002:9;:28::i;:::-;4707:330;;;:::o;1213:253:4:-;1310:7;1345:23;1362:5;1345:16;:23::i;:::-;1337:5;:31;1329:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1433:12;:19;1446:5;1433:19;;;;;;;;;;;;;;;:26;1453:5;1433:26;;;;;;;;;;;;1426:33;;1213:253;;;;:::o;272:41:11:-;;;;;;;;;;;;;;;;;;;;;;:::o;5103:179:3:-;5236:39;5253:4;5259:2;5263:7;5236:39;;;;;;;;;;;;:16;:39::i;:::-;5103:179;;;:::o;1720:230:4:-;1795:7;1830:30;:28;:30::i;:::-;1822:5;:38;1814:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1926:10;1937:5;1926:17;;;;;;;;;;;;;;;;;;;;;;;;1919:24;;1720:230;;;:::o;1652:102:11:-;1192:12:12;:10;:12::i;:::-;1181:23;;:7;:5;:7::i;:::-;:23;;;1173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1736:11:11::1;1726:7;:21;;;;;;;;;;;;:::i;:::-;;1652:102:::0;:::o;203:18:13:-;;;;;;;;;;;;;:::o;2035:235:3:-;2107:7;2126:13;2142:7;:16;2150:7;2142:16;;;;;;;;;;;;;;;;;;;;;2126:32;;2193:1;2176:19;;:5;:19;;;;2168:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2258:5;2251:12;;;2035:235;;;:::o;471:97:13:-;1192:12:12;:10;:12::i;:::-;1181:23;;:7;:5;:7::i;:::-;:23;;;1173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;524:4:13::1;515:6;;:13;;;;;;;;;;;;;;;;;;543:18;550:10;543:18;;;;;;:::i;:::-;;;;;;;;471:97::o:0;201:21:11:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1773:205:3:-;1845:7;1889:1;1872:19;;:5;:19;;;;1864:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1955:9;:16;1965:5;1955:16;;;;;;;;;;;;;;;;1948:23;;1773:205;;;:::o;1601:92:12:-;1192:12;:10;:12::i;:::-;1181:23;;:7;:5;:7::i;:::-;:23;;;1173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1665:21:::1;1683:1;1665:9;:21::i;:::-;1601:92::o:0;574:102:13:-;1192:12:12;:10;:12::i;:::-;1181:23;;:7;:5;:7::i;:::-;:23;;;1173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;629:5:13::1;620:6;;:14;;;;;;;;;;;;;;;;;;649:20;658:10;649:20;;;;;;:::i;:::-;;;;;;;;574:102::o:0;969:85:12:-;1015:7;1041:6;;;;;;;;;;;1034:13;;969:85;:::o;2494:102:3:-;2550:13;2582:7;2575:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2494:102;:::o;4127:290::-;4241:12;:10;:12::i;:::-;4229:24;;:8;:24;;;;4221:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4339:8;4294:18;:32;4313:12;:10;:12::i;:::-;4294:32;;;;;;;;;;;;;;;:42;4327:8;4294:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4391:8;4362:48;;4377:12;:10;:12::i;:::-;4362:48;;;4401:8;4362:48;;;;;;:::i;:::-;;;;;;;;4127:290;;:::o;5348:320::-;5517:41;5536:12;:10;:12::i;:::-;5550:7;5517:18;:41::i;:::-;5509:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5622:39;5636:4;5642:2;5646:7;5655:5;5622:13;:39::i;:::-;5348:320;;;;:::o;742:657:11:-;807:13;844:16;852:7;844;:16::i;:::-;836:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;923:23;949:10;:19;960:7;949:19;;;;;;;;;;;923:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;978:18;999:10;:8;:10::i;:::-;978:31;;1104:1;1088:4;1082:18;:23;1078:70;;;1128:9;1121:16;;;;;;1078:70;1276:1;1256:9;1250:23;:27;1246:106;;;1324:4;1330:9;1307:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1293:48;;;;;;1246:106;1369:23;1384:7;1369:14;:23::i;:::-;1362:30;;;;742:657;;;;:::o;447:289::-;325:6:13;;;;;;;;;;;324:7;316:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;526:9:11::1;:21;536:10;526:21;;;;;;;;;;;;;;;;;;;;;;;;;525:22;517:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;573:15;607:1;591:13;:11;:13::i;:::-;:17;;;;:::i;:::-;573:35;;618:30;628:10;640:7;618:9;:30::i;:::-;658:32;671:7;680:9;658:12;:32::i;:::-;725:4;701:9;:21;711:10;701:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;362:1:13;447:289:11::0;:::o;4483:162:3:-;4580:4;4603:18;:25;4622:5;4603:25;;;;;;;;;;;;;;;:35;4629:8;4603:35;;;;;;;;;;;;;;;;;;;;;;;;;4596:42;;4483:162;;;;:::o;1842:189:12:-;1192:12;:10;:12::i;:::-;1181:23;;:7;:5;:7::i;:::-;:23;;;1173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1950:1:::1;1930:22;;:8;:22;;;;1922:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2005:19;2015:8;2005:9;:19::i;:::-;1842:189:::0;:::o;1434:280:3:-;1536:4;1582:25;1567:40;;;:11;:40;;;;:96;;;;1630:33;1615:48;;;:11;:48;;;;1567:96;:140;;;;1671:36;1695:11;1671:23;:36::i;:::-;1567:140;1552:155;;1434:280;;;:::o;7140:125::-;7205:4;7256:1;7228:30;;:7;:16;7236:7;7228:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7221:37;;7140:125;;;:::o;590:96:1:-;643:7;669:10;662:17;;590:96;:::o;10991:171:3:-;11092:2;11065:15;:24;11081:7;11065:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11147:7;11143:2;11109:46;;11118:23;11133:7;11118:14;:23::i;:::-;11109:46;;;;;;;;;;;;10991:171;;:::o;7423:344::-;7516:4;7540:16;7548:7;7540;:16::i;:::-;7532:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7615:13;7631:23;7646:7;7631:14;:23::i;:::-;7615:39;;7683:5;7672:16;;:7;:16;;;:51;;;;7716:7;7692:31;;:20;7704:7;7692:11;:20::i;:::-;:31;;;7672:51;:87;;;;7727:32;7744:5;7751:7;7727:16;:32::i;:::-;7672:87;7664:96;;;7423:344;;;;:::o;10320:560::-;10474:4;10447:31;;:23;10462:7;10447:14;:23::i;:::-;:31;;;10439:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10556:1;10542:16;;:2;:16;;;;10534:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10610:39;10631:4;10637:2;10641:7;10610:20;:39::i;:::-;10711:29;10728:1;10732:7;10711:8;:29::i;:::-;10770:1;10751:9;:15;10761:4;10751:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10798:1;10781:9;:13;10791:2;10781:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10828:2;10809:7;:16;10817:7;10809:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10865:7;10861:2;10846:27;;10855:4;10846:27;;;;;;;;;;;;10320:560;;;:::o;2037:169:12:-;2092:16;2111:6;;;;;;;;;;;2092:25;;2136:8;2127:6;;:17;;;;;;;;;;;;;;;;;;2190:8;2159:40;;2180:8;2159:40;;;;;;;;;;;;2037:169;;:::o;6530:307:3:-;6681:28;6691:4;6697:2;6701:7;6681:9;:28::i;:::-;6727:48;6750:4;6756:2;6760:7;6769:5;6727:22;:48::i;:::-;6719:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6530:307;;;;:::o;1540:106:11:-;1600:13;1632:7;1625:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1540:106;:::o;2662:329:3:-;2735:13;2768:16;2776:7;2768;:16::i;:::-;2760:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2847:21;2871:10;:8;:10::i;:::-;2847:34;;2922:1;2904:7;2898:21;:25;:86;;;;;;;;;;;;;;;;;2950:7;2959:18;:7;:16;:18::i;:::-;2933:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2898:86;2891:93;;;2662:329;;;:::o;8097:108::-;8172:26;8182:2;8186:7;8172:26;;;;;;;;;;;;:9;:26::i;:::-;8097:108;;:::o;1405:129:11:-;1518:9;1496:10;:19;1507:7;1496:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;1405:129;;:::o;766:155:2:-;851:4;889:25;874:40;;;:11;:40;;;;867:47;;766:155;;;:::o;2546:572:4:-;2685:45;2712:4;2718:2;2722:7;2685:26;:45::i;:::-;2761:1;2745:18;;:4;:18;;;2741:183;;;2779:40;2811:7;2779:31;:40::i;:::-;2741:183;;;2848:2;2840:10;;:4;:10;;;2836:88;;2866:47;2899:4;2905:7;2866:32;:47::i;:::-;2836:88;2741:183;2951:1;2937:16;;:2;:16;;;2933:179;;;2969:45;3006:7;2969:36;:45::i;:::-;2933:179;;;3041:4;3035:10;;:2;:10;;;3031:81;;3061:40;3089:2;3093:7;3061:27;:40::i;:::-;3031:81;2933:179;2546:572;;;:::o;11715:778:3:-;11865:4;11885:15;:2;:13;;;:15::i;:::-;11881:606;;;11936:2;11920:36;;;11957:12;:10;:12::i;:::-;11971:4;11977:7;11986:5;11920:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11916:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12176:1;12159:6;:13;:18;12155:266;;;12201:60;;;;;;;;;;:::i;:::-;;;;;;;;12155:266;12373:6;12367:13;12358:6;12354:2;12350:15;12343:38;11916:519;12052:41;;;12042:51;;;:6;:51;;;;12035:58;;;;;11881:606;12472:4;12465:11;;11715:778;;;;;;;:::o;278:703:14:-;334:13;560:1;551:5;:10;547:51;;;577:10;;;;;;;;;;;;;;;;;;;;;547:51;607:12;622:5;607:20;;637:14;661:75;676:1;668:4;:9;661:75;;693:8;;;;;:::i;:::-;;;;723:2;715:10;;;;;:::i;:::-;;;661:75;;;745:19;777:6;767:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;745:39;;794:150;810:1;801:5;:10;794:150;;837:1;827:11;;;;;:::i;:::-;;;903:2;895:5;:10;;;;:::i;:::-;882:2;:24;;;;:::i;:::-;869:39;;852:6;859;852:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;931:2;922:11;;;;;:::i;:::-;;;794:150;;;967:6;953:21;;;;;278:703;;;;:::o;8426:311:3:-;8551:18;8557:2;8561:7;8551:5;:18::i;:::-;8600:54;8631:1;8635:2;8639:7;8648:5;8600:22;:54::i;:::-;8579:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8426:311;;;:::o;13049:122::-;;;;:::o;3824:161:4:-;3927:10;:17;;;;3900:15;:24;3916:7;3900:24;;;;;;;;;;;:44;;;;3954:10;3970:7;3954:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3824:161;:::o;4602:970::-;4864:22;4914:1;4889:22;4906:4;4889:16;:22::i;:::-;:26;;;;:::i;:::-;4864:51;;4925:18;4946:17;:26;4964:7;4946:26;;;;;;;;;;;;4925:47;;5090:14;5076:10;:28;5072:323;;5120:19;5142:12;:18;5155:4;5142:18;;;;;;;;;;;;;;;:34;5161:14;5142:34;;;;;;;;;;;;5120:56;;5224:11;5191:12;:18;5204:4;5191:18;;;;;;;;;;;;;;;:30;5210:10;5191:30;;;;;;;;;;;:44;;;;5340:10;5307:17;:30;5325:11;5307:30;;;;;;;;;;;:43;;;;5072:323;;5488:17;:26;5506:7;5488:26;;;;;;;;;;;5481:33;;;5531:12;:18;5544:4;5531:18;;;;;;;;;;;;;;;:34;5550:14;5531:34;;;;;;;;;;;5524:41;;;4602:970;;;;:::o;5860:1061::-;6109:22;6154:1;6134:10;:17;;;;:21;;;;:::i;:::-;6109:46;;6165:18;6186:15;:24;6202:7;6186:24;;;;;;;;;;;;6165:45;;6532:19;6554:10;6565:14;6554:26;;;;;;;;;;;;;;;;;;;;;;;;6532:48;;6616:11;6591:10;6602;6591:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;6726:10;6695:15;:28;6711:11;6695:28;;;;;;;;;;;:41;;;;6864:15;:24;6880:7;6864:24;;;;;;;;;;;6857:31;;;6898:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5860:1061;;;;:::o;3412:217::-;3496:14;3513:20;3530:2;3513:16;:20::i;:::-;3496:37;;3570:7;3543:12;:16;3556:2;3543:16;;;;;;;;;;;;;;;:24;3560:6;3543:24;;;;;;;;;;;:34;;;;3616:6;3587:17;:26;3605:7;3587:26;;;;;;;;;;;:35;;;;3412:217;;;:::o;721:377:0:-;781:4;984:12;1049:7;1037:20;1029:28;;1090:1;1083:4;:8;1076:15;;;721:377;;;:::o;9059:372:3:-;9152:1;9138:16;;:2;:16;;;;9130:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9210:16;9218:7;9210;:16::i;:::-;9209:17;9201:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9270:45;9299:1;9303:2;9307:7;9270:20;:45::i;:::-;9343:1;9326:9;:13;9336:2;9326:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9373:2;9354:7;:16;9362:7;9354:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9416:7;9412:2;9391:33;;9408:1;9391:33;;;;;;;;;;;;9059:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:15:-;;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:260::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:52;5116:7;5107:6;5096:9;5092:22;5072:52;:::i;:::-;5062:62;;5018:116;4946:195;;;;:::o;5147:282::-;;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5281:1;5278;5271:12;5233:2;5324:1;5349:63;5404:7;5395:6;5384:9;5380:22;5349:63;:::i;:::-;5339:73;;5295:127;5223:206;;;;:::o;5435:375::-;;5553:2;5541:9;5532:7;5528:23;5524:32;5521:2;;;5569:1;5566;5559:12;5521:2;5640:1;5629:9;5625:17;5612:31;5670:18;5662:6;5659:30;5656:2;;;5702:1;5699;5692:12;5656:2;5730:63;5785:7;5776:6;5765:9;5761:22;5730:63;:::i;:::-;5720:73;;5583:220;5511:299;;;;:::o;5816:262::-;;5924:2;5912:9;5903:7;5899:23;5895:32;5892:2;;;5940:1;5937;5930:12;5892:2;5983:1;6008:53;6053:7;6044:6;6033:9;6029:22;6008:53;:::i;:::-;5998:63;;5954:117;5882:196;;;;:::o;6084:118::-;6171:24;6189:5;6171:24;:::i;:::-;6166:3;6159:37;6149:53;;:::o;6208:109::-;6289:21;6304:5;6289:21;:::i;:::-;6284:3;6277:34;6267:50;;:::o;6323:360::-;;6437:38;6469:5;6437:38;:::i;:::-;6491:70;6554:6;6549:3;6491:70;:::i;:::-;6484:77;;6570:52;6615:6;6610:3;6603:4;6596:5;6592:16;6570:52;:::i;:::-;6647:29;6669:6;6647:29;:::i;:::-;6642:3;6638:39;6631:46;;6413:270;;;;;:::o;6689:364::-;;6805:39;6838:5;6805:39;:::i;:::-;6860:71;6924:6;6919:3;6860:71;:::i;:::-;6853:78;;6940:52;6985:6;6980:3;6973:4;6966:5;6962:16;6940:52;:::i;:::-;7017:29;7039:6;7017:29;:::i;:::-;7012:3;7008:39;7001:46;;6781:272;;;;;:::o;7059:377::-;;7193:39;7226:5;7193:39;:::i;:::-;7248:89;7330:6;7325:3;7248:89;:::i;:::-;7241:96;;7346:52;7391:6;7386:3;7379:4;7372:5;7368:16;7346:52;:::i;:::-;7423:6;7418:3;7414:16;7407:23;;7169:267;;;;;:::o;7442:375::-;;7605:67;7669:2;7664:3;7605:67;:::i;:::-;7598:74;;7702:34;7698:1;7693:3;7689:11;7682:55;7768:13;7763:2;7758:3;7754:12;7747:35;7808:2;7803:3;7799:12;7792:19;;7588:229;;;:::o;7823:382::-;;7986:67;8050:2;8045:3;7986:67;:::i;:::-;7979:74;;8083:34;8079:1;8074:3;8070:11;8063:55;8149:20;8144:2;8139:3;8135:12;8128:42;8196:2;8191:3;8187:12;8180:19;;7969:236;;;:::o;8211:370::-;;8374:67;8438:2;8433:3;8374:67;:::i;:::-;8367:74;;8471:34;8467:1;8462:3;8458:11;8451:55;8537:8;8532:2;8527:3;8523:12;8516:30;8572:2;8567:3;8563:12;8556:19;;8357:224;;;:::o;8587:326::-;;8750:67;8814:2;8809:3;8750:67;:::i;:::-;8743:74;;8847:30;8843:1;8838:3;8834:11;8827:51;8904:2;8899:3;8895:12;8888:19;;8733:180;;;:::o;8919:368::-;;9082:67;9146:2;9141:3;9082:67;:::i;:::-;9075:74;;9179:34;9175:1;9170:3;9166:11;9159:55;9245:6;9240:2;9235:3;9231:12;9224:28;9278:2;9273:3;9269:12;9262:19;;9065:222;;;:::o;9293:323::-;;9456:67;9520:2;9515:3;9456:67;:::i;:::-;9449:74;;9553:27;9549:1;9544:3;9540:11;9533:48;9607:2;9602:3;9598:12;9591:19;;9439:177;;;:::o;9622:376::-;;9785:67;9849:2;9844:3;9785:67;:::i;:::-;9778:74;;9882:34;9878:1;9873:3;9869:11;9862:55;9948:14;9943:2;9938:3;9934:12;9927:36;9989:2;9984:3;9980:12;9973:19;;9768:230;;;:::o;10004:314::-;;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10264:18;10260:1;10255:3;10251:11;10244:39;10309:2;10304:3;10300:12;10293:19;;10150:168;;;:::o;10324:388::-;;10487:67;10551:2;10546:3;10487:67;:::i;:::-;10480:74;;10584:34;10580:1;10575:3;10571:11;10564:55;10650:26;10645:2;10640:3;10636:12;10629:48;10703:2;10698:3;10694:12;10687:19;;10470:242;;;:::o;10718:374::-;;10881:67;10945:2;10940:3;10881:67;:::i;:::-;10874:74;;10978:34;10974:1;10969:3;10965:11;10958:55;11044:12;11039:2;11034:3;11030:12;11023:34;11083:2;11078:3;11074:12;11067:19;;10864:228;;;:::o;11098:373::-;;11261:67;11325:2;11320:3;11261:67;:::i;:::-;11254:74;;11358:34;11354:1;11349:3;11345:11;11338:55;11424:11;11419:2;11414:3;11410:12;11403:33;11462:2;11457:3;11453:12;11446:19;;11244:227;;;:::o;11477:330::-;;11640:67;11704:2;11699:3;11640:67;:::i;:::-;11633:74;;11737:34;11733:1;11728:3;11724:11;11717:55;11798:2;11793:3;11789:12;11782:19;;11623:184;;;:::o;11813:376::-;;11976:67;12040:2;12035:3;11976:67;:::i;:::-;11969:74;;12073:34;12069:1;12064:3;12060:11;12053:55;12139:14;12134:2;12129:3;12125:12;12118:36;12180:2;12175:3;12171:12;12164:19;;11959:230;;;:::o;12195:330::-;;12358:67;12422:2;12417:3;12358:67;:::i;:::-;12351:74;;12455:34;12451:1;12446:3;12442:11;12435:55;12516:2;12511:3;12507:12;12500:19;;12341:184;;;:::o;12531:373::-;;12694:67;12758:2;12753:3;12694:67;:::i;:::-;12687:74;;12791:34;12787:1;12782:3;12778:11;12771:55;12857:11;12852:2;12847:3;12843:12;12836:33;12895:2;12890:3;12886:12;12879:19;;12677:227;;;:::o;12910:379::-;;13073:67;13137:2;13132:3;13073:67;:::i;:::-;13066:74;;13170:34;13166:1;13161:3;13157:11;13150:55;13236:17;13231:2;13226:3;13222:12;13215:39;13280:2;13275:3;13271:12;13264:19;;13056:233;;;:::o;13295:365::-;;13458:67;13522:2;13517:3;13458:67;:::i;:::-;13451:74;;13555:34;13551:1;13546:3;13542:11;13535:55;13621:3;13616:2;13611:3;13607:12;13600:25;13651:2;13646:3;13642:12;13635:19;;13441:219;;;:::o;13666:308::-;;13829:67;13893:2;13888:3;13829:67;:::i;:::-;13822:74;;13926:12;13922:1;13917:3;13913:11;13906:33;13965:2;13960:3;13956:12;13949:19;;13812:162;;;:::o;13980:381::-;;14143:67;14207:2;14202:3;14143:67;:::i;:::-;14136:74;;14240:34;14236:1;14231:3;14227:11;14220:55;14306:19;14301:2;14296:3;14292:12;14285:41;14352:2;14347:3;14343:12;14336:19;;14126:235;;;:::o;14367:376::-;;14530:67;14594:2;14589:3;14530:67;:::i;:::-;14523:74;;14627:34;14623:1;14618:3;14614:11;14607:55;14693:14;14688:2;14683:3;14679:12;14672:36;14734:2;14729:3;14725:12;14718:19;;14513:230;;;:::o;14749:118::-;14836:24;14854:5;14836:24;:::i;:::-;14831:3;14824:37;14814:53;;:::o;14873:435::-;;15075:95;15166:3;15157:6;15075:95;:::i;:::-;15068:102;;15187:95;15278:3;15269:6;15187:95;:::i;:::-;15180:102;;15299:3;15292:10;;15057:251;;;;;:::o;15314:222::-;;15445:2;15434:9;15430:18;15422:26;;15458:71;15526:1;15515:9;15511:17;15502:6;15458:71;:::i;:::-;15412:124;;;;:::o;15542:640::-;;15775:3;15764:9;15760:19;15752:27;;15789:71;15857:1;15846:9;15842:17;15833:6;15789:71;:::i;:::-;15870:72;15938:2;15927:9;15923:18;15914:6;15870:72;:::i;:::-;15952;16020:2;16009:9;16005:18;15996:6;15952:72;:::i;:::-;16071:9;16065:4;16061:20;16056:2;16045:9;16041:18;16034:48;16099:76;16170:4;16161:6;16099:76;:::i;:::-;16091:84;;15742:440;;;;;;;:::o;16188:210::-;;16313:2;16302:9;16298:18;16290:26;;16326:65;16388:1;16377:9;16373:17;16364:6;16326:65;:::i;:::-;16280:118;;;;:::o;16404:313::-;;16555:2;16544:9;16540:18;16532:26;;16604:9;16598:4;16594:20;16590:1;16579:9;16575:17;16568:47;16632:78;16705:4;16696:6;16632:78;:::i;:::-;16624:86;;16522:195;;;;:::o;16723:419::-;;16927:2;16916:9;16912:18;16904:26;;16976:9;16970:4;16966:20;16962:1;16951:9;16947:17;16940:47;17004:131;17130:4;17004:131;:::i;:::-;16996:139;;16894:248;;;:::o;17148:419::-;;17352:2;17341:9;17337:18;17329:26;;17401:9;17395:4;17391:20;17387:1;17376:9;17372:17;17365:47;17429:131;17555:4;17429:131;:::i;:::-;17421:139;;17319:248;;;:::o;17573:419::-;;17777:2;17766:9;17762:18;17754:26;;17826:9;17820:4;17816:20;17812:1;17801:9;17797:17;17790:47;17854:131;17980:4;17854:131;:::i;:::-;17846:139;;17744:248;;;:::o;17998:419::-;;18202:2;18191:9;18187:18;18179:26;;18251:9;18245:4;18241:20;18237:1;18226:9;18222:17;18215:47;18279:131;18405:4;18279:131;:::i;:::-;18271:139;;18169:248;;;:::o;18423:419::-;;18627:2;18616:9;18612:18;18604:26;;18676:9;18670:4;18666:20;18662:1;18651:9;18647:17;18640:47;18704:131;18830:4;18704:131;:::i;:::-;18696:139;;18594:248;;;:::o;18848:419::-;;19052:2;19041:9;19037:18;19029:26;;19101:9;19095:4;19091:20;19087:1;19076:9;19072:17;19065:47;19129:131;19255:4;19129:131;:::i;:::-;19121:139;;19019:248;;;:::o;19273:419::-;;19477:2;19466:9;19462:18;19454:26;;19526:9;19520:4;19516:20;19512:1;19501:9;19497:17;19490:47;19554:131;19680:4;19554:131;:::i;:::-;19546:139;;19444:248;;;:::o;19698:419::-;;19902:2;19891:9;19887:18;19879:26;;19951:9;19945:4;19941:20;19937:1;19926:9;19922:17;19915:47;19979:131;20105:4;19979:131;:::i;:::-;19971:139;;19869:248;;;:::o;20123:419::-;;20327:2;20316:9;20312:18;20304:26;;20376:9;20370:4;20366:20;20362:1;20351:9;20347:17;20340:47;20404:131;20530:4;20404:131;:::i;:::-;20396:139;;20294:248;;;:::o;20548:419::-;;20752:2;20741:9;20737:18;20729:26;;20801:9;20795:4;20791:20;20787:1;20776:9;20772:17;20765:47;20829:131;20955:4;20829:131;:::i;:::-;20821:139;;20719:248;;;:::o;20973:419::-;;21177:2;21166:9;21162:18;21154:26;;21226:9;21220:4;21216:20;21212:1;21201:9;21197:17;21190:47;21254:131;21380:4;21254:131;:::i;:::-;21246:139;;21144:248;;;:::o;21398:419::-;;21602:2;21591:9;21587:18;21579:26;;21651:9;21645:4;21641:20;21637:1;21626:9;21622:17;21615:47;21679:131;21805:4;21679:131;:::i;:::-;21671:139;;21569:248;;;:::o;21823:419::-;;22027:2;22016:9;22012:18;22004:26;;22076:9;22070:4;22066:20;22062:1;22051:9;22047:17;22040:47;22104:131;22230:4;22104:131;:::i;:::-;22096:139;;21994:248;;;:::o;22248:419::-;;22452:2;22441:9;22437:18;22429:26;;22501:9;22495:4;22491:20;22487:1;22476:9;22472:17;22465:47;22529:131;22655:4;22529:131;:::i;:::-;22521:139;;22419:248;;;:::o;22673:419::-;;22877:2;22866:9;22862:18;22854:26;;22926:9;22920:4;22916:20;22912:1;22901:9;22897:17;22890:47;22954:131;23080:4;22954:131;:::i;:::-;22946:139;;22844:248;;;:::o;23098:419::-;;23302:2;23291:9;23287:18;23279:26;;23351:9;23345:4;23341:20;23337:1;23326:9;23322:17;23315:47;23379:131;23505:4;23379:131;:::i;:::-;23371:139;;23269:248;;;:::o;23523:419::-;;23727:2;23716:9;23712:18;23704:26;;23776:9;23770:4;23766:20;23762:1;23751:9;23747:17;23740:47;23804:131;23930:4;23804:131;:::i;:::-;23796:139;;23694:248;;;:::o;23948:419::-;;24152:2;24141:9;24137:18;24129:26;;24201:9;24195:4;24191:20;24187:1;24176:9;24172:17;24165:47;24229:131;24355:4;24229:131;:::i;:::-;24221:139;;24119:248;;;:::o;24373:419::-;;24577:2;24566:9;24562:18;24554:26;;24626:9;24620:4;24616:20;24612:1;24601:9;24597:17;24590:47;24654:131;24780:4;24654:131;:::i;:::-;24646:139;;24544:248;;;:::o;24798:419::-;;25002:2;24991:9;24987:18;24979:26;;25051:9;25045:4;25041:20;25037:1;25026:9;25022:17;25015:47;25079:131;25205:4;25079:131;:::i;:::-;25071:139;;24969:248;;;:::o;25223:222::-;;25354:2;25343:9;25339:18;25331:26;;25367:71;25435:1;25424:9;25420:17;25411:6;25367:71;:::i;:::-;25321:124;;;;:::o;25451:283::-;;25517:2;25511:9;25501:19;;25559:4;25551:6;25547:17;25666:6;25654:10;25651:22;25630:18;25618:10;25615:34;25612:62;25609:2;;;25677:18;;:::i;:::-;25609:2;25717:10;25713:2;25706:22;25491:243;;;;:::o;25740:331::-;;25891:18;25883:6;25880:30;25877:2;;;25913:18;;:::i;:::-;25877:2;25998:4;25994:9;25987:4;25979:6;25975:17;25971:33;25963:41;;26059:4;26053;26049:15;26041:23;;25806:265;;;:::o;26077:332::-;;26229:18;26221:6;26218:30;26215:2;;;26251:18;;:::i;:::-;26215:2;26336:4;26332:9;26325:4;26317:6;26313:17;26309:33;26301:41;;26397:4;26391;26387:15;26379:23;;26144:265;;;:::o;26415:98::-;;26500:5;26494:12;26484:22;;26473:40;;;:::o;26519:99::-;;26605:5;26599:12;26589:22;;26578:40;;;:::o;26624:168::-;;26741:6;26736:3;26729:19;26781:4;26776:3;26772:14;26757:29;;26719:73;;;;:::o;26798:169::-;;26916:6;26911:3;26904:19;26956:4;26951:3;26947:14;26932:29;;26894:73;;;;:::o;26973:148::-;;27112:3;27097:18;;27087:34;;;;:::o;27127:305::-;;27186:20;27204:1;27186:20;:::i;:::-;27181:25;;27220:20;27238:1;27220:20;:::i;:::-;27215:25;;27374:1;27306:66;27302:74;27299:1;27296:81;27293:2;;;27380:18;;:::i;:::-;27293:2;27424:1;27421;27417:9;27410:16;;27171:261;;;;:::o;27438:185::-;;27495:20;27513:1;27495:20;:::i;:::-;27490:25;;27529:20;27547:1;27529:20;:::i;:::-;27524:25;;27568:1;27558:2;;27573:18;;:::i;:::-;27558:2;27615:1;27612;27608:9;27603:14;;27480:143;;;;:::o;27629:191::-;;27689:20;27707:1;27689:20;:::i;:::-;27684:25;;27723:20;27741:1;27723:20;:::i;:::-;27718:25;;27762:1;27759;27756:8;27753:2;;;27767:18;;:::i;:::-;27753:2;27812:1;27809;27805:9;27797:17;;27674:146;;;;:::o;27826:96::-;;27892:24;27910:5;27892:24;:::i;:::-;27881:35;;27871:51;;;:::o;27928:90::-;;28005:5;27998:13;27991:21;27980:32;;27970:48;;;:::o;28024:149::-;;28100:66;28093:5;28089:78;28078:89;;28068:105;;;:::o;28179:126::-;;28256:42;28249:5;28245:54;28234:65;;28224:81;;;:::o;28311:77::-;;28377:5;28366:16;;28356:32;;;:::o;28394:154::-;28478:6;28473:3;28468;28455:30;28540:1;28531:6;28526:3;28522:16;28515:27;28445:103;;;:::o;28554:307::-;28622:1;28632:113;28646:6;28643:1;28640:13;28632:113;;;28731:1;28726:3;28722:11;28716:18;28712:1;28707:3;28703:11;28696:39;28668:2;28665:1;28661:10;28656:15;;28632:113;;;28763:6;28760:1;28757:13;28754:2;;;28843:1;28834:6;28829:3;28825:16;28818:27;28754:2;28603:258;;;;:::o;28867:320::-;;28948:1;28942:4;28938:12;28928:22;;28995:1;28989:4;28985:12;29016:18;29006:2;;29072:4;29064:6;29060:17;29050:27;;29006:2;29134;29126:6;29123:14;29103:18;29100:38;29097:2;;;29153:18;;:::i;:::-;29097:2;28918:269;;;;:::o;29193:233::-;;29255:24;29273:5;29255:24;:::i;:::-;29246:33;;29301:66;29294:5;29291:77;29288:2;;;29371:18;;:::i;:::-;29288:2;29418:1;29411:5;29407:13;29400:20;;29236:190;;;:::o;29432:176::-;;29481:20;29499:1;29481:20;:::i;:::-;29476:25;;29515:20;29533:1;29515:20;:::i;:::-;29510:25;;29554:1;29544:2;;29559:18;;:::i;:::-;29544:2;29600:1;29597;29593:9;29588:14;;29466:142;;;;:::o;29614:180::-;29662:77;29659:1;29652:88;29759:4;29756:1;29749:15;29783:4;29780:1;29773:15;29800:180;29848:77;29845:1;29838:88;29945:4;29942:1;29935:15;29969:4;29966:1;29959:15;29986:180;30034:77;30031:1;30024:88;30131:4;30128:1;30121:15;30155:4;30152:1;30145:15;30172:180;30220:77;30217:1;30210:88;30317:4;30314:1;30307:15;30341:4;30338:1;30331:15;30358:102;;30450:2;30446:7;30441:2;30434:5;30430:14;30426:28;30416:38;;30406:54;;;:::o;30466:122::-;30539:24;30557:5;30539:24;:::i;:::-;30532:5;30529:35;30519:2;;30578:1;30575;30568:12;30519:2;30509:79;:::o;30594:116::-;30664:21;30679:5;30664:21;:::i;:::-;30657:5;30654:32;30644:2;;30700:1;30697;30690:12;30644:2;30634:76;:::o;30716:120::-;30788:23;30805:5;30788:23;:::i;:::-;30781:5;30778:34;30768:2;;30826:1;30823;30816:12;30768:2;30758:78;:::o;30842:122::-;30915:24;30933:5;30915:24;:::i;:::-;30908:5;30905:35;30895:2;;30954:1;30951;30944:12;30895:2;30885:79;:::o

Swarm Source

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