ETH Price: $3,279.80 (+1.06%)

Token

Women Tribe (WT)
 

Overview

Max Total Supply

2 WT

Holders

1

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 WT
0x9A5FE78EE5B4F5A8BAFfF54854822435c68f306c
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:
WomenTribeNFT

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity Multiple files format)

File 13 of 13: WomenTribe_NFT.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;

import "./ERC721B.sol";
import "./Ownable.sol";
import "./SafeMath.sol";
import "./Strings.sol";
import "./MerkleProof.sol";

contract WomenTribeNFT is ERC721B, Ownable {
    using Strings for uint256;
    using SafeMath for uint256;

    string private baseURI;
    string private notRevealedUri;
    string public constant baseExtension = ".json";
    uint256 private reservedMinted = 0;

    uint256 public constant WT_MINT_MAX_AMOUNT = 3;
    uint256 public constant WT_MINT_PRICE = 0.04 ether;
    uint256 public constant WT_MAX_RESERVED_COUNT = 286; // Reserving 286 tokens for the team
    uint256 public constant WT_TOTAL_SUPPLY = 10000;

    bool public isPresaleLive = false; // True only when presale is active
    bool public isPublicSaleLive = false; // Covers the period of general public sales
    bool public revealed = false;

    bytes32 private merkleRootHash;

    mapping(address => uint8) public _mintsPerAddress;

    // Team wallet addresses
    // TODO: replace with real wallet address
    address private constant WALLET1 =
        0x8c70A6fd46D4e11A62D3f9E81E2d33a82fa89f82;
    address private constant WALLET2 =
        0xCBc0ACAC84A25AdD42e908b6932F0678C82FbD45;
    address private constant WALLET3 =
        0x7e503EFCBFb64E8f451e88F8AB438e20a88062c3;
    address private constant WALLET4 =
        0x695Bca9eE4F78cC1049565f9FaC504fc27f02fA2;
    address private constant WALLET5 =
        0xDe3bc9E504Ca4F0E81fAbc1f37160E9ff4Bf90D2;
    address private constant WALLET_TREASURY =
        0x9A5FE78EE5B4F5A8BAFfF54854822435c68f306c;

    // -----------------------------------------------------------
    // CONSTRUCTOR
    constructor(
        string memory _initBaseURI,
        string memory _initNotRevealedUri,
        bytes32 _initMerkleRootHash
    ) ERC721B("Women Tribe", "WT") {
        setBaseURI(_initBaseURI);
        setNotRevealedURI(_initNotRevealedUri);
        setMerkleRootHash(_initMerkleRootHash);
    }

    // ------------------------------------------
    // PUBLIC METHODS
    function totalSupply() external view returns (uint256) {
        return _owners.length;
    }

    // ------------------------------------------
    // MINTING
    function mintPresale(uint256 _mintAmount, bytes32[] calldata _merkleProof)
        external
        payable
    {
        require(isPresaleLive, "the presale is not open yet");
        require(_mintAmount > 0, "amount to mint should be a positive number");

        address minter = _msgSender();
        require(tx.origin == minter, "contracts are not allowed to mint");

        require(
            balanceOf(msg.sender) + _mintAmount <= WT_MINT_MAX_AMOUNT,
            "cannot mint the amount requested"
        );

        uint256 newMintsPerAddress = _mintsPerAddress[msg.sender] + _mintAmount;
        require(
            newMintsPerAddress <= WT_MINT_MAX_AMOUNT,
            "cannot mint the amount requested"
        );

        require(WT_MINT_PRICE * _mintAmount <= msg.value, "insufficient funds");

        bytes32 leafHash = keccak256(abi.encodePacked(msg.sender));
        require(
            MerkleProof.verify(_merkleProof, merkleRootHash, leafHash),
            "your wallet is not in the presale list"
        );

        uint256 supply = _owners.length;
        require(
            supply + _mintAmount <= WT_TOTAL_SUPPLY,
            "the collection is sold out"
        );

        for (uint256 i = 0; i < _mintAmount; i++) {
            _mintsPerAddress[msg.sender]++;
            _mint(msg.sender, supply++);
        }
    }

    function mintPublicSale(uint256 _mintAmount) external payable {
        require(isPublicSaleLive, "the public sale is not open yet");
        require(_mintAmount > 0, "amount to mint should be a positive number");

        address minter = _msgSender();
        require(tx.origin == minter, "contracts are not allowed to mint");

        require(
            balanceOf(msg.sender) + _mintAmount <= WT_MINT_MAX_AMOUNT,
            "cannot mint the amount requested"
        );

        uint256 newMintsPerAddress = _mintsPerAddress[msg.sender] + _mintAmount;
        require(
            newMintsPerAddress <= WT_MINT_MAX_AMOUNT,
            "cannot mint the amount requested"
        );

        require(WT_MINT_PRICE * _mintAmount <= msg.value, "insufficient funds");

        uint256 supply = _owners.length;
        require(
            supply + _mintAmount <= WT_TOTAL_SUPPLY,
            "the collection is sold out"
        );

        for (uint256 i = 0; i < _mintAmount; i++) {
            _mintsPerAddress[msg.sender]++;
            _mint(msg.sender, supply++);
        }
    }

    // Minting reserved tokens to the treasury wallet
    function mintReserved(uint256 _mintAmount) external onlyOwner {
        require(_mintAmount > 0, "amount to mint should be a positive number");
        require(
            reservedMinted + _mintAmount <= WT_MAX_RESERVED_COUNT,
            "cannot mint the amount requested"
        );

        uint256 supply = _owners.length;
        require(
            supply + _mintAmount <= WT_TOTAL_SUPPLY,
            "the collection is sold out"
        );

        for (uint256 i = 0; i < _mintAmount; i++) {
            _mint(WALLET_TREASURY, supply++);
            reservedMinted++;
        }
    }

    // ------------------------------------------
    // ASSETS ACCESS MANAGEMENT

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

        if (revealed == false) {
            return notRevealedUri;
        }
        uint256 assetIndex = tokenId + 1;

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

    function currentSupply() external view onlyOwner returns (uint256) {
        return _owners.length;
    }

    // -----------------------------------------------------------
    // LAUNCH COTROLS
    function reveal(bool _state) external onlyOwner {
        revealed = _state;
    }

    function setPresaleStatus(bool _state) external onlyOwner {
        isPresaleLive = _state;
    }

    function setPublicSaleStatus(bool _state) external onlyOwner {
        isPublicSaleLive = _state;
    }

    // -----------------------------------------------------------
    // SETTERS

    function setMerkleRootHash(bytes32 _rootHash) public onlyOwner {
        merkleRootHash = _rootHash;
    }

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

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    // -----------------------------------------------------------
    // ADMINISTRATION
    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No assets to withdraw");

        uint256 withdrawal1 = balance.mul(60).div(100);
        uint256 withdrawal2 = balance.mul(5).div(100);
        uint256 withdrawal3 = balance.mul(10).div(100);
        uint256 withdrawal4 = balance.mul(5).div(100);
        uint256 withdrawal5 = balance.mul(3).div(100);

        _withdraw(WALLET1, withdrawal1);
        _withdraw(WALLET2, withdrawal2);
        _withdraw(WALLET3, withdrawal3);
        _withdraw(WALLET4, withdrawal4);
        _withdraw(WALLET5, withdrawal5);

        // Send the rest to the team vault
        _withdraw(WALLET_TREASURY, address(this).balance);
    }

    function contractBalance() external view onlyOwner returns (uint256) {
        return address(this).balance;
    }

    function _withdraw(address _address, uint256 _amount) private {
        payable(_address).transfer(_amount);
    }

    function reservedCount() external view onlyOwner returns (uint256) {
        return reservedMinted;
    }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

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 13: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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 13: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

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 13: ERC721B.sol
// SPDX-License-Identifier: UNLICENSED
/********************
 * @author: Squeebo *
 ********************/

pragma solidity ^0.8.0;

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

abstract contract ERC721B is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    address[] internal _owners;

    // 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"
        );

        uint256 count = 0;
        uint256 length = _owners.length;
        for (uint256 i = 0; i < length; ++i) {
            if (owner == _owners[i]) {
                ++count;
            }
        }

        delete length;
        return count;
    }

    /**
     * @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 {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721B.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 tokenId < _owners.length && _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 = ERC721B.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);
        _owners.push(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 = ERC721B.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

        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(
            ERC721B.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);
        _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(ERC721B.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 13: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

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 6 of 13: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

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 7 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

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 8 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

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 9 of 13: MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

File 10 of 13: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

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() {
        _transferOwnership(_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 {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 11 of 13: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 12 of 13: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

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":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"},{"internalType":"bytes32","name":"_initMerkleRootHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WT_MAX_RESERVED_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WT_MINT_MAX_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WT_MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WT_TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mintsPerAddress","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintPublicSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintReserved","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"bytes32","name":"_rootHash","type":"bytes32"}],"name":"setMerkleRootHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006008556000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff0219169083151502179055506000600960026101000a81548160ff0219169083151502179055503480156200006757600080fd5b50604051620055183803806200551883398181016040528101906200008d9190620005a9565b6040518060400160405280600b81526020017f576f6d656e2054726962650000000000000000000000000000000000000000008152506040518060400160405280600281526020017f575400000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200011192919062000470565b5080600190805190602001906200012a92919062000470565b5050506200014d620001416200018960201b60201c565b6200019160201b60201c565b6200015e836200025760201b60201c565b6200016f826200030260201b60201c565b6200018081620003ad60201b60201c565b50505062000848565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002676200018960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200028d6200044660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002dd9062000658565b60405180910390fd5b8060069080519060200190620002fe92919062000470565b5050565b620003126200018960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003386200044660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000391576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003889062000658565b60405180910390fd5b8060079080519060200190620003a992919062000470565b5050565b620003bd6200018960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003e36200044660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200043c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004339062000658565b60405180910390fd5b80600a8190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200047e906200072a565b90600052602060002090601f016020900481019282620004a25760008555620004ee565b82601f10620004bd57805160ff1916838001178555620004ee565b82800160010185558215620004ee579182015b82811115620004ed578251825591602001919060010190620004d0565b5b509050620004fd919062000501565b5090565b5b808211156200051c57600081600090555060010162000502565b5090565b6000620005376200053184620006a3565b6200067a565b9050828152602081018484840111156200055057600080fd5b6200055d848285620006f4565b509392505050565b60008151905062000576816200082e565b92915050565b600082601f8301126200058e57600080fd5b8151620005a084826020860162000520565b91505092915050565b600080600060608486031215620005bf57600080fd5b600084015167ffffffffffffffff811115620005da57600080fd5b620005e8868287016200057c565b935050602084015167ffffffffffffffff8111156200060657600080fd5b62000614868287016200057c565b9250506040620006278682870162000565565b9150509250925092565b600062000640602083620006d9565b91506200064d8262000805565b602082019050919050565b60006020820190508181036000830152620006738162000631565b9050919050565b60006200068662000699565b905062000694828262000760565b919050565b6000604051905090565b600067ffffffffffffffff821115620006c157620006c0620007c5565b5b620006cc82620007f4565b9050602081019050919050565b600082825260208201905092915050565b6000819050919050565b60005b8381101562000714578082015181840152602081019050620006f7565b8381111562000724576000848401525b50505050565b600060028204905060018216806200074357607f821691505b602082108114156200075a576200075962000796565b5b50919050565b6200076b82620007f4565b810181811067ffffffffffffffff821117156200078d576200078c620007c5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200083981620006ea565b81146200084557600080fd5b50565b614cc080620008586000396000f3fe6080604052600436106102305760003560e01c80638895283f1161012e578063b88d4fde116100ab578063e985e9c51161006f578063e985e9c5146107fb578063ed0925ec14610838578063f187e0c914610863578063f2c4ce1e1461088e578063f2fde38b146108b757610230565b8063b88d4fde14610702578063c38f76171461072b578063c668286214610756578063c87b56dd14610781578063d136cbd7146107be57610230565b80639a5d140b116100f25780639a5d140b146106335780639ba411b11461065c5780639f3c563614610685578063a22cb465146106b0578063b423fe67146106d957610230565b80638895283f146105605780638b7afe2e146105895780638da5cb5b146105b4578063940cd05b146105df57806395d89b411461060857610230565b806342842e0e116101bc57806370a082311161018057806370a082311461048b578063715018a6146104c8578063771282f6146104df5780637770bcfa1461050a578063862330711461053557610230565b806342842e0e146103b557806351830227146103de57806355f804b3146104095780635a5e5d58146104325780636352211e1461044e57610230565b80630c0a6b5e116102035780630c0a6b5e1461030357806318160ddd1461031f57806323b872dd1461034a5780632c9ad1fb146103735780633ccfd60b1461039e57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613723565b6108e0565b6040516102699190613d8e565b60405180910390f35b34801561027e57600080fd5b506102876109c2565b6040516102949190613da9565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906137b6565b610a54565b6040516102d19190613d27565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613695565b610ad9565b005b61031d600480360381019061031891906137df565b610bf1565b005b34801561032b57600080fd5b50610334611011565b60405161034191906140eb565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c919061358f565b61101e565b005b34801561037f57600080fd5b5061038861107e565b6040516103959190613d8e565b60405180910390f35b3480156103aa57600080fd5b506103b3611091565b005b3480156103c157600080fd5b506103dc60048036038101906103d7919061358f565b6112e8565b005b3480156103ea57600080fd5b506103f3611308565b6040516104009190613d8e565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613775565b61131b565b005b61044c600480360381019061044791906137b6565b6113b1565b005b34801561045a57600080fd5b50610475600480360381019061047091906137b6565b611716565b6040516104829190613d27565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad919061352a565b6117f9565b6040516104bf91906140eb565b60405180910390f35b3480156104d457600080fd5b506104dd611945565b005b3480156104eb57600080fd5b506104f46119cd565b60405161050191906140eb565b60405180910390f35b34801561051657600080fd5b5061051f611a56565b60405161052c91906140eb565b60405180910390f35b34801561054157600080fd5b5061054a611a5c565b6040516105579190613d8e565b60405180910390f35b34801561056c57600080fd5b50610587600480360381019061058291906136d1565b611a6f565b005b34801561059557600080fd5b5061059e611b08565b6040516105ab91906140eb565b60405180910390f35b3480156105c057600080fd5b506105c9611b8c565b6040516105d69190613d27565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906136d1565b611bb6565b005b34801561061457600080fd5b5061061d611c4f565b60405161062a9190613da9565b60405180910390f35b34801561063f57600080fd5b5061065a600480360381019061065591906137b6565b611ce1565b005b34801561066857600080fd5b50610683600480360381019061067e91906136fa565b611eb1565b005b34801561069157600080fd5b5061069a611f37565b6040516106a791906140eb565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190613659565b611f42565b005b3480156106e557600080fd5b5061070060048036038101906106fb91906136d1565b6120c3565b005b34801561070e57600080fd5b50610729600480360381019061072491906135de565b61215c565b005b34801561073757600080fd5b506107406121be565b60405161074d91906140eb565b60405180910390f35b34801561076257600080fd5b5061076b612244565b6040516107789190613da9565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a391906137b6565b61227d565b6040516107b59190613da9565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e0919061352a565b61249f565b6040516107f29190614106565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190613553565b6124bf565b60405161082f9190613d8e565b60405180910390f35b34801561084457600080fd5b5061084d612553565b60405161085a91906140eb565b60405180910390f35b34801561086f57600080fd5b50610878612558565b60405161088591906140eb565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b09190613775565b61255e565b005b3480156108c357600080fd5b506108de60048036038101906108d9919061352a565b6125f4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ab57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109bb57506109ba826126ec565b5b9050919050565b6060600080546109d1906143cd565b80601f01602080910402602001604051908101604052809291908181526020018280546109fd906143cd565b8015610a4a5780601f10610a1f57610100808354040283529160200191610a4a565b820191906000526020600020905b815481529060010190602001808311610a2d57829003601f168201915b5050505050905090565b6000610a5f82612756565b610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9590613f8b565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae482611716565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c9061402b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b74612804565b73ffffffffffffffffffffffffffffffffffffffff161480610ba35750610ba281610b9d612804565b6124bf565b5b610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd990613eab565b60405180910390fd5b610bec838361280c565b505050565b600960009054906101000a900460ff16610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790613f2b565b60405180910390fd5b60008311610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a9061400b565b60405180910390fd5b6000610c8d612804565b90508073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf49061404b565b60405180910390fd5b600384610d09336117f9565b610d1391906141eb565b1115610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90613f0b565b60405180910390fd5b600084600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16610db191906141eb565b90506003811115610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90613f0b565b60405180910390fd5b3485668e1bc9bf040000610e0b9190614272565b1115610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e439061406b565b60405180910390fd5b600033604051602001610e5f9190613caf565b604051602081830303815290604052805190602001209050610ec5858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a54836128c5565b610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90613e2b565b60405180910390fd5b600060028054905090506127108782610f1d91906141eb565b1115610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613f4b565b60405180910390fd5b60005b8781101561100757600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900460ff1680929190610fc590614479565b91906101000a81548160ff021916908360ff16021790555050610ff4338380610fed90614430565b94506128dc565b8080610fff90614430565b915050610f61565b5050505050505050565b6000600280549050905090565b61102f611029612804565b82612a64565b61106e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110659061408b565b60405180910390fd5b611079838383612b42565b505050565b600960009054906101000a900460ff1681565b611099612804565b73ffffffffffffffffffffffffffffffffffffffff166110b7611b8c565b73ffffffffffffffffffffffffffffffffffffffff161461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490613fab565b60405180910390fd5b600047905060008111611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c906140cb565b60405180910390fd5b600061117e6064611170603c85612d2190919063ffffffff16565b612d3790919063ffffffff16565b905060006111a9606461119b600586612d2190919063ffffffff16565b612d3790919063ffffffff16565b905060006111d460646111c6600a87612d2190919063ffffffff16565b612d3790919063ffffffff16565b905060006111ff60646111f1600588612d2190919063ffffffff16565b612d3790919063ffffffff16565b9050600061122a606461121c600389612d2190919063ffffffff16565b612d3790919063ffffffff16565b905061124a738c70a6fd46d4e11a62d3f9e81e2d33a82fa89f8286612d4d565b61126873cbc0acac84a25add42e908b6932f0678c82fbd4585612d4d565b611286737e503efcbfb64e8f451e88f8ab438e20a88062c384612d4d565b6112a473695bca9ee4f78cc1049565f9fac504fc27f02fa283612d4d565b6112c273de3bc9e504ca4f0e81fabc1f37160e9ff4bf90d282612d4d565b6112e0739a5fe78ee5b4f5a8bafff54854822435c68f306c47612d4d565b505050505050565b6113038383836040518060200160405280600081525061215c565b505050565b600960029054906101000a900460ff1681565b611323612804565b73ffffffffffffffffffffffffffffffffffffffff16611341611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e90613fab565b60405180910390fd5b80600690805190602001906113ad9291906132ef565b5050565b600960019054906101000a900460ff16611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f7906140ab565b60405180910390fd5b60008111611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a9061400b565b60405180910390fd5b600061144d612804565b90508073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b49061404b565b60405180910390fd5b6003826114c9336117f9565b6114d391906141eb565b1115611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90613f0b565b60405180910390fd5b600082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1661157191906141eb565b905060038111156115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ae90613f0b565b60405180910390fd5b3483668e1bc9bf0400006115cb9190614272565b111561160c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116039061406b565b60405180910390fd5b60006002805490509050612710848261162591906141eb565b1115611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613f4b565b60405180910390fd5b60005b8481101561170f57600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900460ff16809291906116cd90614479565b91906101000a81548160ff021916908360ff160217905550506116fc3383806116f590614430565b94506128dc565b808061170790614430565b915050611669565b5050505050565b60008060028381548110611753577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790613eeb565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613ecb565b60405180910390fd5b600080600280549050905060005b8181101561193657600281815481106118ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611925578261192290614430565b92505b8061192f90614430565b9050611878565b50600090508192505050919050565b61194d612804565b73ffffffffffffffffffffffffffffffffffffffff1661196b611b8c565b73ffffffffffffffffffffffffffffffffffffffff16146119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890613fab565b60405180910390fd5b6119cb6000612d98565b565b60006119d7612804565b73ffffffffffffffffffffffffffffffffffffffff166119f5611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290613fab565b60405180910390fd5b600280549050905090565b61011e81565b600960019054906101000a900460ff1681565b611a77612804565b73ffffffffffffffffffffffffffffffffffffffff16611a95611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290613fab565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b6000611b12612804565b73ffffffffffffffffffffffffffffffffffffffff16611b30611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d90613fab565b60405180910390fd5b47905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bbe612804565b73ffffffffffffffffffffffffffffffffffffffff16611bdc611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2990613fab565b60405180910390fd5b80600960026101000a81548160ff02191690831515021790555050565b606060018054611c5e906143cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8a906143cd565b8015611cd75780601f10611cac57610100808354040283529160200191611cd7565b820191906000526020600020905b815481529060010190602001808311611cba57829003601f168201915b5050505050905090565b611ce9612804565b73ffffffffffffffffffffffffffffffffffffffff16611d07611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5490613fab565b60405180910390fd5b60008111611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d979061400b565b60405180910390fd5b61011e81600854611db191906141eb565b1115611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613f0b565b60405180910390fd5b600060028054905090506127108282611e0b91906141eb565b1115611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4390613f4b565b60405180910390fd5b60005b82811015611eac57611e81739a5fe78ee5b4f5a8bafff54854822435c68f306c8380611e7a90614430565b94506128dc565b60086000815480929190611e9490614430565b91905055508080611ea490614430565b915050611e4f565b505050565b611eb9612804565b73ffffffffffffffffffffffffffffffffffffffff16611ed7611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490613fab565b60405180910390fd5b80600a8190555050565b668e1bc9bf04000081565b611f4a612804565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90613e6b565b60405180910390fd5b8060046000611fc5612804565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612072612804565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120b79190613d8e565b60405180910390a35050565b6120cb612804565b73ffffffffffffffffffffffffffffffffffffffff166120e9611b8c565b73ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690613fab565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b61216d612167612804565b83612a64565b6121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a39061408b565b60405180910390fd5b6121b884848484612e5e565b50505050565b60006121c8612804565b73ffffffffffffffffffffffffffffffffffffffff166121e6611b8c565b73ffffffffffffffffffffffffffffffffffffffff161461223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390613fab565b60405180910390fd5b600854905090565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b606061228882612756565b6122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90613feb565b60405180910390fd5b60001515600960029054906101000a900460ff161515141561237557600780546122f0906143cd565b80601f016020809104026020016040519081016040528092919081815260200182805461231c906143cd565b80156123695780601f1061233e57610100808354040283529160200191612369565b820191906000526020600020905b81548152906001019060200180831161234c57829003601f168201915b5050505050905061249a565b600060018361238491906141eb565b9050600060068054612395906143cd565b80601f01602080910402602001604051908101604052809291908181526020018280546123c1906143cd565b801561240e5780601f106123e35761010080835404028352916020019161240e565b820191906000526020600020905b8154815290600101906020018083116123f157829003601f168201915b5050505050905060008151116124335760405180602001604052806000815250612495565b8061243d83612eba565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060405160200161248593929190613cf6565b6040516020818303038152906040525b925050505b919050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600381565b61271081565b612566612804565b73ffffffffffffffffffffffffffffffffffffffff16612584611b8c565b73ffffffffffffffffffffffffffffffffffffffff16146125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d190613fab565b60405180910390fd5b80600790805190602001906125f09291906132ef565b5050565b6125fc612804565b73ffffffffffffffffffffffffffffffffffffffff1661261a611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790613fab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d790613deb565b60405180910390fd5b6126e981612d98565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600280549050821080156127fd5750600073ffffffffffffffffffffffffffffffffffffffff16600283815481106127b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661287f83611716565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000826128d28584613067565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561294c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294390613f6b565b60405180910390fd5b61295581612756565b15612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c90613e0b565b60405180910390fd5b6129a160008383613140565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612a6f82612756565b612aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa590613e8b565b60405180910390fd5b6000612ab983611716565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b2857508373ffffffffffffffffffffffffffffffffffffffff16612b1084610a54565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b395750612b3881856124bf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b6282611716565b73ffffffffffffffffffffffffffffffffffffffff1614612bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baf90613fcb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f90613e4b565b60405180910390fd5b612c33838383613140565b612c3e60008261280c565b8160028281548110612c79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612d2f9190614272565b905092915050565b60008183612d459190614241565b905092915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612d93573d6000803e3d6000fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e69848484612b42565b612e7584848484613145565b612eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eab90613dcb565b60405180910390fd5b50505050565b60606000821415612f02576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613062565b600082905060005b60008214612f34578080612f1d90614430565b915050600a82612f2d9190614241565b9150612f0a565b60008167ffffffffffffffff811115612f76577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612fa85781602001600182028036833780820191505090505b5090505b6000851461305b57600182612fc191906142cc565b9150600a85612fd091906144d1565b6030612fdc91906141eb565b60f81b818381518110613018577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130549190614241565b9450612fac565b8093505050505b919050565b60008082905060005b84518110156131355760008582815181106130b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116130f55782816040516020016130d8929190613cca565b604051602081830303815290604052805190602001209250613121565b8083604051602001613108929190613cca565b6040516020818303038152906040528051906020012092505b50808061312d90614430565b915050613070565b508091505092915050565b505050565b60006131668473ffffffffffffffffffffffffffffffffffffffff166132dc565b156132cf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261318f612804565b8786866040518563ffffffff1660e01b81526004016131b19493929190613d42565b602060405180830381600087803b1580156131cb57600080fd5b505af19250505080156131fc57506040513d601f19601f820116820180604052508101906131f9919061374c565b60015b61327f573d806000811461322c576040519150601f19603f3d011682016040523d82523d6000602084013e613231565b606091505b50600081511415613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e90613dcb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132d4565b600190505b949350505050565b600080823b905060008111915050919050565b8280546132fb906143cd565b90600052602060002090601f01602090048101928261331d5760008555613364565b82601f1061333657805160ff1916838001178555613364565b82800160010185558215613364579182015b82811115613363578251825591602001919060010190613348565b5b5090506133719190613375565b5090565b5b8082111561338e576000816000905550600101613376565b5090565b60006133a56133a084614146565b614121565b9050828152602081018484840111156133bd57600080fd5b6133c884828561438b565b509392505050565b60006133e36133de84614177565b614121565b9050828152602081018484840111156133fb57600080fd5b61340684828561438b565b509392505050565b60008135905061341d81614c17565b92915050565b60008083601f84011261343557600080fd5b8235905067ffffffffffffffff81111561344e57600080fd5b60208301915083602082028301111561346657600080fd5b9250929050565b60008135905061347c81614c2e565b92915050565b60008135905061349181614c45565b92915050565b6000813590506134a681614c5c565b92915050565b6000815190506134bb81614c5c565b92915050565b600082601f8301126134d257600080fd5b81356134e2848260208601613392565b91505092915050565b600082601f8301126134fc57600080fd5b813561350c8482602086016133d0565b91505092915050565b60008135905061352481614c73565b92915050565b60006020828403121561353c57600080fd5b600061354a8482850161340e565b91505092915050565b6000806040838503121561356657600080fd5b60006135748582860161340e565b92505060206135858582860161340e565b9150509250929050565b6000806000606084860312156135a457600080fd5b60006135b28682870161340e565b93505060206135c38682870161340e565b92505060406135d486828701613515565b9150509250925092565b600080600080608085870312156135f457600080fd5b60006136028782880161340e565b94505060206136138782880161340e565b935050604061362487828801613515565b925050606085013567ffffffffffffffff81111561364157600080fd5b61364d878288016134c1565b91505092959194509250565b6000806040838503121561366c57600080fd5b600061367a8582860161340e565b925050602061368b8582860161346d565b9150509250929050565b600080604083850312156136a857600080fd5b60006136b68582860161340e565b92505060206136c785828601613515565b9150509250929050565b6000602082840312156136e357600080fd5b60006136f18482850161346d565b91505092915050565b60006020828403121561370c57600080fd5b600061371a84828501613482565b91505092915050565b60006020828403121561373557600080fd5b600061374384828501613497565b91505092915050565b60006020828403121561375e57600080fd5b600061376c848285016134ac565b91505092915050565b60006020828403121561378757600080fd5b600082013567ffffffffffffffff8111156137a157600080fd5b6137ad848285016134eb565b91505092915050565b6000602082840312156137c857600080fd5b60006137d684828501613515565b91505092915050565b6000806000604084860312156137f457600080fd5b600061380286828701613515565b935050602084013567ffffffffffffffff81111561381f57600080fd5b61382b86828701613423565b92509250509250925092565b61384081614300565b82525050565b61385761385282614300565b6144a3565b82525050565b61386681614312565b82525050565b61387d6138788261431e565b6144b5565b82525050565b600061388e826141a8565b61389881856141be565b93506138a881856020860161439a565b6138b1816145be565b840191505092915050565b60006138c7826141b3565b6138d181856141cf565b93506138e181856020860161439a565b6138ea816145be565b840191505092915050565b6000613900826141b3565b61390a81856141e0565b935061391a81856020860161439a565b80840191505092915050565b60006139336032836141cf565b915061393e826145dc565b604082019050919050565b60006139566026836141cf565b91506139618261462b565b604082019050919050565b6000613979601c836141cf565b91506139848261467a565b602082019050919050565b600061399c6026836141cf565b91506139a7826146a3565b604082019050919050565b60006139bf6024836141cf565b91506139ca826146f2565b604082019050919050565b60006139e26019836141cf565b91506139ed82614741565b602082019050919050565b6000613a05602c836141cf565b9150613a108261476a565b604082019050919050565b6000613a286038836141cf565b9150613a33826147b9565b604082019050919050565b6000613a4b602a836141cf565b9150613a5682614808565b604082019050919050565b6000613a6e6029836141cf565b9150613a7982614857565b604082019050919050565b6000613a916020836141cf565b9150613a9c826148a6565b602082019050919050565b6000613ab4601b836141cf565b9150613abf826148cf565b602082019050919050565b6000613ad7601a836141cf565b9150613ae2826148f8565b602082019050919050565b6000613afa6020836141cf565b9150613b0582614921565b602082019050919050565b6000613b1d602c836141cf565b9150613b288261494a565b604082019050919050565b6000613b406020836141cf565b9150613b4b82614999565b602082019050919050565b6000613b636029836141cf565b9150613b6e826149c2565b604082019050919050565b6000613b86602f836141cf565b9150613b9182614a11565b604082019050919050565b6000613ba9602a836141cf565b9150613bb482614a60565b604082019050919050565b6000613bcc6021836141cf565b9150613bd782614aaf565b604082019050919050565b6000613bef6021836141cf565b9150613bfa82614afe565b604082019050919050565b6000613c126012836141cf565b9150613c1d82614b4d565b602082019050919050565b6000613c356031836141cf565b9150613c4082614b76565b604082019050919050565b6000613c58601f836141cf565b9150613c6382614bc5565b602082019050919050565b6000613c7b6015836141cf565b9150613c8682614bee565b602082019050919050565b613c9a81614374565b82525050565b613ca98161437e565b82525050565b6000613cbb8284613846565b60148201915081905092915050565b6000613cd6828561386c565b602082019150613ce6828461386c565b6020820191508190509392505050565b6000613d0282866138f5565b9150613d0e82856138f5565b9150613d1a82846138f5565b9150819050949350505050565b6000602082019050613d3c6000830184613837565b92915050565b6000608082019050613d576000830187613837565b613d646020830186613837565b613d716040830185613c91565b8181036060830152613d838184613883565b905095945050505050565b6000602082019050613da3600083018461385d565b92915050565b60006020820190508181036000830152613dc381846138bc565b905092915050565b60006020820190508181036000830152613de481613926565b9050919050565b60006020820190508181036000830152613e0481613949565b9050919050565b60006020820190508181036000830152613e248161396c565b9050919050565b60006020820190508181036000830152613e448161398f565b9050919050565b60006020820190508181036000830152613e64816139b2565b9050919050565b60006020820190508181036000830152613e84816139d5565b9050919050565b60006020820190508181036000830152613ea4816139f8565b9050919050565b60006020820190508181036000830152613ec481613a1b565b9050919050565b60006020820190508181036000830152613ee481613a3e565b9050919050565b60006020820190508181036000830152613f0481613a61565b9050919050565b60006020820190508181036000830152613f2481613a84565b9050919050565b60006020820190508181036000830152613f4481613aa7565b9050919050565b60006020820190508181036000830152613f6481613aca565b9050919050565b60006020820190508181036000830152613f8481613aed565b9050919050565b60006020820190508181036000830152613fa481613b10565b9050919050565b60006020820190508181036000830152613fc481613b33565b9050919050565b60006020820190508181036000830152613fe481613b56565b9050919050565b6000602082019050818103600083015261400481613b79565b9050919050565b6000602082019050818103600083015261402481613b9c565b9050919050565b6000602082019050818103600083015261404481613bbf565b9050919050565b6000602082019050818103600083015261406481613be2565b9050919050565b6000602082019050818103600083015261408481613c05565b9050919050565b600060208201905081810360008301526140a481613c28565b9050919050565b600060208201905081810360008301526140c481613c4b565b9050919050565b600060208201905081810360008301526140e481613c6e565b9050919050565b60006020820190506141006000830184613c91565b92915050565b600060208201905061411b6000830184613ca0565b92915050565b600061412b61413c565b905061413782826143ff565b919050565b6000604051905090565b600067ffffffffffffffff8211156141615761416061458f565b5b61416a826145be565b9050602081019050919050565b600067ffffffffffffffff8211156141925761419161458f565b5b61419b826145be565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006141f682614374565b915061420183614374565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561423657614235614502565b5b828201905092915050565b600061424c82614374565b915061425783614374565b92508261426757614266614531565b5b828204905092915050565b600061427d82614374565b915061428883614374565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142c1576142c0614502565b5b828202905092915050565b60006142d782614374565b91506142e283614374565b9250828210156142f5576142f4614502565b5b828203905092915050565b600061430b82614354565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143b857808201518184015260208101905061439d565b838111156143c7576000848401525b50505050565b600060028204905060018216806143e557607f821691505b602082108114156143f9576143f8614560565b5b50919050565b614408826145be565b810181811067ffffffffffffffff821117156144275761442661458f565b5b80604052505050565b600061443b82614374565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561446e5761446d614502565b5b600182019050919050565b60006144848261437e565b915060ff82141561449857614497614502565b5b600182019050919050565b60006144ae826144bf565b9050919050565b6000819050919050565b60006144ca826145cf565b9050919050565b60006144dc82614374565b91506144e783614374565b9250826144f7576144f6614531565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f796f75722077616c6c6574206973206e6f7420696e207468652070726573616c60008201527f65206c6973740000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e742074686520616d6f756e7420726571756573746564600082015250565b7f7468652070726573616c65206973206e6f74206f70656e207965740000000000600082015250565b7f74686520636f6c6c656374696f6e20697320736f6c64206f7574000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f616d6f756e7420746f206d696e742073686f756c64206265206120706f73697460008201527f697665206e756d62657200000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f636f6e74726163747320617265206e6f7420616c6c6f77656420746f206d696e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f746865207075626c69632073616c65206973206e6f74206f70656e2079657400600082015250565b7f4e6f2061737365747320746f2077697468647261770000000000000000000000600082015250565b614c2081614300565b8114614c2b57600080fd5b50565b614c3781614312565b8114614c4257600080fd5b50565b614c4e8161431e565b8114614c5957600080fd5b50565b614c6581614328565b8114614c7057600080fd5b50565b614c7c81614374565b8114614c8757600080fd5b5056fea26469706673582212208cf063a44fd7939174a5bcd004823bac49f9cbe526a593542eb865a5711d292e64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0ca182cd1d7517760bdcc0532aa1a976bb7725e9203638d5b6b1310413f61eddd0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5965326478354478766737793277715a7138517a416b693354514c51354b6b477141445751636b38563877752f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6145476a6a5a65705367315043446971507459764a6e707a4e5a4461353476415a356b394e72355053546e632f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102305760003560e01c80638895283f1161012e578063b88d4fde116100ab578063e985e9c51161006f578063e985e9c5146107fb578063ed0925ec14610838578063f187e0c914610863578063f2c4ce1e1461088e578063f2fde38b146108b757610230565b8063b88d4fde14610702578063c38f76171461072b578063c668286214610756578063c87b56dd14610781578063d136cbd7146107be57610230565b80639a5d140b116100f25780639a5d140b146106335780639ba411b11461065c5780639f3c563614610685578063a22cb465146106b0578063b423fe67146106d957610230565b80638895283f146105605780638b7afe2e146105895780638da5cb5b146105b4578063940cd05b146105df57806395d89b411461060857610230565b806342842e0e116101bc57806370a082311161018057806370a082311461048b578063715018a6146104c8578063771282f6146104df5780637770bcfa1461050a578063862330711461053557610230565b806342842e0e146103b557806351830227146103de57806355f804b3146104095780635a5e5d58146104325780636352211e1461044e57610230565b80630c0a6b5e116102035780630c0a6b5e1461030357806318160ddd1461031f57806323b872dd1461034a5780632c9ad1fb146103735780633ccfd60b1461039e57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613723565b6108e0565b6040516102699190613d8e565b60405180910390f35b34801561027e57600080fd5b506102876109c2565b6040516102949190613da9565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906137b6565b610a54565b6040516102d19190613d27565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613695565b610ad9565b005b61031d600480360381019061031891906137df565b610bf1565b005b34801561032b57600080fd5b50610334611011565b60405161034191906140eb565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c919061358f565b61101e565b005b34801561037f57600080fd5b5061038861107e565b6040516103959190613d8e565b60405180910390f35b3480156103aa57600080fd5b506103b3611091565b005b3480156103c157600080fd5b506103dc60048036038101906103d7919061358f565b6112e8565b005b3480156103ea57600080fd5b506103f3611308565b6040516104009190613d8e565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613775565b61131b565b005b61044c600480360381019061044791906137b6565b6113b1565b005b34801561045a57600080fd5b50610475600480360381019061047091906137b6565b611716565b6040516104829190613d27565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad919061352a565b6117f9565b6040516104bf91906140eb565b60405180910390f35b3480156104d457600080fd5b506104dd611945565b005b3480156104eb57600080fd5b506104f46119cd565b60405161050191906140eb565b60405180910390f35b34801561051657600080fd5b5061051f611a56565b60405161052c91906140eb565b60405180910390f35b34801561054157600080fd5b5061054a611a5c565b6040516105579190613d8e565b60405180910390f35b34801561056c57600080fd5b50610587600480360381019061058291906136d1565b611a6f565b005b34801561059557600080fd5b5061059e611b08565b6040516105ab91906140eb565b60405180910390f35b3480156105c057600080fd5b506105c9611b8c565b6040516105d69190613d27565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906136d1565b611bb6565b005b34801561061457600080fd5b5061061d611c4f565b60405161062a9190613da9565b60405180910390f35b34801561063f57600080fd5b5061065a600480360381019061065591906137b6565b611ce1565b005b34801561066857600080fd5b50610683600480360381019061067e91906136fa565b611eb1565b005b34801561069157600080fd5b5061069a611f37565b6040516106a791906140eb565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190613659565b611f42565b005b3480156106e557600080fd5b5061070060048036038101906106fb91906136d1565b6120c3565b005b34801561070e57600080fd5b50610729600480360381019061072491906135de565b61215c565b005b34801561073757600080fd5b506107406121be565b60405161074d91906140eb565b60405180910390f35b34801561076257600080fd5b5061076b612244565b6040516107789190613da9565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a391906137b6565b61227d565b6040516107b59190613da9565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e0919061352a565b61249f565b6040516107f29190614106565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190613553565b6124bf565b60405161082f9190613d8e565b60405180910390f35b34801561084457600080fd5b5061084d612553565b60405161085a91906140eb565b60405180910390f35b34801561086f57600080fd5b50610878612558565b60405161088591906140eb565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b09190613775565b61255e565b005b3480156108c357600080fd5b506108de60048036038101906108d9919061352a565b6125f4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ab57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109bb57506109ba826126ec565b5b9050919050565b6060600080546109d1906143cd565b80601f01602080910402602001604051908101604052809291908181526020018280546109fd906143cd565b8015610a4a5780601f10610a1f57610100808354040283529160200191610a4a565b820191906000526020600020905b815481529060010190602001808311610a2d57829003601f168201915b5050505050905090565b6000610a5f82612756565b610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9590613f8b565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae482611716565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c9061402b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b74612804565b73ffffffffffffffffffffffffffffffffffffffff161480610ba35750610ba281610b9d612804565b6124bf565b5b610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd990613eab565b60405180910390fd5b610bec838361280c565b505050565b600960009054906101000a900460ff16610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790613f2b565b60405180910390fd5b60008311610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a9061400b565b60405180910390fd5b6000610c8d612804565b90508073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf49061404b565b60405180910390fd5b600384610d09336117f9565b610d1391906141eb565b1115610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90613f0b565b60405180910390fd5b600084600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16610db191906141eb565b90506003811115610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90613f0b565b60405180910390fd5b3485668e1bc9bf040000610e0b9190614272565b1115610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e439061406b565b60405180910390fd5b600033604051602001610e5f9190613caf565b604051602081830303815290604052805190602001209050610ec5858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a54836128c5565b610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90613e2b565b60405180910390fd5b600060028054905090506127108782610f1d91906141eb565b1115610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613f4b565b60405180910390fd5b60005b8781101561100757600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900460ff1680929190610fc590614479565b91906101000a81548160ff021916908360ff16021790555050610ff4338380610fed90614430565b94506128dc565b8080610fff90614430565b915050610f61565b5050505050505050565b6000600280549050905090565b61102f611029612804565b82612a64565b61106e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110659061408b565b60405180910390fd5b611079838383612b42565b505050565b600960009054906101000a900460ff1681565b611099612804565b73ffffffffffffffffffffffffffffffffffffffff166110b7611b8c565b73ffffffffffffffffffffffffffffffffffffffff161461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490613fab565b60405180910390fd5b600047905060008111611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c906140cb565b60405180910390fd5b600061117e6064611170603c85612d2190919063ffffffff16565b612d3790919063ffffffff16565b905060006111a9606461119b600586612d2190919063ffffffff16565b612d3790919063ffffffff16565b905060006111d460646111c6600a87612d2190919063ffffffff16565b612d3790919063ffffffff16565b905060006111ff60646111f1600588612d2190919063ffffffff16565b612d3790919063ffffffff16565b9050600061122a606461121c600389612d2190919063ffffffff16565b612d3790919063ffffffff16565b905061124a738c70a6fd46d4e11a62d3f9e81e2d33a82fa89f8286612d4d565b61126873cbc0acac84a25add42e908b6932f0678c82fbd4585612d4d565b611286737e503efcbfb64e8f451e88f8ab438e20a88062c384612d4d565b6112a473695bca9ee4f78cc1049565f9fac504fc27f02fa283612d4d565b6112c273de3bc9e504ca4f0e81fabc1f37160e9ff4bf90d282612d4d565b6112e0739a5fe78ee5b4f5a8bafff54854822435c68f306c47612d4d565b505050505050565b6113038383836040518060200160405280600081525061215c565b505050565b600960029054906101000a900460ff1681565b611323612804565b73ffffffffffffffffffffffffffffffffffffffff16611341611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e90613fab565b60405180910390fd5b80600690805190602001906113ad9291906132ef565b5050565b600960019054906101000a900460ff16611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f7906140ab565b60405180910390fd5b60008111611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a9061400b565b60405180910390fd5b600061144d612804565b90508073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b49061404b565b60405180910390fd5b6003826114c9336117f9565b6114d391906141eb565b1115611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90613f0b565b60405180910390fd5b600082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1661157191906141eb565b905060038111156115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ae90613f0b565b60405180910390fd5b3483668e1bc9bf0400006115cb9190614272565b111561160c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116039061406b565b60405180910390fd5b60006002805490509050612710848261162591906141eb565b1115611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613f4b565b60405180910390fd5b60005b8481101561170f57600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900460ff16809291906116cd90614479565b91906101000a81548160ff021916908360ff160217905550506116fc3383806116f590614430565b94506128dc565b808061170790614430565b915050611669565b5050505050565b60008060028381548110611753577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790613eeb565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613ecb565b60405180910390fd5b600080600280549050905060005b8181101561193657600281815481106118ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611925578261192290614430565b92505b8061192f90614430565b9050611878565b50600090508192505050919050565b61194d612804565b73ffffffffffffffffffffffffffffffffffffffff1661196b611b8c565b73ffffffffffffffffffffffffffffffffffffffff16146119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890613fab565b60405180910390fd5b6119cb6000612d98565b565b60006119d7612804565b73ffffffffffffffffffffffffffffffffffffffff166119f5611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290613fab565b60405180910390fd5b600280549050905090565b61011e81565b600960019054906101000a900460ff1681565b611a77612804565b73ffffffffffffffffffffffffffffffffffffffff16611a95611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290613fab565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b6000611b12612804565b73ffffffffffffffffffffffffffffffffffffffff16611b30611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d90613fab565b60405180910390fd5b47905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bbe612804565b73ffffffffffffffffffffffffffffffffffffffff16611bdc611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2990613fab565b60405180910390fd5b80600960026101000a81548160ff02191690831515021790555050565b606060018054611c5e906143cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8a906143cd565b8015611cd75780601f10611cac57610100808354040283529160200191611cd7565b820191906000526020600020905b815481529060010190602001808311611cba57829003601f168201915b5050505050905090565b611ce9612804565b73ffffffffffffffffffffffffffffffffffffffff16611d07611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5490613fab565b60405180910390fd5b60008111611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d979061400b565b60405180910390fd5b61011e81600854611db191906141eb565b1115611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613f0b565b60405180910390fd5b600060028054905090506127108282611e0b91906141eb565b1115611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4390613f4b565b60405180910390fd5b60005b82811015611eac57611e81739a5fe78ee5b4f5a8bafff54854822435c68f306c8380611e7a90614430565b94506128dc565b60086000815480929190611e9490614430565b91905055508080611ea490614430565b915050611e4f565b505050565b611eb9612804565b73ffffffffffffffffffffffffffffffffffffffff16611ed7611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490613fab565b60405180910390fd5b80600a8190555050565b668e1bc9bf04000081565b611f4a612804565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90613e6b565b60405180910390fd5b8060046000611fc5612804565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612072612804565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120b79190613d8e565b60405180910390a35050565b6120cb612804565b73ffffffffffffffffffffffffffffffffffffffff166120e9611b8c565b73ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690613fab565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b61216d612167612804565b83612a64565b6121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a39061408b565b60405180910390fd5b6121b884848484612e5e565b50505050565b60006121c8612804565b73ffffffffffffffffffffffffffffffffffffffff166121e6611b8c565b73ffffffffffffffffffffffffffffffffffffffff161461223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390613fab565b60405180910390fd5b600854905090565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b606061228882612756565b6122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90613feb565b60405180910390fd5b60001515600960029054906101000a900460ff161515141561237557600780546122f0906143cd565b80601f016020809104026020016040519081016040528092919081815260200182805461231c906143cd565b80156123695780601f1061233e57610100808354040283529160200191612369565b820191906000526020600020905b81548152906001019060200180831161234c57829003601f168201915b5050505050905061249a565b600060018361238491906141eb565b9050600060068054612395906143cd565b80601f01602080910402602001604051908101604052809291908181526020018280546123c1906143cd565b801561240e5780601f106123e35761010080835404028352916020019161240e565b820191906000526020600020905b8154815290600101906020018083116123f157829003601f168201915b5050505050905060008151116124335760405180602001604052806000815250612495565b8061243d83612eba565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060405160200161248593929190613cf6565b6040516020818303038152906040525b925050505b919050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600381565b61271081565b612566612804565b73ffffffffffffffffffffffffffffffffffffffff16612584611b8c565b73ffffffffffffffffffffffffffffffffffffffff16146125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d190613fab565b60405180910390fd5b80600790805190602001906125f09291906132ef565b5050565b6125fc612804565b73ffffffffffffffffffffffffffffffffffffffff1661261a611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790613fab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d790613deb565b60405180910390fd5b6126e981612d98565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600280549050821080156127fd5750600073ffffffffffffffffffffffffffffffffffffffff16600283815481106127b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661287f83611716565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000826128d28584613067565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561294c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294390613f6b565b60405180910390fd5b61295581612756565b15612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c90613e0b565b60405180910390fd5b6129a160008383613140565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612a6f82612756565b612aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa590613e8b565b60405180910390fd5b6000612ab983611716565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b2857508373ffffffffffffffffffffffffffffffffffffffff16612b1084610a54565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b395750612b3881856124bf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b6282611716565b73ffffffffffffffffffffffffffffffffffffffff1614612bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baf90613fcb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f90613e4b565b60405180910390fd5b612c33838383613140565b612c3e60008261280c565b8160028281548110612c79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612d2f9190614272565b905092915050565b60008183612d459190614241565b905092915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612d93573d6000803e3d6000fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e69848484612b42565b612e7584848484613145565b612eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eab90613dcb565b60405180910390fd5b50505050565b60606000821415612f02576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613062565b600082905060005b60008214612f34578080612f1d90614430565b915050600a82612f2d9190614241565b9150612f0a565b60008167ffffffffffffffff811115612f76577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612fa85781602001600182028036833780820191505090505b5090505b6000851461305b57600182612fc191906142cc565b9150600a85612fd091906144d1565b6030612fdc91906141eb565b60f81b818381518110613018577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130549190614241565b9450612fac565b8093505050505b919050565b60008082905060005b84518110156131355760008582815181106130b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116130f55782816040516020016130d8929190613cca565b604051602081830303815290604052805190602001209250613121565b8083604051602001613108929190613cca565b6040516020818303038152906040528051906020012092505b50808061312d90614430565b915050613070565b508091505092915050565b505050565b60006131668473ffffffffffffffffffffffffffffffffffffffff166132dc565b156132cf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261318f612804565b8786866040518563ffffffff1660e01b81526004016131b19493929190613d42565b602060405180830381600087803b1580156131cb57600080fd5b505af19250505080156131fc57506040513d601f19601f820116820180604052508101906131f9919061374c565b60015b61327f573d806000811461322c576040519150601f19603f3d011682016040523d82523d6000602084013e613231565b606091505b50600081511415613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e90613dcb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132d4565b600190505b949350505050565b600080823b905060008111915050919050565b8280546132fb906143cd565b90600052602060002090601f01602090048101928261331d5760008555613364565b82601f1061333657805160ff1916838001178555613364565b82800160010185558215613364579182015b82811115613363578251825591602001919060010190613348565b5b5090506133719190613375565b5090565b5b8082111561338e576000816000905550600101613376565b5090565b60006133a56133a084614146565b614121565b9050828152602081018484840111156133bd57600080fd5b6133c884828561438b565b509392505050565b60006133e36133de84614177565b614121565b9050828152602081018484840111156133fb57600080fd5b61340684828561438b565b509392505050565b60008135905061341d81614c17565b92915050565b60008083601f84011261343557600080fd5b8235905067ffffffffffffffff81111561344e57600080fd5b60208301915083602082028301111561346657600080fd5b9250929050565b60008135905061347c81614c2e565b92915050565b60008135905061349181614c45565b92915050565b6000813590506134a681614c5c565b92915050565b6000815190506134bb81614c5c565b92915050565b600082601f8301126134d257600080fd5b81356134e2848260208601613392565b91505092915050565b600082601f8301126134fc57600080fd5b813561350c8482602086016133d0565b91505092915050565b60008135905061352481614c73565b92915050565b60006020828403121561353c57600080fd5b600061354a8482850161340e565b91505092915050565b6000806040838503121561356657600080fd5b60006135748582860161340e565b92505060206135858582860161340e565b9150509250929050565b6000806000606084860312156135a457600080fd5b60006135b28682870161340e565b93505060206135c38682870161340e565b92505060406135d486828701613515565b9150509250925092565b600080600080608085870312156135f457600080fd5b60006136028782880161340e565b94505060206136138782880161340e565b935050604061362487828801613515565b925050606085013567ffffffffffffffff81111561364157600080fd5b61364d878288016134c1565b91505092959194509250565b6000806040838503121561366c57600080fd5b600061367a8582860161340e565b925050602061368b8582860161346d565b9150509250929050565b600080604083850312156136a857600080fd5b60006136b68582860161340e565b92505060206136c785828601613515565b9150509250929050565b6000602082840312156136e357600080fd5b60006136f18482850161346d565b91505092915050565b60006020828403121561370c57600080fd5b600061371a84828501613482565b91505092915050565b60006020828403121561373557600080fd5b600061374384828501613497565b91505092915050565b60006020828403121561375e57600080fd5b600061376c848285016134ac565b91505092915050565b60006020828403121561378757600080fd5b600082013567ffffffffffffffff8111156137a157600080fd5b6137ad848285016134eb565b91505092915050565b6000602082840312156137c857600080fd5b60006137d684828501613515565b91505092915050565b6000806000604084860312156137f457600080fd5b600061380286828701613515565b935050602084013567ffffffffffffffff81111561381f57600080fd5b61382b86828701613423565b92509250509250925092565b61384081614300565b82525050565b61385761385282614300565b6144a3565b82525050565b61386681614312565b82525050565b61387d6138788261431e565b6144b5565b82525050565b600061388e826141a8565b61389881856141be565b93506138a881856020860161439a565b6138b1816145be565b840191505092915050565b60006138c7826141b3565b6138d181856141cf565b93506138e181856020860161439a565b6138ea816145be565b840191505092915050565b6000613900826141b3565b61390a81856141e0565b935061391a81856020860161439a565b80840191505092915050565b60006139336032836141cf565b915061393e826145dc565b604082019050919050565b60006139566026836141cf565b91506139618261462b565b604082019050919050565b6000613979601c836141cf565b91506139848261467a565b602082019050919050565b600061399c6026836141cf565b91506139a7826146a3565b604082019050919050565b60006139bf6024836141cf565b91506139ca826146f2565b604082019050919050565b60006139e26019836141cf565b91506139ed82614741565b602082019050919050565b6000613a05602c836141cf565b9150613a108261476a565b604082019050919050565b6000613a286038836141cf565b9150613a33826147b9565b604082019050919050565b6000613a4b602a836141cf565b9150613a5682614808565b604082019050919050565b6000613a6e6029836141cf565b9150613a7982614857565b604082019050919050565b6000613a916020836141cf565b9150613a9c826148a6565b602082019050919050565b6000613ab4601b836141cf565b9150613abf826148cf565b602082019050919050565b6000613ad7601a836141cf565b9150613ae2826148f8565b602082019050919050565b6000613afa6020836141cf565b9150613b0582614921565b602082019050919050565b6000613b1d602c836141cf565b9150613b288261494a565b604082019050919050565b6000613b406020836141cf565b9150613b4b82614999565b602082019050919050565b6000613b636029836141cf565b9150613b6e826149c2565b604082019050919050565b6000613b86602f836141cf565b9150613b9182614a11565b604082019050919050565b6000613ba9602a836141cf565b9150613bb482614a60565b604082019050919050565b6000613bcc6021836141cf565b9150613bd782614aaf565b604082019050919050565b6000613bef6021836141cf565b9150613bfa82614afe565b604082019050919050565b6000613c126012836141cf565b9150613c1d82614b4d565b602082019050919050565b6000613c356031836141cf565b9150613c4082614b76565b604082019050919050565b6000613c58601f836141cf565b9150613c6382614bc5565b602082019050919050565b6000613c7b6015836141cf565b9150613c8682614bee565b602082019050919050565b613c9a81614374565b82525050565b613ca98161437e565b82525050565b6000613cbb8284613846565b60148201915081905092915050565b6000613cd6828561386c565b602082019150613ce6828461386c565b6020820191508190509392505050565b6000613d0282866138f5565b9150613d0e82856138f5565b9150613d1a82846138f5565b9150819050949350505050565b6000602082019050613d3c6000830184613837565b92915050565b6000608082019050613d576000830187613837565b613d646020830186613837565b613d716040830185613c91565b8181036060830152613d838184613883565b905095945050505050565b6000602082019050613da3600083018461385d565b92915050565b60006020820190508181036000830152613dc381846138bc565b905092915050565b60006020820190508181036000830152613de481613926565b9050919050565b60006020820190508181036000830152613e0481613949565b9050919050565b60006020820190508181036000830152613e248161396c565b9050919050565b60006020820190508181036000830152613e448161398f565b9050919050565b60006020820190508181036000830152613e64816139b2565b9050919050565b60006020820190508181036000830152613e84816139d5565b9050919050565b60006020820190508181036000830152613ea4816139f8565b9050919050565b60006020820190508181036000830152613ec481613a1b565b9050919050565b60006020820190508181036000830152613ee481613a3e565b9050919050565b60006020820190508181036000830152613f0481613a61565b9050919050565b60006020820190508181036000830152613f2481613a84565b9050919050565b60006020820190508181036000830152613f4481613aa7565b9050919050565b60006020820190508181036000830152613f6481613aca565b9050919050565b60006020820190508181036000830152613f8481613aed565b9050919050565b60006020820190508181036000830152613fa481613b10565b9050919050565b60006020820190508181036000830152613fc481613b33565b9050919050565b60006020820190508181036000830152613fe481613b56565b9050919050565b6000602082019050818103600083015261400481613b79565b9050919050565b6000602082019050818103600083015261402481613b9c565b9050919050565b6000602082019050818103600083015261404481613bbf565b9050919050565b6000602082019050818103600083015261406481613be2565b9050919050565b6000602082019050818103600083015261408481613c05565b9050919050565b600060208201905081810360008301526140a481613c28565b9050919050565b600060208201905081810360008301526140c481613c4b565b9050919050565b600060208201905081810360008301526140e481613c6e565b9050919050565b60006020820190506141006000830184613c91565b92915050565b600060208201905061411b6000830184613ca0565b92915050565b600061412b61413c565b905061413782826143ff565b919050565b6000604051905090565b600067ffffffffffffffff8211156141615761416061458f565b5b61416a826145be565b9050602081019050919050565b600067ffffffffffffffff8211156141925761419161458f565b5b61419b826145be565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006141f682614374565b915061420183614374565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561423657614235614502565b5b828201905092915050565b600061424c82614374565b915061425783614374565b92508261426757614266614531565b5b828204905092915050565b600061427d82614374565b915061428883614374565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142c1576142c0614502565b5b828202905092915050565b60006142d782614374565b91506142e283614374565b9250828210156142f5576142f4614502565b5b828203905092915050565b600061430b82614354565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143b857808201518184015260208101905061439d565b838111156143c7576000848401525b50505050565b600060028204905060018216806143e557607f821691505b602082108114156143f9576143f8614560565b5b50919050565b614408826145be565b810181811067ffffffffffffffff821117156144275761442661458f565b5b80604052505050565b600061443b82614374565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561446e5761446d614502565b5b600182019050919050565b60006144848261437e565b915060ff82141561449857614497614502565b5b600182019050919050565b60006144ae826144bf565b9050919050565b6000819050919050565b60006144ca826145cf565b9050919050565b60006144dc82614374565b91506144e783614374565b9250826144f7576144f6614531565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f796f75722077616c6c6574206973206e6f7420696e207468652070726573616c60008201527f65206c6973740000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e742074686520616d6f756e7420726571756573746564600082015250565b7f7468652070726573616c65206973206e6f74206f70656e207965740000000000600082015250565b7f74686520636f6c6c656374696f6e20697320736f6c64206f7574000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f616d6f756e7420746f206d696e742073686f756c64206265206120706f73697460008201527f697665206e756d62657200000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f636f6e74726163747320617265206e6f7420616c6c6f77656420746f206d696e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f746865207075626c69632073616c65206973206e6f74206f70656e2079657400600082015250565b7f4e6f2061737365747320746f2077697468647261770000000000000000000000600082015250565b614c2081614300565b8114614c2b57600080fd5b50565b614c3781614312565b8114614c4257600080fd5b50565b614c4e8161431e565b8114614c5957600080fd5b50565b614c6581614328565b8114614c7057600080fd5b50565b614c7c81614374565b8114614c8757600080fd5b5056fea26469706673582212208cf063a44fd7939174a5bcd004823bac49f9cbe526a593542eb865a5711d292e64736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0ca182cd1d7517760bdcc0532aa1a976bb7725e9203638d5b6b1310413f61eddd0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5965326478354478766737793277715a7138517a416b693354514c51354b6b477141445751636b38563877752f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6145476a6a5a65705367315043446971507459764a6e707a4e5a4461353476415a356b394e72355053546e632f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmYe2dx5Dxvg7y2wqZq8QzAki3TQLQ5KkGqADWQck8V8wu/
Arg [1] : _initNotRevealedUri (string): ipfs://QmaEGjjZepSg1PCDiqPtYvJnpzNZDa54vAZ5k9Nr5PSTnc/hidden.json
Arg [2] : _initMerkleRootHash (bytes32): 0xca182cd1d7517760bdcc0532aa1a976bb7725e9203638d5b6b1310413f61eddd

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : ca182cd1d7517760bdcc0532aa1a976bb7725e9203638d5b6b1310413f61eddd
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [4] : 697066733a2f2f516d5965326478354478766737793277715a7138517a416b69
Arg [5] : 3354514c51354b6b477141445751636b38563877752f00000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [7] : 697066733a2f2f516d6145476a6a5a65705367315043446971507459764a6e70
Arg [8] : 7a4e5a4461353476415a356b394e72355053546e632f68696464656e2e6a736f
Arg [9] : 6e00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

190:8119:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1100:344:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2435:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3219:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2756:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2263:1351:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2099:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4233:364:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;715:33:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7219:737;;;;;;;;;;;;;:::i;:::-;;4663:179:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;877:28:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6892:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3620:1086;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2060:313:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1503:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1683:101:9;;;;;;;;;;;;;:::i;:::-;;6197:105:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;567:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;790:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6485:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7962:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1051:85:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6397:82:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2597:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4766:594:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6780:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;511:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3581:318:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6588:103:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4908:354:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8202:105:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;366:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5449:742;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;949:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3965:206:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;459:46:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;661:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7000:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1933:232:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1100:344:3;1242:4;1296:25;1281:40;;;:11;:40;;;;:104;;;;1352:33;1337:48;;;:11;:48;;;;1281:104;:156;;;;1401:36;1425:11;1401:23;:36::i;:::-;1281:156;1262:175;;1100:344;;;:::o;2435:98::-;2489:13;2521:5;2514:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2435:98;:::o;3219:295::-;3335:7;3379:16;3387:7;3379;:16::i;:::-;3358:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;3483:15;:24;3499:7;3483:24;;;;;;;;;;;;;;;;;;;;;3476:31;;3219:295;;;:::o;2756:402::-;2836:13;2852:24;2868:7;2852:15;:24::i;:::-;2836:40;;2900:5;2894:11;;:2;:11;;;;2886:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;2991:5;2975:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3000:37;3017:5;3024:12;:10;:12::i;:::-;3000:16;:37::i;:::-;2975:62;2954:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3130:21;3139:2;3143:7;3130:8;:21::i;:::-;2756:402;;;:::o;2263:1351:12:-;2393:13;;;;;;;;;;;2385:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;2470:1;2456:11;:15;2448:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;2529:14;2546:12;:10;:12::i;:::-;2529:29;;2589:6;2576:19;;:9;:19;;;2568:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;504:1;2689:11;2665:21;2675:10;2665:9;:21::i;:::-;:35;;;;:::i;:::-;:57;;2644:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;2791:26;2851:11;2820:16;:28;2837:10;2820:28;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;;:::i;:::-;2791:71;;504:1;2893:18;:40;;2872:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;3041:9;3026:11;551:10;3010:27;;;;:::i;:::-;:40;;3002:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3084:16;3130:10;3113:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;3103:39;;;;;;3084:58;;3173;3192:12;;3173:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3206:14;;3222:8;3173:18;:58::i;:::-;3152:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;3306:14;3323:7;:14;;;;3306:31;;703:5;3377:11;3368:6;:20;;;;:::i;:::-;:39;;3347:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;3475:9;3470:138;3494:11;3490:1;:15;3470:138;;;3526:16;:28;3543:10;3526:28;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;3570:27;3576:10;3588:8;;;;;:::i;:::-;;;3570:5;:27::i;:::-;3507:3;;;;;:::i;:::-;;;;3470:138;;;;2263:1351;;;;;;;:::o;2099:93::-;2145:7;2171;:14;;;;2164:21;;2099:93;:::o;4233:364:3:-;4435:41;4454:12;:10;:12::i;:::-;4468:7;4435:18;:41::i;:::-;4414:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;4562:28;4572:4;4578:2;4582:7;4562:9;:28::i;:::-;4233:364;;;:::o;715:33:12:-;;;;;;;;;;;;;:::o;7219:737::-;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7268:15:12::1;7286:21;7268:39;;7335:1;7325:7;:11;7317:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;7373:19;7395:24;7415:3;7395:15;7407:2;7395:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;7373:46;;7429:19;7451:23;7470:3;7451:14;7463:1;7451:7;:11;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;7429:45;;7484:19;7506:24;7526:3;7506:15;7518:2;7506:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;7484:46;;7540:19;7562:23;7581:3;7562:14;7574:1;7562:7;:11;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;7540:45;;7595:19;7617:23;7636:3;7617:14;7629:1;7617:7;:11;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;7595:45;;7651:31;1123:42;7670:11;7651:9;:31::i;:::-;7692;1214:42;7711:11;7692:9;:31::i;:::-;7733;1305:42;7752:11;7733:9;:31::i;:::-;7774;1396:42;7793:11;7774:9;:31::i;:::-;7815;1487:42;7834:11;7815:9;:31::i;:::-;7900:49;1586:42;7927:21;7900:9;:49::i;:::-;1333:1:9;;;;;;7219:737:12:o:0;4663:179:3:-;4796:39;4813:4;4819:2;4823:7;4796:39;;;;;;;;;;;;:16;:39::i;:::-;4663:179;;;:::o;877:28:12:-;;;;;;;;;;;;;:::o;6892:102::-;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6976:11:12::1;6966:7;:21;;;;;;;;;;;;:::i;:::-;;6892:102:::0;:::o;3620:1086::-;3700:16;;;;;;;;;;;3692:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;3784:1;3770:11;:15;3762:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;3843:14;3860:12;:10;:12::i;:::-;3843:29;;3903:6;3890:19;;:9;:19;;;3882:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;504:1;4003:11;3979:21;3989:10;3979:9;:21::i;:::-;:35;;;;:::i;:::-;:57;;3958:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;4105:26;4165:11;4134:16;:28;4151:10;4134:28;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;;:::i;:::-;4105:71;;504:1;4207:18;:40;;4186:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;4355:9;4340:11;551:10;4324:27;;;;:::i;:::-;:40;;4316:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4398:14;4415:7;:14;;;;4398:31;;703:5;4469:11;4460:6;:20;;;;:::i;:::-;:39;;4439:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;4567:9;4562:138;4586:11;4582:1;:15;4562:138;;;4618:16;:28;4635:10;4618:28;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;4662:27;4668:10;4680:8;;;;;:::i;:::-;;;4662:5;:27::i;:::-;4599:3;;;;;:::i;:::-;;;;4562:138;;;;3620:1086;;;;:::o;2060:313:3:-;2172:7;2195:13;2211:7;2219;2211:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2195:32;;2275:1;2258:19;;:5;:19;;;;2237:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2361:5;2354:12;;;2060:313;;;:::o;1503:500::-;1615:7;1676:1;1659:19;;:5;:19;;;;1638:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;1757:13;1784:14;1801:7;:14;;;;1784:31;;1830:9;1825:126;1849:6;1845:1;:10;1825:126;;;1889:7;1897:1;1889:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1880:19;;:5;:19;;;1876:65;;;1919:7;;;;:::i;:::-;;;1876:65;1857:3;;;;:::i;:::-;;;1825:126;;;;1961:13;;;1991:5;1984:12;;;;1503:500;;;:::o;1683:101:9:-;1274:12;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1747:30:::1;1774:1;1747:18;:30::i;:::-;1683:101::o:0;6197:105:12:-;6255:7;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6281:7:12::1;:14;;;;6274:21;;6197:105:::0;:::o;567:51::-;615:3;567:51;:::o;790:36::-;;;;;;;;;;;;;:::o;6485:97::-;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6569:6:12::1;6553:13;;:22;;;;;;;;;;;;;;;;;;6485:97:::0;:::o;7962:114::-;8022:7;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8048:21:12::1;8041:28;;7962:114:::0;:::o;1051:85:9:-;1097:7;1123:6;;;;;;;;;;;1116:13;;1051:85;:::o;6397:82:12:-;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6466:6:12::1;6455:8;;:17;;;;;;;;;;;;;;;;;;6397:82:::0;:::o;2597:102:3:-;2653:13;2685:7;2678:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2597:102;:::o;4766:594:12:-;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4860:1:12::1;4846:11;:15;4838:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;615:3;4956:11;4939:14;;:28;;;;:::i;:::-;:53;;4918:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;5061:14;5078:7;:14;;;;5061:31;;703:5;5132:11;5123:6;:20;;;;:::i;:::-;:39;;5102:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;5230:9;5225:129;5249:11;5245:1;:15;5225:129;;;5281:32;1586:42;5304:8;;;;;:::i;:::-;;;5281:5;:32::i;:::-;5327:14;;:16;;;;;;;;;:::i;:::-;;;;;;5262:3;;;;;:::i;:::-;;;;5225:129;;;;1333:1:9;4766:594:12::0;:::o;6780:106::-;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6870:9:12::1;6853:14;:26;;;;6780:106:::0;:::o;511:50::-;551:10;511:50;:::o;3581:318:3:-;3723:12;:10;:12::i;:::-;3711:24;;:8;:24;;;;3703:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;3821:8;3776:18;:32;3795:12;:10;:12::i;:::-;3776:32;;;;;;;;;;;;;;;:42;3809:8;3776:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;3873:8;3844:48;;3859:12;:10;:12::i;:::-;3844:48;;;3883:8;3844:48;;;;;;:::i;:::-;;;;;;;;3581:318;;:::o;6588:103:12:-;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6678:6:12::1;6659:16;;:25;;;;;;;;;;;;;;;;;;6588:103:::0;:::o;4908:354:3:-;5090:41;5109:12;:10;:12::i;:::-;5123:7;5090:18;:41::i;:::-;5069:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;5216:39;5230:4;5236:2;5240:7;5249:5;5216:13;:39::i;:::-;4908:354;;;;:::o;8202:105:12:-;8260:7;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8286:14:12::1;;8279:21;;8202:105:::0;:::o;366:46::-;;;;;;;;;;;;;;;;;;;:::o;5449:742::-;5564:13;5614:16;5622:7;5614;:16::i;:::-;5593:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5730:5;5718:17;;:8;;;;;;;;;;;:17;;;5714:69;;;5758:14;5751:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5714:69;5792:18;5823:1;5813:7;:11;;;;:::i;:::-;5792:32;;5835:28;5866:7;5835:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5933:1;5908:14;5902:28;:32;:282;;;;;;;;;;;;;;;;;6023:14;6063:21;:10;:19;:21::i;:::-;6110:13;;;;;;;;;;;;;;;;;5981:164;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5902:282;5883:301;;;;5449:742;;;;:::o;949:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;3965:206:3:-;4102:4;4129:18;:25;4148:5;4129:25;;;;;;;;;;;;;;;:35;4155:8;4129:35;;;;;;;;;;;;;;;;;;;;;;;;;4122:42;;3965:206;;;;:::o;459:46:12:-;504:1;459:46;:::o;661:47::-;703:5;661:47;:::o;7000:124::-;1274:12:9;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7102:15:12::1;7085:14;:32;;;;;;;;;;;;:::i;:::-;;7000:124:::0;:::o;1933:232:9:-;1274:12;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2054:1:::1;2034:22;;:8;:22;;;;2013:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2130:28;2149:8;2130:18;:28::i;:::-;1933:232:::0;:::o;829:155:2:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;6768:153:3:-;6833:4;6866:7;:14;;;;6856:7;:24;:58;;;;;6912:1;6884:30;;:7;6892;6884:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;6856:58;6849:65;;6768:153;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;10659:172:3:-;10760:2;10733:15;:24;10749:7;10733:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;10816:7;10812:2;10777:47;;10786:24;10802:7;10786:15;:24::i;:::-;10777:47;;;;;;;;;;;;10659:172;;:::o;847:184:8:-;968:4;1020;991:25;1004:5;1011:4;991:12;:25::i;:::-;:33;984:40;;847:184;;;;;:::o;8810:338:3:-;8903:1;8889:16;;:2;:16;;;;8881:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;8961:16;8969:7;8961;:16::i;:::-;8960:17;8952:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9021:45;9050:1;9054:2;9058:7;9021:20;:45::i;:::-;9076:7;9089:2;9076:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9133:7;9129:2;9108:33;;9125:1;9108:33;;;;;;;;;;;;8810:338;;:::o;7079:439::-;7204:4;7245:16;7253:7;7245;:16::i;:::-;7224:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;7341:13;7357:24;7373:7;7357:15;:24::i;:::-;7341:40;;7410:5;7399:16;;:7;:16;;;:63;;;;7455:7;7431:31;;:20;7443:7;7431:11;:20::i;:::-;:31;;;7399:63;:111;;;;7478:32;7495:5;7502:7;7478:16;:32::i;:::-;7399:111;7391:120;;;7079:439;;;;:::o;10012:536::-;10180:4;10152:32;;:24;10168:7;10152:15;:24::i;:::-;:32;;;10131:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;10283:1;10269:16;;:2;:16;;;;10261:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10337:39;10358:4;10364:2;10368:7;10337:20;:39::i;:::-;10438:29;10455:1;10459:7;10438:8;:29::i;:::-;10496:2;10477:7;10485;10477:16;;;;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10533:7;10529:2;10514:27;;10523:4;10514:27;;;;;;;;;;;;10012:536;;;:::o;3451:96:10:-;3509:7;3539:1;3535;:5;;;;:::i;:::-;3528:12;;3451:96;;;;:::o;3836:::-;3894:7;3924:1;3920;:5;;;;:::i;:::-;3913:12;;3836:96;;;;:::o;8082:114:12:-;8162:8;8154:26;;:35;8181:7;8154:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8082:114;;:::o;2319:187:9:-;2392:16;2411:6;;;;;;;;;;;2392:25;;2436:8;2427:6;;:17;;;;;;;;;;;;;;;;;;2490:8;2459:40;;2480:8;2459:40;;;;;;;;;;;;2319:187;;:::o;6124:341:3:-;6275:28;6285:4;6291:2;6295:7;6275:9;:28::i;:::-;6334:48;6357:4;6363:2;6367:7;6376:5;6334:22;:48::i;:::-;6313:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;6124:341;;;;:::o;328:703:11:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;1383:688:8:-;1466:7;1485:20;1508:4;1485:27;;1527:9;1522:514;1546:5;:12;1542:1;:16;1522:514;;;1579:20;1602:5;1608:1;1602:8;;;;;;;;;;;;;;;;;;;;;;1579:31;;1644:12;1628;:28;1624:402;;1796:12;1810;1779:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1769:55;;;;;;1754:70;;1624:402;;;1983:12;1997;1966:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1956:55;;;;;;1941:70;;1624:402;1522:514;1560:3;;;;;:::i;:::-;;;;1522:514;;;;2052:12;2045:19;;;1383:688;;;;:::o;12890:122:3:-;;;;:::o;11384:950::-;11534:4;11554:15;:2;:13;;;:15::i;:::-;11550:778;;;11621:2;11605:36;;;11663:12;:10;:12::i;:::-;11697:4;11723:7;11752:5;11605:170;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11585:691;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11971:1;11954:6;:13;:18;11950:312;;;11996:106;;;;;;;;;;:::i;:::-;;;;;;;;11950:312;12214:6;12208:13;12199:6;12195:2;12191:15;12184:38;11585:691;11847:41;;;11837:51;;;:6;:51;;;;11830:58;;;;;11550:778;12313:4;12306:11;;11384:950;;;;;;;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:13:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;1285:5;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:139::-;1427:5;1465:6;1452:20;1443:29;;1481:33;1508:5;1481:33;:::i;:::-;1433:87;;;;:::o;1526:137::-;1571:5;1609:6;1596:20;1587:29;;1625:32;1651:5;1625:32;:::i;:::-;1577:86;;;;:::o;1669:141::-;1725:5;1756:6;1750:13;1741:22;;1772:32;1798:5;1772:32;:::i;:::-;1731:79;;;;:::o;1829:271::-;1884:5;1933:3;1926:4;1918:6;1914:17;1910:27;1900:2;;1951:1;1948;1941:12;1900:2;1991:6;1978:20;2016:78;2090:3;2082:6;2075:4;2067:6;2063:17;2016:78;:::i;:::-;2007:87;;1890:210;;;;;:::o;2120:273::-;2176:5;2225:3;2218:4;2210:6;2206:17;2202:27;2192:2;;2243:1;2240;2233:12;2192:2;2283:6;2270:20;2308:79;2383:3;2375:6;2368:4;2360:6;2356:17;2308:79;:::i;:::-;2299:88;;2182:211;;;;;:::o;2399:139::-;2445:5;2483:6;2470:20;2461:29;;2499:33;2526:5;2499:33;:::i;:::-;2451:87;;;;:::o;2544:262::-;2603:6;2652:2;2640:9;2631:7;2627:23;2623:32;2620:2;;;2668:1;2665;2658:12;2620:2;2711:1;2736:53;2781:7;2772:6;2761:9;2757:22;2736:53;:::i;:::-;2726:63;;2682:117;2610:196;;;;:::o;2812:407::-;2880:6;2888;2937:2;2925:9;2916:7;2912:23;2908:32;2905:2;;;2953:1;2950;2943:12;2905:2;2996:1;3021:53;3066:7;3057:6;3046:9;3042:22;3021:53;:::i;:::-;3011:63;;2967:117;3123:2;3149:53;3194:7;3185:6;3174:9;3170:22;3149:53;:::i;:::-;3139:63;;3094:118;2895:324;;;;;:::o;3225:552::-;3302:6;3310;3318;3367:2;3355:9;3346:7;3342:23;3338:32;3335:2;;;3383:1;3380;3373:12;3335:2;3426:1;3451:53;3496:7;3487:6;3476:9;3472:22;3451:53;:::i;:::-;3441:63;;3397:117;3553:2;3579:53;3624:7;3615:6;3604:9;3600:22;3579:53;:::i;:::-;3569:63;;3524:118;3681:2;3707:53;3752:7;3743:6;3732:9;3728:22;3707:53;:::i;:::-;3697:63;;3652:118;3325:452;;;;;:::o;3783:809::-;3878:6;3886;3894;3902;3951:3;3939:9;3930:7;3926:23;3922:33;3919:2;;;3968:1;3965;3958:12;3919:2;4011:1;4036:53;4081:7;4072:6;4061:9;4057:22;4036:53;:::i;:::-;4026:63;;3982:117;4138:2;4164:53;4209:7;4200:6;4189:9;4185:22;4164:53;:::i;:::-;4154:63;;4109:118;4266:2;4292:53;4337:7;4328:6;4317:9;4313:22;4292:53;:::i;:::-;4282:63;;4237:118;4422:2;4411:9;4407:18;4394:32;4453:18;4445:6;4442:30;4439:2;;;4485:1;4482;4475:12;4439:2;4513:62;4567:7;4558:6;4547:9;4543:22;4513:62;:::i;:::-;4503:72;;4365:220;3909:683;;;;;;;:::o;4598:401::-;4663:6;4671;4720:2;4708:9;4699:7;4695:23;4691:32;4688:2;;;4736:1;4733;4726:12;4688:2;4779:1;4804:53;4849:7;4840:6;4829:9;4825:22;4804:53;:::i;:::-;4794:63;;4750:117;4906:2;4932:50;4974:7;4965:6;4954:9;4950:22;4932:50;:::i;:::-;4922:60;;4877:115;4678:321;;;;;:::o;5005:407::-;5073:6;5081;5130:2;5118:9;5109:7;5105:23;5101:32;5098:2;;;5146:1;5143;5136:12;5098:2;5189:1;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5160:117;5316:2;5342:53;5387:7;5378:6;5367:9;5363:22;5342:53;:::i;:::-;5332:63;;5287:118;5088:324;;;;;:::o;5418:256::-;5474:6;5523:2;5511:9;5502:7;5498:23;5494:32;5491:2;;;5539:1;5536;5529:12;5491:2;5582:1;5607:50;5649:7;5640:6;5629:9;5625:22;5607:50;:::i;:::-;5597:60;;5553:114;5481:193;;;;:::o;5680:262::-;5739:6;5788:2;5776:9;5767:7;5763:23;5759:32;5756:2;;;5804:1;5801;5794:12;5756:2;5847:1;5872:53;5917:7;5908:6;5897:9;5893:22;5872:53;:::i;:::-;5862:63;;5818:117;5746:196;;;;:::o;5948:260::-;6006:6;6055:2;6043:9;6034:7;6030:23;6026:32;6023:2;;;6071:1;6068;6061:12;6023:2;6114:1;6139:52;6183:7;6174:6;6163:9;6159:22;6139:52;:::i;:::-;6129:62;;6085:116;6013:195;;;;:::o;6214:282::-;6283:6;6332:2;6320:9;6311:7;6307:23;6303:32;6300:2;;;6348:1;6345;6338:12;6300:2;6391:1;6416:63;6471:7;6462:6;6451:9;6447:22;6416:63;:::i;:::-;6406:73;;6362:127;6290:206;;;;:::o;6502:375::-;6571:6;6620:2;6608:9;6599:7;6595:23;6591:32;6588:2;;;6636:1;6633;6626:12;6588:2;6707:1;6696:9;6692:17;6679:31;6737:18;6729:6;6726:30;6723:2;;;6769:1;6766;6759:12;6723:2;6797:63;6852:7;6843:6;6832:9;6828:22;6797:63;:::i;:::-;6787:73;;6650:220;6578:299;;;;:::o;6883:262::-;6942:6;6991:2;6979:9;6970:7;6966:23;6962:32;6959:2;;;7007:1;7004;6997:12;6959:2;7050:1;7075:53;7120:7;7111:6;7100:9;7096:22;7075:53;:::i;:::-;7065:63;;7021:117;6949:196;;;;:::o;7151:570::-;7246:6;7254;7262;7311:2;7299:9;7290:7;7286:23;7282:32;7279:2;;;7327:1;7324;7317:12;7279:2;7370:1;7395:53;7440:7;7431:6;7420:9;7416:22;7395:53;:::i;:::-;7385:63;;7341:117;7525:2;7514:9;7510:18;7497:32;7556:18;7548:6;7545:30;7542:2;;;7588:1;7585;7578:12;7542:2;7624:80;7696:7;7687:6;7676:9;7672:22;7624:80;:::i;:::-;7606:98;;;;7468:246;7269:452;;;;;:::o;7727:118::-;7814:24;7832:5;7814:24;:::i;:::-;7809:3;7802:37;7792:53;;:::o;7851:157::-;7956:45;7976:24;7994:5;7976:24;:::i;:::-;7956:45;:::i;:::-;7951:3;7944:58;7934:74;;:::o;8014:109::-;8095:21;8110:5;8095:21;:::i;:::-;8090:3;8083:34;8073:50;;:::o;8129:157::-;8234:45;8254:24;8272:5;8254:24;:::i;:::-;8234:45;:::i;:::-;8229:3;8222:58;8212:74;;:::o;8292:360::-;8378:3;8406:38;8438:5;8406:38;:::i;:::-;8460:70;8523:6;8518:3;8460:70;:::i;:::-;8453:77;;8539:52;8584:6;8579:3;8572:4;8565:5;8561:16;8539:52;:::i;:::-;8616:29;8638:6;8616:29;:::i;:::-;8611:3;8607:39;8600:46;;8382:270;;;;;:::o;8658:364::-;8746:3;8774:39;8807:5;8774:39;:::i;:::-;8829:71;8893:6;8888:3;8829:71;:::i;:::-;8822:78;;8909:52;8954:6;8949:3;8942:4;8935:5;8931:16;8909:52;:::i;:::-;8986:29;9008:6;8986:29;:::i;:::-;8981:3;8977:39;8970:46;;8750:272;;;;;:::o;9028:377::-;9134:3;9162:39;9195:5;9162:39;:::i;:::-;9217:89;9299:6;9294:3;9217:89;:::i;:::-;9210:96;;9315:52;9360:6;9355:3;9348:4;9341:5;9337:16;9315:52;:::i;:::-;9392:6;9387:3;9383:16;9376:23;;9138:267;;;;;:::o;9411:366::-;9553:3;9574:67;9638:2;9633:3;9574:67;:::i;:::-;9567:74;;9650:93;9739:3;9650:93;:::i;:::-;9768:2;9763:3;9759:12;9752:19;;9557:220;;;:::o;9783:366::-;9925:3;9946:67;10010:2;10005:3;9946:67;:::i;:::-;9939:74;;10022:93;10111:3;10022:93;:::i;:::-;10140:2;10135:3;10131:12;10124:19;;9929:220;;;:::o;10155:366::-;10297:3;10318:67;10382:2;10377:3;10318:67;:::i;:::-;10311:74;;10394:93;10483:3;10394:93;:::i;:::-;10512:2;10507:3;10503:12;10496:19;;10301:220;;;:::o;10527:366::-;10669:3;10690:67;10754:2;10749:3;10690:67;:::i;:::-;10683:74;;10766:93;10855:3;10766:93;:::i;:::-;10884:2;10879:3;10875:12;10868:19;;10673:220;;;:::o;10899:366::-;11041:3;11062:67;11126:2;11121:3;11062:67;:::i;:::-;11055:74;;11138:93;11227:3;11138:93;:::i;:::-;11256:2;11251:3;11247:12;11240:19;;11045:220;;;:::o;11271:366::-;11413:3;11434:67;11498:2;11493:3;11434:67;:::i;:::-;11427:74;;11510:93;11599:3;11510:93;:::i;:::-;11628:2;11623:3;11619:12;11612:19;;11417:220;;;:::o;11643:366::-;11785:3;11806:67;11870:2;11865:3;11806:67;:::i;:::-;11799:74;;11882:93;11971:3;11882:93;:::i;:::-;12000:2;11995:3;11991:12;11984:19;;11789:220;;;:::o;12015:366::-;12157:3;12178:67;12242:2;12237:3;12178:67;:::i;:::-;12171:74;;12254:93;12343:3;12254:93;:::i;:::-;12372:2;12367:3;12363:12;12356:19;;12161:220;;;:::o;12387:366::-;12529:3;12550:67;12614:2;12609:3;12550:67;:::i;:::-;12543:74;;12626:93;12715:3;12626:93;:::i;:::-;12744:2;12739:3;12735:12;12728:19;;12533:220;;;:::o;12759:366::-;12901:3;12922:67;12986:2;12981:3;12922:67;:::i;:::-;12915:74;;12998:93;13087:3;12998:93;:::i;:::-;13116:2;13111:3;13107:12;13100:19;;12905:220;;;:::o;13131:366::-;13273:3;13294:67;13358:2;13353:3;13294:67;:::i;:::-;13287:74;;13370:93;13459:3;13370:93;:::i;:::-;13488:2;13483:3;13479:12;13472:19;;13277:220;;;:::o;13503:366::-;13645:3;13666:67;13730:2;13725:3;13666:67;:::i;:::-;13659:74;;13742:93;13831:3;13742:93;:::i;:::-;13860:2;13855:3;13851:12;13844:19;;13649:220;;;:::o;13875:366::-;14017:3;14038:67;14102:2;14097:3;14038:67;:::i;:::-;14031:74;;14114:93;14203:3;14114:93;:::i;:::-;14232:2;14227:3;14223:12;14216:19;;14021:220;;;:::o;14247:366::-;14389:3;14410:67;14474:2;14469:3;14410:67;:::i;:::-;14403:74;;14486:93;14575:3;14486:93;:::i;:::-;14604:2;14599:3;14595:12;14588:19;;14393:220;;;:::o;14619:366::-;14761:3;14782:67;14846:2;14841:3;14782:67;:::i;:::-;14775:74;;14858:93;14947:3;14858:93;:::i;:::-;14976:2;14971:3;14967:12;14960:19;;14765:220;;;:::o;14991:366::-;15133:3;15154:67;15218:2;15213:3;15154:67;:::i;:::-;15147:74;;15230:93;15319:3;15230:93;:::i;:::-;15348:2;15343:3;15339:12;15332:19;;15137:220;;;:::o;15363:366::-;15505:3;15526:67;15590:2;15585:3;15526:67;:::i;:::-;15519:74;;15602:93;15691:3;15602:93;:::i;:::-;15720:2;15715:3;15711:12;15704:19;;15509:220;;;:::o;15735:366::-;15877:3;15898:67;15962:2;15957:3;15898:67;:::i;:::-;15891:74;;15974:93;16063:3;15974:93;:::i;:::-;16092:2;16087:3;16083:12;16076:19;;15881:220;;;:::o;16107:366::-;16249:3;16270:67;16334:2;16329:3;16270:67;:::i;:::-;16263:74;;16346:93;16435:3;16346:93;:::i;:::-;16464:2;16459:3;16455:12;16448:19;;16253:220;;;:::o;16479:366::-;16621:3;16642:67;16706:2;16701:3;16642:67;:::i;:::-;16635:74;;16718:93;16807:3;16718:93;:::i;:::-;16836:2;16831:3;16827:12;16820:19;;16625:220;;;:::o;16851:366::-;16993:3;17014:67;17078:2;17073:3;17014:67;:::i;:::-;17007:74;;17090:93;17179:3;17090:93;:::i;:::-;17208:2;17203:3;17199:12;17192:19;;16997:220;;;:::o;17223:366::-;17365:3;17386:67;17450:2;17445:3;17386:67;:::i;:::-;17379:74;;17462:93;17551:3;17462:93;:::i;:::-;17580:2;17575:3;17571:12;17564:19;;17369:220;;;:::o;17595:366::-;17737:3;17758:67;17822:2;17817:3;17758:67;:::i;:::-;17751:74;;17834:93;17923:3;17834:93;:::i;:::-;17952:2;17947:3;17943:12;17936:19;;17741:220;;;:::o;17967:366::-;18109:3;18130:67;18194:2;18189:3;18130:67;:::i;:::-;18123:74;;18206:93;18295:3;18206:93;:::i;:::-;18324:2;18319:3;18315:12;18308:19;;18113:220;;;:::o;18339:366::-;18481:3;18502:67;18566:2;18561:3;18502:67;:::i;:::-;18495:74;;18578:93;18667:3;18578:93;:::i;:::-;18696:2;18691:3;18687:12;18680:19;;18485:220;;;:::o;18711:118::-;18798:24;18816:5;18798:24;:::i;:::-;18793:3;18786:37;18776:53;;:::o;18835:112::-;18918:22;18934:5;18918:22;:::i;:::-;18913:3;18906:35;18896:51;;:::o;18953:256::-;19065:3;19080:75;19151:3;19142:6;19080:75;:::i;:::-;19180:2;19175:3;19171:12;19164:19;;19200:3;19193:10;;19069:140;;;;:::o;19215:397::-;19355:3;19370:75;19441:3;19432:6;19370:75;:::i;:::-;19470:2;19465:3;19461:12;19454:19;;19483:75;19554:3;19545:6;19483:75;:::i;:::-;19583:2;19578:3;19574:12;19567:19;;19603:3;19596:10;;19359:253;;;;;:::o;19618:595::-;19846:3;19868:95;19959:3;19950:6;19868:95;:::i;:::-;19861:102;;19980:95;20071:3;20062:6;19980:95;:::i;:::-;19973:102;;20092:95;20183:3;20174:6;20092:95;:::i;:::-;20085:102;;20204:3;20197:10;;19850:363;;;;;;:::o;20219:222::-;20312:4;20350:2;20339:9;20335:18;20327:26;;20363:71;20431:1;20420:9;20416:17;20407:6;20363:71;:::i;:::-;20317:124;;;;:::o;20447:640::-;20642:4;20680:3;20669:9;20665:19;20657:27;;20694:71;20762:1;20751:9;20747:17;20738:6;20694:71;:::i;:::-;20775:72;20843:2;20832:9;20828:18;20819:6;20775:72;:::i;:::-;20857;20925:2;20914:9;20910:18;20901:6;20857:72;:::i;:::-;20976:9;20970:4;20966:20;20961:2;20950:9;20946:18;20939:48;21004:76;21075:4;21066:6;21004:76;:::i;:::-;20996:84;;20647:440;;;;;;;:::o;21093:210::-;21180:4;21218:2;21207:9;21203:18;21195:26;;21231:65;21293:1;21282:9;21278:17;21269:6;21231:65;:::i;:::-;21185:118;;;;:::o;21309:313::-;21422:4;21460:2;21449:9;21445:18;21437:26;;21509:9;21503:4;21499:20;21495:1;21484:9;21480:17;21473:47;21537:78;21610:4;21601:6;21537:78;:::i;:::-;21529:86;;21427:195;;;;:::o;21628:419::-;21794:4;21832:2;21821:9;21817:18;21809:26;;21881:9;21875:4;21871:20;21867:1;21856:9;21852:17;21845:47;21909:131;22035:4;21909:131;:::i;:::-;21901:139;;21799:248;;;:::o;22053:419::-;22219:4;22257:2;22246:9;22242:18;22234:26;;22306:9;22300:4;22296:20;22292:1;22281:9;22277:17;22270:47;22334:131;22460:4;22334:131;:::i;:::-;22326:139;;22224:248;;;:::o;22478:419::-;22644:4;22682:2;22671:9;22667:18;22659:26;;22731:9;22725:4;22721:20;22717:1;22706:9;22702:17;22695:47;22759:131;22885:4;22759:131;:::i;:::-;22751:139;;22649:248;;;:::o;22903:419::-;23069:4;23107:2;23096:9;23092:18;23084:26;;23156:9;23150:4;23146:20;23142:1;23131:9;23127:17;23120:47;23184:131;23310:4;23184:131;:::i;:::-;23176:139;;23074:248;;;:::o;23328:419::-;23494:4;23532:2;23521:9;23517:18;23509:26;;23581:9;23575:4;23571:20;23567:1;23556:9;23552:17;23545:47;23609:131;23735:4;23609:131;:::i;:::-;23601:139;;23499:248;;;:::o;23753:419::-;23919:4;23957:2;23946:9;23942:18;23934:26;;24006:9;24000:4;23996:20;23992:1;23981:9;23977:17;23970:47;24034:131;24160:4;24034:131;:::i;:::-;24026:139;;23924:248;;;:::o;24178:419::-;24344:4;24382:2;24371:9;24367:18;24359:26;;24431:9;24425:4;24421:20;24417:1;24406:9;24402:17;24395:47;24459:131;24585:4;24459:131;:::i;:::-;24451:139;;24349:248;;;:::o;24603:419::-;24769:4;24807:2;24796:9;24792:18;24784:26;;24856:9;24850:4;24846:20;24842:1;24831:9;24827:17;24820:47;24884:131;25010:4;24884:131;:::i;:::-;24876:139;;24774:248;;;:::o;25028:419::-;25194:4;25232:2;25221:9;25217:18;25209:26;;25281:9;25275:4;25271:20;25267:1;25256:9;25252:17;25245:47;25309:131;25435:4;25309:131;:::i;:::-;25301:139;;25199:248;;;:::o;25453:419::-;25619:4;25657:2;25646:9;25642:18;25634:26;;25706:9;25700:4;25696:20;25692:1;25681:9;25677:17;25670:47;25734:131;25860:4;25734:131;:::i;:::-;25726:139;;25624:248;;;:::o;25878:419::-;26044:4;26082:2;26071:9;26067:18;26059:26;;26131:9;26125:4;26121:20;26117:1;26106:9;26102:17;26095:47;26159:131;26285:4;26159:131;:::i;:::-;26151:139;;26049:248;;;:::o;26303:419::-;26469:4;26507:2;26496:9;26492:18;26484:26;;26556:9;26550:4;26546:20;26542:1;26531:9;26527:17;26520:47;26584:131;26710:4;26584:131;:::i;:::-;26576:139;;26474:248;;;:::o;26728:419::-;26894:4;26932:2;26921:9;26917:18;26909:26;;26981:9;26975:4;26971:20;26967:1;26956:9;26952:17;26945:47;27009:131;27135:4;27009:131;:::i;:::-;27001:139;;26899:248;;;:::o;27153:419::-;27319:4;27357:2;27346:9;27342:18;27334:26;;27406:9;27400:4;27396:20;27392:1;27381:9;27377:17;27370:47;27434:131;27560:4;27434:131;:::i;:::-;27426:139;;27324:248;;;:::o;27578:419::-;27744:4;27782:2;27771:9;27767:18;27759:26;;27831:9;27825:4;27821:20;27817:1;27806:9;27802:17;27795:47;27859:131;27985:4;27859:131;:::i;:::-;27851:139;;27749:248;;;:::o;28003:419::-;28169:4;28207:2;28196:9;28192:18;28184:26;;28256:9;28250:4;28246:20;28242:1;28231:9;28227:17;28220:47;28284:131;28410:4;28284:131;:::i;:::-;28276:139;;28174:248;;;:::o;28428:419::-;28594:4;28632:2;28621:9;28617:18;28609:26;;28681:9;28675:4;28671:20;28667:1;28656:9;28652:17;28645:47;28709:131;28835:4;28709:131;:::i;:::-;28701:139;;28599:248;;;:::o;28853:419::-;29019:4;29057:2;29046:9;29042:18;29034:26;;29106:9;29100:4;29096:20;29092:1;29081:9;29077:17;29070:47;29134:131;29260:4;29134:131;:::i;:::-;29126:139;;29024:248;;;:::o;29278:419::-;29444:4;29482:2;29471:9;29467:18;29459:26;;29531:9;29525:4;29521:20;29517:1;29506:9;29502:17;29495:47;29559:131;29685:4;29559:131;:::i;:::-;29551:139;;29449:248;;;:::o;29703:419::-;29869:4;29907:2;29896:9;29892:18;29884:26;;29956:9;29950:4;29946:20;29942:1;29931:9;29927:17;29920:47;29984:131;30110:4;29984:131;:::i;:::-;29976:139;;29874:248;;;:::o;30128:419::-;30294:4;30332:2;30321:9;30317:18;30309:26;;30381:9;30375:4;30371:20;30367:1;30356:9;30352:17;30345:47;30409:131;30535:4;30409:131;:::i;:::-;30401:139;;30299:248;;;:::o;30553:419::-;30719:4;30757:2;30746:9;30742:18;30734:26;;30806:9;30800:4;30796:20;30792:1;30781:9;30777:17;30770:47;30834:131;30960:4;30834:131;:::i;:::-;30826:139;;30724:248;;;:::o;30978:419::-;31144:4;31182:2;31171:9;31167:18;31159:26;;31231:9;31225:4;31221:20;31217:1;31206:9;31202:17;31195:47;31259:131;31385:4;31259:131;:::i;:::-;31251:139;;31149:248;;;:::o;31403:419::-;31569:4;31607:2;31596:9;31592:18;31584:26;;31656:9;31650:4;31646:20;31642:1;31631:9;31627:17;31620:47;31684:131;31810:4;31684:131;:::i;:::-;31676:139;;31574:248;;;:::o;31828:419::-;31994:4;32032:2;32021:9;32017:18;32009:26;;32081:9;32075:4;32071:20;32067:1;32056:9;32052:17;32045:47;32109:131;32235:4;32109:131;:::i;:::-;32101:139;;31999:248;;;:::o;32253:222::-;32346:4;32384:2;32373:9;32369:18;32361:26;;32397:71;32465:1;32454:9;32450:17;32441:6;32397:71;:::i;:::-;32351:124;;;;:::o;32481:214::-;32570:4;32608:2;32597:9;32593:18;32585:26;;32621:67;32685:1;32674:9;32670:17;32661:6;32621:67;:::i;:::-;32575:120;;;;:::o;32701:129::-;32735:6;32762:20;;:::i;:::-;32752:30;;32791:33;32819:4;32811:6;32791:33;:::i;:::-;32742:88;;;:::o;32836:75::-;32869:6;32902:2;32896:9;32886:19;;32876:35;:::o;32917:307::-;32978:4;33068:18;33060:6;33057:30;33054:2;;;33090:18;;:::i;:::-;33054:2;33128:29;33150:6;33128:29;:::i;:::-;33120:37;;33212:4;33206;33202:15;33194:23;;32983:241;;;:::o;33230:308::-;33292:4;33382:18;33374:6;33371:30;33368:2;;;33404:18;;:::i;:::-;33368:2;33442:29;33464:6;33442:29;:::i;:::-;33434:37;;33526:4;33520;33516:15;33508:23;;33297:241;;;:::o;33544:98::-;33595:6;33629:5;33623:12;33613:22;;33602:40;;;:::o;33648:99::-;33700:6;33734:5;33728:12;33718:22;;33707:40;;;:::o;33753:168::-;33836:11;33870:6;33865:3;33858:19;33910:4;33905:3;33901:14;33886:29;;33848:73;;;;:::o;33927:169::-;34011:11;34045:6;34040:3;34033:19;34085:4;34080:3;34076:14;34061:29;;34023:73;;;;:::o;34102:148::-;34204:11;34241:3;34226:18;;34216:34;;;;:::o;34256:305::-;34296:3;34315:20;34333:1;34315:20;:::i;:::-;34310:25;;34349:20;34367:1;34349:20;:::i;:::-;34344:25;;34503:1;34435:66;34431:74;34428:1;34425:81;34422:2;;;34509:18;;:::i;:::-;34422:2;34553:1;34550;34546:9;34539:16;;34300:261;;;;:::o;34567:185::-;34607:1;34624:20;34642:1;34624:20;:::i;:::-;34619:25;;34658:20;34676:1;34658:20;:::i;:::-;34653:25;;34697:1;34687:2;;34702:18;;:::i;:::-;34687:2;34744:1;34741;34737:9;34732:14;;34609:143;;;;:::o;34758:348::-;34798:7;34821:20;34839:1;34821:20;:::i;:::-;34816:25;;34855:20;34873:1;34855:20;:::i;:::-;34850:25;;35043:1;34975:66;34971:74;34968:1;34965:81;34960:1;34953:9;34946:17;34942:105;34939:2;;;35050:18;;:::i;:::-;34939:2;35098:1;35095;35091:9;35080:20;;34806:300;;;;:::o;35112:191::-;35152:4;35172:20;35190:1;35172:20;:::i;:::-;35167:25;;35206:20;35224:1;35206:20;:::i;:::-;35201:25;;35245:1;35242;35239:8;35236:2;;;35250:18;;:::i;:::-;35236:2;35295:1;35292;35288:9;35280:17;;35157:146;;;;:::o;35309:96::-;35346:7;35375:24;35393:5;35375:24;:::i;:::-;35364:35;;35354:51;;;:::o;35411:90::-;35445:7;35488:5;35481:13;35474:21;35463:32;;35453:48;;;:::o;35507:77::-;35544:7;35573:5;35562:16;;35552:32;;;:::o;35590:149::-;35626:7;35666:66;35659:5;35655:78;35644:89;;35634:105;;;:::o;35745:126::-;35782:7;35822:42;35815:5;35811:54;35800:65;;35790:81;;;:::o;35877:77::-;35914:7;35943:5;35932:16;;35922:32;;;:::o;35960:86::-;35995:7;36035:4;36028:5;36024:16;36013:27;;36003:43;;;:::o;36052:154::-;36136:6;36131:3;36126;36113:30;36198:1;36189:6;36184:3;36180:16;36173:27;36103:103;;;:::o;36212:307::-;36280:1;36290:113;36304:6;36301:1;36298:13;36290:113;;;36389:1;36384:3;36380:11;36374:18;36370:1;36365:3;36361:11;36354:39;36326:2;36323:1;36319:10;36314:15;;36290:113;;;36421:6;36418:1;36415:13;36412:2;;;36501:1;36492:6;36487:3;36483:16;36476:27;36412:2;36261:258;;;;:::o;36525:320::-;36569:6;36606:1;36600:4;36596:12;36586:22;;36653:1;36647:4;36643:12;36674:18;36664:2;;36730:4;36722:6;36718:17;36708:27;;36664:2;36792;36784:6;36781:14;36761:18;36758:38;36755:2;;;36811:18;;:::i;:::-;36755:2;36576:269;;;;:::o;36851:281::-;36934:27;36956:4;36934:27;:::i;:::-;36926:6;36922:40;37064:6;37052:10;37049:22;37028:18;37016:10;37013:34;37010:62;37007:2;;;37075:18;;:::i;:::-;37007:2;37115:10;37111:2;37104:22;36894:238;;;:::o;37138:233::-;37177:3;37200:24;37218:5;37200:24;:::i;:::-;37191:33;;37246:66;37239:5;37236:77;37233:2;;;37316:18;;:::i;:::-;37233:2;37363:1;37356:5;37352:13;37345:20;;37181:190;;;:::o;37377:167::-;37414:3;37437:22;37453:5;37437:22;:::i;:::-;37428:31;;37481:4;37474:5;37471:15;37468:2;;;37489:18;;:::i;:::-;37468:2;37536:1;37529:5;37525:13;37518:20;;37418:126;;;:::o;37550:100::-;37589:7;37618:26;37638:5;37618:26;:::i;:::-;37607:37;;37597:53;;;:::o;37656:79::-;37695:7;37724:5;37713:16;;37703:32;;;:::o;37741:94::-;37780:7;37809:20;37823:5;37809:20;:::i;:::-;37798:31;;37788:47;;;:::o;37841:176::-;37873:1;37890:20;37908:1;37890:20;:::i;:::-;37885:25;;37924:20;37942:1;37924:20;:::i;:::-;37919:25;;37963:1;37953:2;;37968:18;;:::i;:::-;37953:2;38009:1;38006;38002:9;37997:14;;37875:142;;;;:::o;38023:180::-;38071:77;38068:1;38061:88;38168:4;38165:1;38158:15;38192:4;38189:1;38182:15;38209:180;38257:77;38254:1;38247:88;38354:4;38351:1;38344:15;38378:4;38375:1;38368:15;38395:180;38443:77;38440:1;38433:88;38540:4;38537:1;38530:15;38564:4;38561:1;38554:15;38581:180;38629:77;38626:1;38619:88;38726:4;38723:1;38716:15;38750:4;38747:1;38740:15;38767:102;38808:6;38859:2;38855:7;38850:2;38843:5;38839:14;38835:28;38825:38;;38815:54;;;:::o;38875:94::-;38908:8;38956:5;38952:2;38948:14;38927:35;;38917:52;;;:::o;38975:237::-;39115:34;39111:1;39103:6;39099:14;39092:58;39184:20;39179:2;39171:6;39167:15;39160:45;39081:131;:::o;39218:225::-;39358:34;39354:1;39346:6;39342:14;39335:58;39427:8;39422:2;39414:6;39410:15;39403:33;39324:119;:::o;39449:178::-;39589:30;39585:1;39577:6;39573:14;39566:54;39555:72;:::o;39633:225::-;39773:34;39769:1;39761:6;39757:14;39750:58;39842:8;39837:2;39829:6;39825:15;39818:33;39739:119;:::o;39864:223::-;40004:34;40000:1;39992:6;39988:14;39981:58;40073:6;40068:2;40060:6;40056:15;40049:31;39970:117;:::o;40093:175::-;40233:27;40229:1;40221:6;40217:14;40210:51;40199:69;:::o;40274:231::-;40414:34;40410:1;40402:6;40398:14;40391:58;40483:14;40478:2;40470:6;40466:15;40459:39;40380:125;:::o;40511:243::-;40651:34;40647:1;40639:6;40635:14;40628:58;40720:26;40715:2;40707:6;40703:15;40696:51;40617:137;:::o;40760:229::-;40900:34;40896:1;40888:6;40884:14;40877:58;40969:12;40964:2;40956:6;40952:15;40945:37;40866:123;:::o;40995:228::-;41135:34;41131:1;41123:6;41119:14;41112:58;41204:11;41199:2;41191:6;41187:15;41180:36;41101:122;:::o;41229:182::-;41369:34;41365:1;41357:6;41353:14;41346:58;41335:76;:::o;41417:177::-;41557:29;41553:1;41545:6;41541:14;41534:53;41523:71;:::o;41600:176::-;41740:28;41736:1;41728:6;41724:14;41717:52;41706:70;:::o;41782:182::-;41922:34;41918:1;41910:6;41906:14;41899:58;41888:76;:::o;41970:231::-;42110:34;42106:1;42098:6;42094:14;42087:58;42179:14;42174:2;42166:6;42162:15;42155:39;42076:125;:::o;42207:182::-;42347:34;42343:1;42335:6;42331:14;42324:58;42313:76;:::o;42395:228::-;42535:34;42531:1;42523:6;42519:14;42512:58;42604:11;42599:2;42591:6;42587:15;42580:36;42501:122;:::o;42629:234::-;42769:34;42765:1;42757:6;42753:14;42746:58;42838:17;42833:2;42825:6;42821:15;42814:42;42735:128;:::o;42869:229::-;43009:34;43005:1;42997:6;42993:14;42986:58;43078:12;43073:2;43065:6;43061:15;43054:37;42975:123;:::o;43104:220::-;43244:34;43240:1;43232:6;43228:14;43221:58;43313:3;43308:2;43300:6;43296:15;43289:28;43210:114;:::o;43330:220::-;43470:34;43466:1;43458:6;43454:14;43447:58;43539:3;43534:2;43526:6;43522:15;43515:28;43436:114;:::o;43556:168::-;43696:20;43692:1;43684:6;43680:14;43673:44;43662:62;:::o;43730:236::-;43870:34;43866:1;43858:6;43854:14;43847:58;43939:19;43934:2;43926:6;43922:15;43915:44;43836:130;:::o;43972:181::-;44112:33;44108:1;44100:6;44096:14;44089:57;44078:75;:::o;44159:171::-;44299:23;44295:1;44287:6;44283:14;44276:47;44265:65;:::o;44336:122::-;44409:24;44427:5;44409:24;:::i;:::-;44402:5;44399:35;44389:2;;44448:1;44445;44438:12;44389:2;44379:79;:::o;44464:116::-;44534:21;44549:5;44534:21;:::i;:::-;44527:5;44524:32;44514:2;;44570:1;44567;44560:12;44514:2;44504:76;:::o;44586:122::-;44659:24;44677:5;44659:24;:::i;:::-;44652:5;44649:35;44639:2;;44698:1;44695;44688:12;44639:2;44629:79;:::o;44714:120::-;44786:23;44803:5;44786:23;:::i;:::-;44779:5;44776:34;44766:2;;44824:1;44821;44814:12;44766:2;44756:78;:::o;44840:122::-;44913:24;44931:5;44913:24;:::i;:::-;44906:5;44903:35;44893:2;;44952:1;44949;44942:12;44893:2;44883:79;:::o

Swarm Source

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