ETH Price: $3,337.63 (+0.38%)

Token

WitLink Land (witlinkland)
 

Overview

Max Total Supply

6,233 witlinkland

Holders

619

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
0 witlinkland
0x3b6c3d49ee7b719bb610ca011ebf2de7dde35d67
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:
WitLink

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-17
*/

// File: contracts/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);
    }
}

// File: contracts/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: contracts/access/Ownable.sol



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/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: contracts/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: contracts/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: contracts/utils/introspection/ERC165.sol



pragma solidity ^0.8.0;


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

// File: contracts/token/ERC721/IERC721.sol



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/token/ERC721/extensions/IERC721Enumerable.sol



pragma solidity ^0.8.0;


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

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

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

// File: contracts/token/ERC721/extensions/IERC721Metadata.sol



pragma solidity ^0.8.0;


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

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

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

// File: contracts/token/ERC721/ERC721.sol



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File: contracts/token/ERC721/extensions/ERC721Enumerable.sol



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: witlink.sol

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;



contract WitLink is ERC721Enumerable, Ownable {
    using Strings for uint256;

    string public baseURI;
    string public baseExtension = ".json";
    uint256 public cost = 0.05 ether;
    uint256 public presaleCost = 0.03 ether;
    uint256 public maxSupply = 7000;
    uint256 public standardSupply = 3213;
    uint256 public deluxeSupply = 2023;
    uint256 public villaSupply = 595;
    uint256 public executiveSupply = 119;
    uint256 public maxMintAmount = 50;
    uint256 public standardCost = 0.12 ether;
    uint256 public deluxeCost = 0.24 ether;
    uint256 public villaCost = 0.59 ether;
    uint256 public executiveCost = 1.5 ether;
    bool public paused = false;
    mapping(address => bool) public whitelisted;
    mapping(address => bool) public presaleWallets;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI
    ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
        minttokenId(msg.sender, 3213, 10);
        minttokenId(msg.sender, 5803, 10);
        minttokenId(msg.sender, 6755, 10);
        minttokenId(msg.sender, 6979, 10);
    }

    // internal
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
    function setstandardCost(uint256 _newstandardCost) public onlyOwner {
        standardCost = _newstandardCost;
    }
    function setdeluxeCost(uint256 _newdeluxeCost) public onlyOwner {
        deluxeCost = _newdeluxeCost;
    }
    function setvillaCost(uint256 _newvillaCost) public onlyOwner {
        villaCost = _newvillaCost;
    }
    function setexecutiveCost(uint256 _newexecutiveCost) public onlyOwner {
        executiveCost = _newexecutiveCost;
    }
    
    function setstandardSupply(uint256 _standardSupply) internal {
        standardSupply = _standardSupply;
    }
    function setdeluxeSupply(uint256 _deluxeSupply) internal {
        deluxeSupply = _deluxeSupply;
    }
    function setvillaSupply(uint256 _villaSupply) internal {
        villaSupply = _villaSupply;
    }
    function setexecutiveSupply(uint256 _executiveSupply) internal {
        executiveSupply = _executiveSupply;
    }
    function needToUpdateCost(uint256 _supply) internal view returns (uint256 _cost) {
        if(_supply <= 3780) {
            return standardCost;
        }
        if(_supply <= 6160) {
            return deluxeCost;
        }
        if(_supply <= 6860) {
            return villaCost;
        }
        if(_supply <= maxSupply) {
            return executiveCost;
        }
    }
    function updateSupply(uint256 _tokenId, uint256 _mintAmount) internal {
        if(_tokenId < 3213 && _mintAmount + _tokenId < 3213) {
            setstandardSupply(standardSupply - _mintAmount);
        }
        if((3780 < _tokenId && 3780 < _tokenId + _mintAmount) && (_tokenId<5803 && _tokenId + _mintAmount<5803)) {
            setdeluxeSupply(deluxeSupply - _mintAmount);
        }
        if((6160<_tokenId && 6160<_tokenId + _mintAmount) && (_tokenId<6755 && _tokenId + _mintAmount<6755)) {
            setvillaSupply(villaSupply - _mintAmount);
        }
        if((6860<_tokenId && 6860<_tokenId + _mintAmount) && (_tokenId<6979 && _tokenId + _mintAmount<6979)) {
            setexecutiveSupply(executiveSupply - _mintAmount);
        }
    }
    function minttokenId(address _to, uint256 _tokenId, uint256 _mintAmount) public payable {
        uint256 supply = totalSupply();
        require(!paused);
        require(_mintAmount > 0);
        require(supply + _mintAmount <= maxSupply);
        if (msg.sender != owner()) {
            require((_tokenId < 3213 && _mintAmount + _tokenId < 3213) || ((3780 < _tokenId && 3780 < _tokenId + _mintAmount) && (_tokenId<5803 && _tokenId + _mintAmount<5803)) || ((6160<_tokenId && 6160<_tokenId + _mintAmount) && (_tokenId<6755 && _tokenId + _mintAmount<6755)) || ((6860<_tokenId && 6860<_tokenId + _mintAmount) && (_tokenId<6979 && _tokenId + _mintAmount<6979)), "reserved");
            require(_mintAmount <= maxMintAmount, "Mint amount exceed maximum allowed");
            require(msg.value >= needToUpdateCost(_tokenId) * _mintAmount, "Not enough to pay");
        }
        for (uint256 i = 0; i < _mintAmount; i++) {
            _safeMint(_to,_tokenId + i);
        }
        updateSupply(_tokenId,_mintAmount);
    }

    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
    }

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

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

    //only owner
    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setPresaleCost(uint256 _newCost) public onlyOwner {
        presaleCost = _newCost;
    }

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

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

    function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner
    {
        baseExtension = _newBaseExtension;
    }

    function pause(bool _state) public onlyOwner {
        paused = _state;
    }

    function whitelistUser(address _user) public onlyOwner {
        whitelisted[_user] = true;
    }

    function removeWhitelistUser(address _user) public onlyOwner {
        whitelisted[_user] = false;
    }

    function addPresaleUser(address _user) public onlyOwner {
        presaleWallets[_user] = true;
    }

    function add100PresaleUsers(address[100] memory _users) public onlyOwner {
        for (uint256 i = 0; i < 2; i++) {
            presaleWallets[_users[i]] = true;
        }
    }

    function removePresaleUser(address _user) public onlyOwner {
        presaleWallets[_user] = false;
    }

    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[100]","name":"_users","type":"address[100]"}],"name":"add100PresaleUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addPresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deluxeCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deluxeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executiveCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executiveSupply","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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"minttokenId","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removePresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newdeluxeCost","type":"uint256"}],"name":"setdeluxeCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newexecutiveCost","type":"uint256"}],"name":"setexecutiveCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newstandardCost","type":"uint256"}],"name":"setstandardCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newvillaCost","type":"uint256"}],"name":"setvillaCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"standardCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"standardSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"villaCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"villaSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200127f565b5066b1a2bc2ec50000600d55666a94d74f430000600e55611b58600f55610c8d6010556107e7601155610253601255607760135560326014556701aa535d3d0c0000601555670354a6ba7a18000060165567083019dfc17b00006017556714d1120d7b1600006018556000601960006101000a81548160ff021916908315150217905550348015620000e257600080fd5b5060405162007171380380620071718339818101604052810190620001089190620013f6565b82828160009080519060200190620001229291906200127f565b5080600190805190602001906200013b9291906200127f565b5050506200015e62000152620001d060201b60201c565b620001d860201b60201c565b6200016f816200029e60201b60201c565b6200018533610c8d600a6200034960201b60201c565b6200019b336116ab600a6200034960201b60201c565b620001b133611a63600a6200034960201b60201c565b620001c733611b43600a6200034960201b60201c565b50505062001d71565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ae620001d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d46200064160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200032d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000324906200176a565b60405180910390fd5b80600b9080519060200190620003459291906200127f565b5050565b60006200035b6200066b60201b60201c565b9050601960009054906101000a900460ff16156200037857600080fd5b600082116200038657600080fd5b600f5482826200039791906200183a565b1115620003a357600080fd5b620003b36200064160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620005e757610c8d83108015620004065750610c8d83836200040491906200183a565b105b8062000457575082610ec41080156200042d575081836200042891906200183a565b610ec4105b80156200045657506116ab831080156200045557506116ab82846200045391906200183a565b105b5b5b80620004a85750826118101080156200047e575081836200047991906200183a565b611810105b8015620004a75750611a6383108015620004a65750611a638284620004a491906200183a565b105b5b5b80620004f9575082611acc108015620004cf57508183620004ca91906200183a565b611acc105b8015620004f85750611b4383108015620004f75750611b438284620004f591906200183a565b105b5b5b6200053b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000532906200178c565b60405180910390fd5b60145482111562000583576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057a90620016e2565b60405180910390fd5b8162000595846200067860201b60201c565b620005a1919062001897565b341015620005e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005dd9062001726565b60405180910390fd5b5b60005b828110156200062857620006128582866200060691906200183a565b620006d460201b60201c565b80806200061f9062001a3f565b915050620005ea565b506200063b8383620006fa60201b60201c565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b6000610ec482116200068f576015549050620006cf565b6118108211620006a4576016549050620006cf565b611acc8211620006b9576017549050620006cf565b600f548211620006ce576018549050620006cf565b5b919050565b620006f68282604051806020016040528060008152506200089560201b60201c565b5050565b610c8d821080156200071a5750610c8d82826200071891906200183a565b105b1562000741576200074081601054620007349190620018f8565b6200090360201b60201c565b5b81610ec410801562000761575080826200075c91906200183a565b610ec4105b80156200078a57506116ab821080156200078957506116ab81836200078791906200183a565b105b5b15620007b157620007b081601154620007a49190620018f8565b6200090d60201b60201c565b5b81611810108015620007d157508082620007cc91906200183a565b611810105b8015620007fa5750611a6382108015620007f95750611a638183620007f791906200183a565b105b5b1562000821576200082081601254620008149190620018f8565b6200091760201b60201c565b5b81611acc10801562000841575080826200083c91906200183a565b611acc105b80156200086a5750611b4382108015620008695750611b4381836200086791906200183a565b105b5b1562000891576200089081601354620008849190620018f8565b6200092160201b60201c565b5b5050565b620008a783836200092b60201b60201c565b620008bc600084848462000b1160201b60201c565b620008fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f5906200169e565b60405180910390fd5b505050565b8060108190555050565b8060118190555050565b8060128190555050565b8060138190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200099e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009959062001748565b60405180910390fd5b620009af8162000ccb60201b60201c565b15620009f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009e990620016c0565b60405180910390fd5b62000a066000838362000d3760201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a5891906200183a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062000b3f8473ffffffffffffffffffffffffffffffffffffffff1662000e7e60201b620027881760201c565b1562000cbe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000b71620001d060201b60201c565b8786866040518563ffffffff1660e01b815260040162000b9594939291906200164a565b602060405180830381600087803b15801562000bb057600080fd5b505af192505050801562000be457506040513d601f19601f8201168201806040525081019062000be19190620013c4565b60015b62000c6d573d806000811462000c17576040519150601f19603f3d011682016040523d82523d6000602084013e62000c1c565b606091505b5060008151141562000c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c5c906200169e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000cc3565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000d4f83838362000e9160201b6200279b1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000d9c5762000d968162000e9660201b60201c565b62000de4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000de35762000de2838262000edf60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000e315762000e2b816200105c60201b60201c565b62000e79565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000e785762000e7782826200113860201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000ef984620011c460201b620018a71760201c565b62000f059190620018f8565b905060006007600084815260200190815260200160002054905081811462000feb576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050620010729190620018f8565b9050600060096000848152602001908152602001600020549050600060088381548110620010a557620010a462001b1a565b5b906000526020600020015490508060088381548110620010ca57620010c962001b1a565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806200111c576200111b62001aeb565b5b6001900381819060005260206000200160009055905550505050565b60006200115083620011c460201b620018a71760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001238576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200122f9062001704565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8280546200128d90620019d3565b90600052602060002090601f016020900481019282620012b15760008555620012fd565b82601f10620012cc57805160ff1916838001178555620012fd565b82800160010185558215620012fd579182015b82811115620012fc578251825591602001919060010190620012df565b5b5090506200130c919062001310565b5090565b5b808211156200132b57600081600090555060010162001311565b5090565b6000620013466200134084620017d7565b620017ae565b90508281526020810184848401111562001365576200136462001b7d565b5b620013728482856200199d565b509392505050565b6000815190506200138b8162001d57565b92915050565b600082601f830112620013a957620013a862001b78565b5b8151620013bb8482602086016200132f565b91505092915050565b600060208284031215620013dd57620013dc62001b87565b5b6000620013ed848285016200137a565b91505092915050565b60008060006060848603121562001412576200141162001b87565b5b600084015167ffffffffffffffff81111562001433576200143262001b82565b5b620014418682870162001391565b935050602084015167ffffffffffffffff81111562001465576200146462001b82565b5b620014738682870162001391565b925050604084015167ffffffffffffffff81111562001497576200149662001b82565b5b620014a58682870162001391565b9150509250925092565b620014ba8162001933565b82525050565b6000620014cd826200180d565b620014d9818562001818565b9350620014eb8185602086016200199d565b620014f68162001b8c565b840191505092915050565b60006200151060328362001829565b91506200151d8262001b9d565b604082019050919050565b600062001537601c8362001829565b9150620015448262001bec565b602082019050919050565b60006200155e60228362001829565b91506200156b8262001c15565b604082019050919050565b600062001585602a8362001829565b9150620015928262001c64565b604082019050919050565b6000620015ac60118362001829565b9150620015b98262001cb3565b602082019050919050565b6000620015d360208362001829565b9150620015e08262001cdc565b602082019050919050565b6000620015fa60208362001829565b9150620016078262001d05565b602082019050919050565b60006200162160088362001829565b91506200162e8262001d2e565b602082019050919050565b620016448162001993565b82525050565b6000608082019050620016616000830187620014af565b620016706020830186620014af565b6200167f604083018562001639565b8181036060830152620016938184620014c0565b905095945050505050565b60006020820190508181036000830152620016b98162001501565b9050919050565b60006020820190508181036000830152620016db8162001528565b9050919050565b60006020820190508181036000830152620016fd816200154f565b9050919050565b600060208201905081810360008301526200171f8162001576565b9050919050565b6000602082019050818103600083015262001741816200159d565b9050919050565b600060208201905081810360008301526200176381620015c4565b9050919050565b600060208201905081810360008301526200178581620015eb565b9050919050565b60006020820190508181036000830152620017a78162001612565b9050919050565b6000620017ba620017cd565b9050620017c8828262001a09565b919050565b6000604051905090565b600067ffffffffffffffff821115620017f557620017f462001b49565b5b620018008262001b8c565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620018478262001993565b9150620018548362001993565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200188c576200188b62001a8d565b5b828201905092915050565b6000620018a48262001993565b9150620018b18362001993565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620018ed57620018ec62001a8d565b5b828202905092915050565b6000620019058262001993565b9150620019128362001993565b92508282101562001928576200192762001a8d565b5b828203905092915050565b6000620019408262001973565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620019bd578082015181840152602081019050620019a0565b83811115620019cd576000848401525b50505050565b60006002820490506001821680620019ec57607f821691505b6020821081141562001a035762001a0262001abc565b5b50919050565b62001a148262001b8c565b810181811067ffffffffffffffff8211171562001a365762001a3562001b49565b5b80604052505050565b600062001a4c8262001993565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001a825762001a8162001a8d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e7420616d6f756e7420657863656564206d6178696d756d20616c6c6f7760008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f20706179000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7265736572766564000000000000000000000000000000000000000000000000600082015250565b62001d628162001947565b811462001d6e57600080fd5b50565b6153f08062001d816000396000f3fe6080604052600436106103355760003560e01c80636352211e116101ab578063b88d4fde116100f7578063da3ef23f11610095578063df36523e1161006f578063df36523e14610bea578063e985e9c514610c15578063ed931e1714610c52578063f2fde38b14610c7b57610335565b8063da3ef23f14610b6f578063de28d29d14610b98578063df22fd6f14610bc157610335565b8063c87b56dd116100d1578063c87b56dd14610a9f578063d12da55214610adc578063d5abeb0114610b07578063d936547e14610b3257610335565b8063b88d4fde14610a20578063c43e5d8814610a49578063c668286214610a7457610335565b80638fdcf942116101645780639f093fcb1161013e5780639f093fcb14610989578063a22cb465146109b2578063b2f30e8c146109db578063b2f3e85e146109f757610335565b80638fdcf9421461090c57806395d89b41146109355780639ae0a1731461096057610335565b80636352211e146107fc5780636c0360eb1461083957806370a0823114610864578063715018a6146108a15780637f00c7a6146108b85780638da5cb5b146108e157610335565b806330b2264e116102855780634a4c560d11610223578063546857c7116101fd578063546857c71461075457806355f804b31461077d5780635c975abb146107a657806362045a96146107d157610335565b80634a4c560d146106c35780634f6ccce7146106ec578063541121f91461072957610335565b80633ccfd60b1161025f5780633ccfd60b1461062a57806342842e0e14610634578063438b63001461065d57806344a0d68a1461069a57610335565b806330b2264e1461059957806330cc7ae0146105d65780633773bf3a146105ff57610335565b806318160ddd116102f257806323b872dd116102cc57806323b872dd146104dd57806328e7f3af146105065780632a23d07d146105315780632f745c591461055c57610335565b806318160ddd1461045c5780631b1f717014610487578063239c70ae146104b257610335565b806301ffc9a71461033a57806302329a291461037757806306fdde03146103a0578063081812fc146103cb578063095ea7b31461040857806313faede614610431575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c9190613f22565b610ca4565b60405161036e9190614597565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613ef5565b610d1e565b005b3480156103ac57600080fd5b506103b5610db7565b6040516103c291906145b2565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613fc5565b610e49565b6040516103ff919061450e565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613e34565b610ece565b005b34801561043d57600080fd5b50610446610fe6565b6040516104539190614874565b60405180910390f35b34801561046857600080fd5b50610471610fec565b60405161047e9190614874565b60405180910390f35b34801561049357600080fd5b5061049c610ff9565b6040516104a99190614874565b60405180910390f35b3480156104be57600080fd5b506104c7610fff565b6040516104d49190614874565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190613d1e565b611005565b005b34801561051257600080fd5b5061051b611065565b6040516105289190614874565b60405180910390f35b34801561053d57600080fd5b5061054661106b565b6040516105539190614874565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613e34565b611071565b6040516105909190614874565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190613cb1565b611116565b6040516105cd9190614597565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613cb1565b611136565b005b34801561060b57600080fd5b5061061461120d565b6040516106219190614874565b60405180910390f35b610632611213565b005b34801561064057600080fd5b5061065b60048036038101906106569190613d1e565b611308565b005b34801561066957600080fd5b50610684600480360381019061067f9190613cb1565b611328565b6040516106919190614575565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190613fc5565b6113d6565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613cb1565b61145c565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613fc5565b611533565b6040516107209190614874565b60405180910390f35b34801561073557600080fd5b5061073e6115a4565b60405161074b9190614874565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190613ec7565b6115aa565b005b34801561078957600080fd5b506107a4600480360381019061079f9190613f7c565b6116b8565b005b3480156107b257600080fd5b506107bb61174e565b6040516107c89190614597565b60405180910390f35b3480156107dd57600080fd5b506107e6611761565b6040516107f39190614874565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613fc5565b611767565b604051610830919061450e565b60405180910390f35b34801561084557600080fd5b5061084e611819565b60405161085b91906145b2565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190613cb1565b6118a7565b6040516108989190614874565b60405180910390f35b3480156108ad57600080fd5b506108b661195f565b005b3480156108c457600080fd5b506108df60048036038101906108da9190613fc5565b6119e7565b005b3480156108ed57600080fd5b506108f6611a6d565b604051610903919061450e565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e9190613fc5565b611a97565b005b34801561094157600080fd5b5061094a611b1d565b60405161095791906145b2565b60405180910390f35b34801561096c57600080fd5b5061098760048036038101906109829190613fc5565b611baf565b005b34801561099557600080fd5b506109b060048036038101906109ab9190613fc5565b611c35565b005b3480156109be57600080fd5b506109d960048036038101906109d49190613df4565b611cbb565b005b6109f560048036038101906109f09190613e74565b611e3c565b005b348015610a0357600080fd5b50610a1e6004803603810190610a199190613cb1565b6120da565b005b348015610a2c57600080fd5b50610a476004803603810190610a429190613d71565b6121b1565b005b348015610a5557600080fd5b50610a5e612213565b604051610a6b9190614874565b60405180910390f35b348015610a8057600080fd5b50610a89612219565b604051610a9691906145b2565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac19190613fc5565b6122a7565b604051610ad391906145b2565b60405180910390f35b348015610ae857600080fd5b50610af1612351565b604051610afe9190614874565b60405180910390f35b348015610b1357600080fd5b50610b1c612357565b604051610b299190614874565b60405180910390f35b348015610b3e57600080fd5b50610b596004803603810190610b549190613cb1565b61235d565b604051610b669190614597565b60405180910390f35b348015610b7b57600080fd5b50610b966004803603810190610b919190613f7c565b61237d565b005b348015610ba457600080fd5b50610bbf6004803603810190610bba9190613fc5565b612413565b005b348015610bcd57600080fd5b50610be86004803603810190610be39190613fc5565b612499565b005b348015610bf657600080fd5b50610bff61251f565b604051610c0c9190614874565b60405180910390f35b348015610c2157600080fd5b50610c3c6004803603810190610c379190613cde565b612525565b604051610c499190614597565b60405180910390f35b348015610c5e57600080fd5b50610c796004803603810190610c749190613cb1565b6125b9565b005b348015610c8757600080fd5b50610ca26004803603810190610c9d9190613cb1565b612690565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d175750610d16826127a0565b5b9050919050565b610d26612882565b73ffffffffffffffffffffffffffffffffffffffff16610d44611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190614794565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b606060008054610dc690614ba3565b80601f0160208091040260200160405190810160405280929190818152602001828054610df290614ba3565b8015610e3f5780601f10610e1457610100808354040283529160200191610e3f565b820191906000526020600020905b815481529060010190602001808311610e2257829003601f168201915b5050505050905090565b6000610e548261288a565b610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90614774565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ed982611767565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f41906147f4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f69612882565b73ffffffffffffffffffffffffffffffffffffffff161480610f985750610f9781610f92612882565b612525565b5b610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce906146d4565b60405180910390fd5b610fe183836128f6565b505050565b600d5481565b6000600880549050905090565b60105481565b60145481565b611016611010612882565b826129af565b611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90614814565b60405180910390fd5b611060838383612a8d565b505050565b60115481565b600e5481565b600061107c836118a7565b82106110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b4906145d4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b61113e612882565b73ffffffffffffffffffffffffffffffffffffffff1661115c611a6d565b73ffffffffffffffffffffffffffffffffffffffff16146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990614794565b60405180910390fd5b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b61121b612882565b73ffffffffffffffffffffffffffffffffffffffff16611239611a6d565b73ffffffffffffffffffffffffffffffffffffffff161461128f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128690614794565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112b5906144f9565b60006040518083038185875af1925050503d80600081146112f2576040519150601f19603f3d011682016040523d82523d6000602084013e6112f7565b606091505b505090508061130557600080fd5b50565b611323838383604051806020016040528060008152506121b1565b505050565b60606000611335836118a7565b905060008167ffffffffffffffff81111561135357611352614d6b565b5b6040519080825280602002602001820160405280156113815781602001602082028036833780820191505090505b50905060005b828110156113cb576113998582611071565b8282815181106113ac576113ab614d3c565b5b60200260200101818152505080806113c390614c06565b915050611387565b508092505050919050565b6113de612882565b73ffffffffffffffffffffffffffffffffffffffff166113fc611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614794565b60405180910390fd5b80600d8190555050565b611464612882565b73ffffffffffffffffffffffffffffffffffffffff16611482611a6d565b73ffffffffffffffffffffffffffffffffffffffff16146114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf90614794565b60405180910390fd5b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061153d610fec565b821061157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590614854565b60405180910390fd5b6008828154811061159257611591614d3c565b5b90600052602060002001549050919050565b60175481565b6115b2612882565b73ffffffffffffffffffffffffffffffffffffffff166115d0611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90614794565b60405180910390fd5b60005b60028110156116b4576001601b600084846064811061164b5761164a614d3c565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806116ac90614c06565b915050611629565b5050565b6116c0612882565b73ffffffffffffffffffffffffffffffffffffffff166116de611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90614794565b60405180910390fd5b80600b908051906020019061174a929190613a33565b5050565b601960009054906101000a900460ff1681565b60165481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180790614714565b60405180910390fd5b80915050919050565b600b805461182690614ba3565b80601f016020809104026020016040519081016040528092919081815260200182805461185290614ba3565b801561189f5780601f106118745761010080835404028352916020019161189f565b820191906000526020600020905b81548152906001019060200180831161188257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906146f4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611967612882565b73ffffffffffffffffffffffffffffffffffffffff16611985611a6d565b73ffffffffffffffffffffffffffffffffffffffff16146119db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d290614794565b60405180910390fd5b6119e56000612ce9565b565b6119ef612882565b73ffffffffffffffffffffffffffffffffffffffff16611a0d611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a90614794565b60405180910390fd5b8060148190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a9f612882565b73ffffffffffffffffffffffffffffffffffffffff16611abd611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90614794565b60405180910390fd5b80600e8190555050565b606060018054611b2c90614ba3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5890614ba3565b8015611ba55780601f10611b7a57610100808354040283529160200191611ba5565b820191906000526020600020905b815481529060010190602001808311611b8857829003601f168201915b5050505050905090565b611bb7612882565b73ffffffffffffffffffffffffffffffffffffffff16611bd5611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614794565b60405180910390fd5b8060188190555050565b611c3d612882565b73ffffffffffffffffffffffffffffffffffffffff16611c5b611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890614794565b60405180910390fd5b8060178190555050565b611cc3612882565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890614674565b60405180910390fd5b8060056000611d3e612882565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611deb612882565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e309190614597565b60405180910390a35050565b6000611e46610fec565b9050601960009054906101000a900460ff1615611e6257600080fd5b60008211611e6f57600080fd5b600f548282611e7e91906149d8565b1115611e8957600080fd5b611e91611a6d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461209657610c8d83108015611ee05750610c8d8383611ede91906149d8565b105b80611f29575082610ec4108015611f0357508183611efe91906149d8565b610ec4105b8015611f2857506116ab83108015611f2757506116ab8284611f2591906149d8565b105b5b5b80611f72575082611810108015611f4c57508183611f4791906149d8565b611810105b8015611f715750611a6383108015611f705750611a638284611f6e91906149d8565b105b5b5b80611fbb575082611acc108015611f9557508183611f9091906149d8565b611acc105b8015611fba5750611b4383108015611fb95750611b438284611fb791906149d8565b105b5b5b611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190614834565b60405180910390fd5b60145482111561203f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612036906146b4565b60405180910390fd5b8161204984612daf565b6120539190614a5f565b341015612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90614734565b60405180910390fd5b5b60005b828110156120c9576120b68582866120b191906149d8565b612e03565b80806120c190614c06565b915050612099565b506120d48383612e21565b50505050565b6120e2612882565b73ffffffffffffffffffffffffffffffffffffffff16612100611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d90614794565b60405180910390fd5b6001601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121c26121bc612882565b836129af565b612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f890614814565b60405180910390fd5b61220d84848484612f78565b50505050565b60135481565b600c805461222690614ba3565b80601f016020809104026020016040519081016040528092919081815260200182805461225290614ba3565b801561229f5780601f106122745761010080835404028352916020019161229f565b820191906000526020600020905b81548152906001019060200180831161228257829003601f168201915b505050505081565b60606122b28261288a565b6122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e8906147d4565b60405180910390fd5b60006122fb612fd4565b9050600081511161231b5760405180602001604052806000815250612349565b8061232584613066565b600c604051602001612339939291906144c8565b6040516020818303038152906040525b915050919050565b60155481565b600f5481565b601a6020528060005260406000206000915054906101000a900460ff1681565b612385612882565b73ffffffffffffffffffffffffffffffffffffffff166123a3611a6d565b73ffffffffffffffffffffffffffffffffffffffff16146123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f090614794565b60405180910390fd5b80600c908051906020019061240f929190613a33565b5050565b61241b612882565b73ffffffffffffffffffffffffffffffffffffffff16612439611a6d565b73ffffffffffffffffffffffffffffffffffffffff161461248f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248690614794565b60405180910390fd5b8060158190555050565b6124a1612882565b73ffffffffffffffffffffffffffffffffffffffff166124bf611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c90614794565b60405180910390fd5b8060168190555050565b60185481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6125c1612882565b73ffffffffffffffffffffffffffffffffffffffff166125df611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262c90614794565b60405180910390fd5b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612698612882565b73ffffffffffffffffffffffffffffffffffffffff166126b6611a6d565b73ffffffffffffffffffffffffffffffffffffffff161461270c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270390614794565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390614614565b60405180910390fd5b61278581612ce9565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061286b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061287b575061287a826131c7565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661296983611767565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129ba8261288a565b6129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f090614694565b60405180910390fd5b6000612a0483611767565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a7357508373ffffffffffffffffffffffffffffffffffffffff16612a5b84610e49565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a845750612a838185612525565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612aad82611767565b73ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa906147b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a90614654565b60405180910390fd5b612b7e838383613231565b612b896000826128f6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bd99190614ab9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c3091906149d8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000610ec48211612dc4576015549050612dfe565b6118108211612dd7576016549050612dfe565b611acc8211612dea576017549050612dfe565b600f548211612dfd576018549050612dfe565b5b919050565b612e1d828260405180602001604052806000815250613345565b5050565b610c8d82108015612e3e5750610c8d8282612e3c91906149d8565b105b15612e5a57612e5981601054612e549190614ab9565b6133a0565b5b81610ec4108015612e7757508082612e7291906149d8565b610ec4105b8015612e9c57506116ab82108015612e9b57506116ab8183612e9991906149d8565b105b5b15612eb857612eb781601154612eb29190614ab9565b6133aa565b5b81611810108015612ed557508082612ed091906149d8565b611810105b8015612efa5750611a6382108015612ef95750611a638183612ef791906149d8565b105b5b15612f1657612f1581601254612f109190614ab9565b6133b4565b5b81611acc108015612f3357508082612f2e91906149d8565b611acc105b8015612f585750611b4382108015612f575750611b438183612f5591906149d8565b105b5b15612f7457612f7381601354612f6e9190614ab9565b6133be565b5b5050565b612f83848484612a8d565b612f8f848484846133c8565b612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc5906145f4565b60405180910390fd5b50505050565b6060600b8054612fe390614ba3565b80601f016020809104026020016040519081016040528092919081815260200182805461300f90614ba3565b801561305c5780601f106130315761010080835404028352916020019161305c565b820191906000526020600020905b81548152906001019060200180831161303f57829003601f168201915b5050505050905090565b606060008214156130ae576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131c2565b600082905060005b600082146130e05780806130c990614c06565b915050600a826130d99190614a2e565b91506130b6565b60008167ffffffffffffffff8111156130fc576130fb614d6b565b5b6040519080825280601f01601f19166020018201604052801561312e5781602001600182028036833780820191505090505b5090505b600085146131bb576001826131479190614ab9565b9150600a856131569190614c4f565b603061316291906149d8565b60f81b81838151811061317857613177614d3c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131b49190614a2e565b9450613132565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61323c83838361279b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561327f5761327a8161355f565b6132be565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146132bd576132bc83826135a8565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613301576132fc81613715565b613340565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461333f5761333e82826137e6565b5b5b505050565b61334f8383613865565b61335c60008484846133c8565b61339b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613392906145f4565b60405180910390fd5b505050565b8060108190555050565b8060118190555050565b8060128190555050565b8060138190555050565b60006133e98473ffffffffffffffffffffffffffffffffffffffff16612788565b15613552578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613412612882565b8786866040518563ffffffff1660e01b81526004016134349493929190614529565b602060405180830381600087803b15801561344e57600080fd5b505af192505050801561347f57506040513d601f19601f8201168201806040525081019061347c9190613f4f565b60015b613502573d80600081146134af576040519150601f19603f3d011682016040523d82523d6000602084013e6134b4565b606091505b506000815114156134fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f1906145f4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613557565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016135b5846118a7565b6135bf9190614ab9565b90506000600760008481526020019081526020016000205490508181146136a4576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137299190614ab9565b905060006009600084815260200190815260200160002054905060006008838154811061375957613758614d3c565b5b90600052602060002001549050806008838154811061377b5761377a614d3c565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806137ca576137c9614d0d565b5b6001900381819060005260206000200160009055905550505050565b60006137f1836118a7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138cc90614754565b60405180910390fd5b6138de8161288a565b1561391e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391590614634565b60405180910390fd5b61392a60008383613231565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461397a91906149d8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613a3f90614ba3565b90600052602060002090601f016020900481019282613a615760008555613aa8565b82601f10613a7a57805160ff1916838001178555613aa8565b82800160010185558215613aa8579182015b82811115613aa7578251825591602001919060010190613a8c565b5b509050613ab59190613ab9565b5090565b5b80821115613ad2576000816000905550600101613aba565b5090565b6000613ae9613ae4846148b4565b61488f565b90508082856020860282011115613b0357613b02614d9f565b5b60005b85811015613b335781613b198882613bc1565b845260208401935060208301925050600181019050613b06565b5050509392505050565b6000613b50613b4b846148da565b61488f565b905082815260208101848484011115613b6c57613b6b614da4565b5b613b77848285614b61565b509392505050565b6000613b92613b8d8461490b565b61488f565b905082815260208101848484011115613bae57613bad614da4565b5b613bb9848285614b61565b509392505050565b600081359050613bd08161535e565b92915050565b600082601f830112613beb57613bea614d9a565b5b6064613bf8848285613ad6565b91505092915050565b600081359050613c1081615375565b92915050565b600081359050613c258161538c565b92915050565b600081519050613c3a8161538c565b92915050565b600082601f830112613c5557613c54614d9a565b5b8135613c65848260208601613b3d565b91505092915050565b600082601f830112613c8357613c82614d9a565b5b8135613c93848260208601613b7f565b91505092915050565b600081359050613cab816153a3565b92915050565b600060208284031215613cc757613cc6614dae565b5b6000613cd584828501613bc1565b91505092915050565b60008060408385031215613cf557613cf4614dae565b5b6000613d0385828601613bc1565b9250506020613d1485828601613bc1565b9150509250929050565b600080600060608486031215613d3757613d36614dae565b5b6000613d4586828701613bc1565b9350506020613d5686828701613bc1565b9250506040613d6786828701613c9c565b9150509250925092565b60008060008060808587031215613d8b57613d8a614dae565b5b6000613d9987828801613bc1565b9450506020613daa87828801613bc1565b9350506040613dbb87828801613c9c565b925050606085013567ffffffffffffffff811115613ddc57613ddb614da9565b5b613de887828801613c40565b91505092959194509250565b60008060408385031215613e0b57613e0a614dae565b5b6000613e1985828601613bc1565b9250506020613e2a85828601613c01565b9150509250929050565b60008060408385031215613e4b57613e4a614dae565b5b6000613e5985828601613bc1565b9250506020613e6a85828601613c9c565b9150509250929050565b600080600060608486031215613e8d57613e8c614dae565b5b6000613e9b86828701613bc1565b9350506020613eac86828701613c9c565b9250506040613ebd86828701613c9c565b9150509250925092565b6000610c808284031215613ede57613edd614dae565b5b6000613eec84828501613bd6565b91505092915050565b600060208284031215613f0b57613f0a614dae565b5b6000613f1984828501613c01565b91505092915050565b600060208284031215613f3857613f37614dae565b5b6000613f4684828501613c16565b91505092915050565b600060208284031215613f6557613f64614dae565b5b6000613f7384828501613c2b565b91505092915050565b600060208284031215613f9257613f91614dae565b5b600082013567ffffffffffffffff811115613fb057613faf614da9565b5b613fbc84828501613c6e565b91505092915050565b600060208284031215613fdb57613fda614dae565b5b6000613fe984828501613c9c565b91505092915050565b6000613ffe83836144aa565b60208301905092915050565b61401381614aed565b82525050565b600061402482614961565b61402e818561498f565b93506140398361493c565b8060005b8381101561406a5781516140518882613ff2565b975061405c83614982565b92505060018101905061403d565b5085935050505092915050565b61408081614aff565b82525050565b60006140918261496c565b61409b81856149a0565b93506140ab818560208601614b70565b6140b481614db3565b840191505092915050565b60006140ca82614977565b6140d481856149bc565b93506140e4818560208601614b70565b6140ed81614db3565b840191505092915050565b600061410382614977565b61410d81856149cd565b935061411d818560208601614b70565b80840191505092915050565b6000815461413681614ba3565b61414081866149cd565b9450600182166000811461415b576001811461416c5761419f565b60ff1983168652818601935061419f565b6141758561494c565b60005b8381101561419757815481890152600182019150602081019050614178565b838801955050505b50505092915050565b60006141b5602b836149bc565b91506141c082614dc4565b604082019050919050565b60006141d86032836149bc565b91506141e382614e13565b604082019050919050565b60006141fb6026836149bc565b915061420682614e62565b604082019050919050565b600061421e601c836149bc565b915061422982614eb1565b602082019050919050565b60006142416024836149bc565b915061424c82614eda565b604082019050919050565b60006142646019836149bc565b915061426f82614f29565b602082019050919050565b6000614287602c836149bc565b915061429282614f52565b604082019050919050565b60006142aa6022836149bc565b91506142b582614fa1565b604082019050919050565b60006142cd6038836149bc565b91506142d882614ff0565b604082019050919050565b60006142f0602a836149bc565b91506142fb8261503f565b604082019050919050565b60006143136029836149bc565b915061431e8261508e565b604082019050919050565b60006143366011836149bc565b9150614341826150dd565b602082019050919050565b60006143596020836149bc565b915061436482615106565b602082019050919050565b600061437c602c836149bc565b91506143878261512f565b604082019050919050565b600061439f6020836149bc565b91506143aa8261517e565b602082019050919050565b60006143c26029836149bc565b91506143cd826151a7565b604082019050919050565b60006143e5602f836149bc565b91506143f0826151f6565b604082019050919050565b60006144086021836149bc565b915061441382615245565b604082019050919050565b600061442b6000836149b1565b915061443682615294565b600082019050919050565b600061444e6031836149bc565b915061445982615297565b604082019050919050565b60006144716008836149bc565b915061447c826152e6565b602082019050919050565b6000614494602c836149bc565b915061449f8261530f565b604082019050919050565b6144b381614b57565b82525050565b6144c281614b57565b82525050565b60006144d482866140f8565b91506144e082856140f8565b91506144ec8284614129565b9150819050949350505050565b60006145048261441e565b9150819050919050565b6000602082019050614523600083018461400a565b92915050565b600060808201905061453e600083018761400a565b61454b602083018661400a565b61455860408301856144b9565b818103606083015261456a8184614086565b905095945050505050565b6000602082019050818103600083015261458f8184614019565b905092915050565b60006020820190506145ac6000830184614077565b92915050565b600060208201905081810360008301526145cc81846140bf565b905092915050565b600060208201905081810360008301526145ed816141a8565b9050919050565b6000602082019050818103600083015261460d816141cb565b9050919050565b6000602082019050818103600083015261462d816141ee565b9050919050565b6000602082019050818103600083015261464d81614211565b9050919050565b6000602082019050818103600083015261466d81614234565b9050919050565b6000602082019050818103600083015261468d81614257565b9050919050565b600060208201905081810360008301526146ad8161427a565b9050919050565b600060208201905081810360008301526146cd8161429d565b9050919050565b600060208201905081810360008301526146ed816142c0565b9050919050565b6000602082019050818103600083015261470d816142e3565b9050919050565b6000602082019050818103600083015261472d81614306565b9050919050565b6000602082019050818103600083015261474d81614329565b9050919050565b6000602082019050818103600083015261476d8161434c565b9050919050565b6000602082019050818103600083015261478d8161436f565b9050919050565b600060208201905081810360008301526147ad81614392565b9050919050565b600060208201905081810360008301526147cd816143b5565b9050919050565b600060208201905081810360008301526147ed816143d8565b9050919050565b6000602082019050818103600083015261480d816143fb565b9050919050565b6000602082019050818103600083015261482d81614441565b9050919050565b6000602082019050818103600083015261484d81614464565b9050919050565b6000602082019050818103600083015261486d81614487565b9050919050565b600060208201905061488960008301846144b9565b92915050565b60006148996148aa565b90506148a58282614bd5565b919050565b6000604051905090565b600067ffffffffffffffff8211156148cf576148ce614d6b565b5b602082029050919050565b600067ffffffffffffffff8211156148f5576148f4614d6b565b5b6148fe82614db3565b9050602081019050919050565b600067ffffffffffffffff82111561492657614925614d6b565b5b61492f82614db3565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006149e382614b57565b91506149ee83614b57565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a2357614a22614c80565b5b828201905092915050565b6000614a3982614b57565b9150614a4483614b57565b925082614a5457614a53614caf565b5b828204905092915050565b6000614a6a82614b57565b9150614a7583614b57565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614aae57614aad614c80565b5b828202905092915050565b6000614ac482614b57565b9150614acf83614b57565b925082821015614ae257614ae1614c80565b5b828203905092915050565b6000614af882614b37565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b8e578082015181840152602081019050614b73565b83811115614b9d576000848401525b50505050565b60006002820490506001821680614bbb57607f821691505b60208210811415614bcf57614bce614cde565b5b50919050565b614bde82614db3565b810181811067ffffffffffffffff82111715614bfd57614bfc614d6b565b5b80604052505050565b6000614c1182614b57565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c4457614c43614c80565b5b600182019050919050565b6000614c5a82614b57565b9150614c6583614b57565b925082614c7557614c74614caf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e7420657863656564206d6178696d756d20616c6c6f7760008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f20706179000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7265736572766564000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61536781614aed565b811461537257600080fd5b50565b61537e81614aff565b811461538957600080fd5b50565b61539581614b0b565b81146153a057600080fd5b50565b6153ac81614b57565b81146153b757600080fd5b5056fea26469706673582212203e0dcdcf628505377d3cd1d28b258692a92f758f65c408a47be97efd3e840f0864736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c5769744c696e6b204c616e640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7769746c696e6b6c616e640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d514b704b4a5162557a464e704a6e4b705a5639675650326f72567853746f554c6a3355774173565a784371692f00000000000000000000

Deployed Bytecode

0x6080604052600436106103355760003560e01c80636352211e116101ab578063b88d4fde116100f7578063da3ef23f11610095578063df36523e1161006f578063df36523e14610bea578063e985e9c514610c15578063ed931e1714610c52578063f2fde38b14610c7b57610335565b8063da3ef23f14610b6f578063de28d29d14610b98578063df22fd6f14610bc157610335565b8063c87b56dd116100d1578063c87b56dd14610a9f578063d12da55214610adc578063d5abeb0114610b07578063d936547e14610b3257610335565b8063b88d4fde14610a20578063c43e5d8814610a49578063c668286214610a7457610335565b80638fdcf942116101645780639f093fcb1161013e5780639f093fcb14610989578063a22cb465146109b2578063b2f30e8c146109db578063b2f3e85e146109f757610335565b80638fdcf9421461090c57806395d89b41146109355780639ae0a1731461096057610335565b80636352211e146107fc5780636c0360eb1461083957806370a0823114610864578063715018a6146108a15780637f00c7a6146108b85780638da5cb5b146108e157610335565b806330b2264e116102855780634a4c560d11610223578063546857c7116101fd578063546857c71461075457806355f804b31461077d5780635c975abb146107a657806362045a96146107d157610335565b80634a4c560d146106c35780634f6ccce7146106ec578063541121f91461072957610335565b80633ccfd60b1161025f5780633ccfd60b1461062a57806342842e0e14610634578063438b63001461065d57806344a0d68a1461069a57610335565b806330b2264e1461059957806330cc7ae0146105d65780633773bf3a146105ff57610335565b806318160ddd116102f257806323b872dd116102cc57806323b872dd146104dd57806328e7f3af146105065780632a23d07d146105315780632f745c591461055c57610335565b806318160ddd1461045c5780631b1f717014610487578063239c70ae146104b257610335565b806301ffc9a71461033a57806302329a291461037757806306fdde03146103a0578063081812fc146103cb578063095ea7b31461040857806313faede614610431575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c9190613f22565b610ca4565b60405161036e9190614597565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613ef5565b610d1e565b005b3480156103ac57600080fd5b506103b5610db7565b6040516103c291906145b2565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613fc5565b610e49565b6040516103ff919061450e565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613e34565b610ece565b005b34801561043d57600080fd5b50610446610fe6565b6040516104539190614874565b60405180910390f35b34801561046857600080fd5b50610471610fec565b60405161047e9190614874565b60405180910390f35b34801561049357600080fd5b5061049c610ff9565b6040516104a99190614874565b60405180910390f35b3480156104be57600080fd5b506104c7610fff565b6040516104d49190614874565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190613d1e565b611005565b005b34801561051257600080fd5b5061051b611065565b6040516105289190614874565b60405180910390f35b34801561053d57600080fd5b5061054661106b565b6040516105539190614874565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613e34565b611071565b6040516105909190614874565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190613cb1565b611116565b6040516105cd9190614597565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613cb1565b611136565b005b34801561060b57600080fd5b5061061461120d565b6040516106219190614874565b60405180910390f35b610632611213565b005b34801561064057600080fd5b5061065b60048036038101906106569190613d1e565b611308565b005b34801561066957600080fd5b50610684600480360381019061067f9190613cb1565b611328565b6040516106919190614575565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190613fc5565b6113d6565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613cb1565b61145c565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613fc5565b611533565b6040516107209190614874565b60405180910390f35b34801561073557600080fd5b5061073e6115a4565b60405161074b9190614874565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190613ec7565b6115aa565b005b34801561078957600080fd5b506107a4600480360381019061079f9190613f7c565b6116b8565b005b3480156107b257600080fd5b506107bb61174e565b6040516107c89190614597565b60405180910390f35b3480156107dd57600080fd5b506107e6611761565b6040516107f39190614874565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613fc5565b611767565b604051610830919061450e565b60405180910390f35b34801561084557600080fd5b5061084e611819565b60405161085b91906145b2565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190613cb1565b6118a7565b6040516108989190614874565b60405180910390f35b3480156108ad57600080fd5b506108b661195f565b005b3480156108c457600080fd5b506108df60048036038101906108da9190613fc5565b6119e7565b005b3480156108ed57600080fd5b506108f6611a6d565b604051610903919061450e565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e9190613fc5565b611a97565b005b34801561094157600080fd5b5061094a611b1d565b60405161095791906145b2565b60405180910390f35b34801561096c57600080fd5b5061098760048036038101906109829190613fc5565b611baf565b005b34801561099557600080fd5b506109b060048036038101906109ab9190613fc5565b611c35565b005b3480156109be57600080fd5b506109d960048036038101906109d49190613df4565b611cbb565b005b6109f560048036038101906109f09190613e74565b611e3c565b005b348015610a0357600080fd5b50610a1e6004803603810190610a199190613cb1565b6120da565b005b348015610a2c57600080fd5b50610a476004803603810190610a429190613d71565b6121b1565b005b348015610a5557600080fd5b50610a5e612213565b604051610a6b9190614874565b60405180910390f35b348015610a8057600080fd5b50610a89612219565b604051610a9691906145b2565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac19190613fc5565b6122a7565b604051610ad391906145b2565b60405180910390f35b348015610ae857600080fd5b50610af1612351565b604051610afe9190614874565b60405180910390f35b348015610b1357600080fd5b50610b1c612357565b604051610b299190614874565b60405180910390f35b348015610b3e57600080fd5b50610b596004803603810190610b549190613cb1565b61235d565b604051610b669190614597565b60405180910390f35b348015610b7b57600080fd5b50610b966004803603810190610b919190613f7c565b61237d565b005b348015610ba457600080fd5b50610bbf6004803603810190610bba9190613fc5565b612413565b005b348015610bcd57600080fd5b50610be86004803603810190610be39190613fc5565b612499565b005b348015610bf657600080fd5b50610bff61251f565b604051610c0c9190614874565b60405180910390f35b348015610c2157600080fd5b50610c3c6004803603810190610c379190613cde565b612525565b604051610c499190614597565b60405180910390f35b348015610c5e57600080fd5b50610c796004803603810190610c749190613cb1565b6125b9565b005b348015610c8757600080fd5b50610ca26004803603810190610c9d9190613cb1565b612690565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d175750610d16826127a0565b5b9050919050565b610d26612882565b73ffffffffffffffffffffffffffffffffffffffff16610d44611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190614794565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b606060008054610dc690614ba3565b80601f0160208091040260200160405190810160405280929190818152602001828054610df290614ba3565b8015610e3f5780601f10610e1457610100808354040283529160200191610e3f565b820191906000526020600020905b815481529060010190602001808311610e2257829003601f168201915b5050505050905090565b6000610e548261288a565b610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90614774565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ed982611767565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f41906147f4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f69612882565b73ffffffffffffffffffffffffffffffffffffffff161480610f985750610f9781610f92612882565b612525565b5b610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce906146d4565b60405180910390fd5b610fe183836128f6565b505050565b600d5481565b6000600880549050905090565b60105481565b60145481565b611016611010612882565b826129af565b611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90614814565b60405180910390fd5b611060838383612a8d565b505050565b60115481565b600e5481565b600061107c836118a7565b82106110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b4906145d4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b61113e612882565b73ffffffffffffffffffffffffffffffffffffffff1661115c611a6d565b73ffffffffffffffffffffffffffffffffffffffff16146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990614794565b60405180910390fd5b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b61121b612882565b73ffffffffffffffffffffffffffffffffffffffff16611239611a6d565b73ffffffffffffffffffffffffffffffffffffffff161461128f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128690614794565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112b5906144f9565b60006040518083038185875af1925050503d80600081146112f2576040519150601f19603f3d011682016040523d82523d6000602084013e6112f7565b606091505b505090508061130557600080fd5b50565b611323838383604051806020016040528060008152506121b1565b505050565b60606000611335836118a7565b905060008167ffffffffffffffff81111561135357611352614d6b565b5b6040519080825280602002602001820160405280156113815781602001602082028036833780820191505090505b50905060005b828110156113cb576113998582611071565b8282815181106113ac576113ab614d3c565b5b60200260200101818152505080806113c390614c06565b915050611387565b508092505050919050565b6113de612882565b73ffffffffffffffffffffffffffffffffffffffff166113fc611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614794565b60405180910390fd5b80600d8190555050565b611464612882565b73ffffffffffffffffffffffffffffffffffffffff16611482611a6d565b73ffffffffffffffffffffffffffffffffffffffff16146114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf90614794565b60405180910390fd5b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061153d610fec565b821061157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590614854565b60405180910390fd5b6008828154811061159257611591614d3c565b5b90600052602060002001549050919050565b60175481565b6115b2612882565b73ffffffffffffffffffffffffffffffffffffffff166115d0611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90614794565b60405180910390fd5b60005b60028110156116b4576001601b600084846064811061164b5761164a614d3c565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806116ac90614c06565b915050611629565b5050565b6116c0612882565b73ffffffffffffffffffffffffffffffffffffffff166116de611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90614794565b60405180910390fd5b80600b908051906020019061174a929190613a33565b5050565b601960009054906101000a900460ff1681565b60165481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180790614714565b60405180910390fd5b80915050919050565b600b805461182690614ba3565b80601f016020809104026020016040519081016040528092919081815260200182805461185290614ba3565b801561189f5780601f106118745761010080835404028352916020019161189f565b820191906000526020600020905b81548152906001019060200180831161188257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906146f4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611967612882565b73ffffffffffffffffffffffffffffffffffffffff16611985611a6d565b73ffffffffffffffffffffffffffffffffffffffff16146119db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d290614794565b60405180910390fd5b6119e56000612ce9565b565b6119ef612882565b73ffffffffffffffffffffffffffffffffffffffff16611a0d611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a90614794565b60405180910390fd5b8060148190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a9f612882565b73ffffffffffffffffffffffffffffffffffffffff16611abd611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90614794565b60405180910390fd5b80600e8190555050565b606060018054611b2c90614ba3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5890614ba3565b8015611ba55780601f10611b7a57610100808354040283529160200191611ba5565b820191906000526020600020905b815481529060010190602001808311611b8857829003601f168201915b5050505050905090565b611bb7612882565b73ffffffffffffffffffffffffffffffffffffffff16611bd5611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614794565b60405180910390fd5b8060188190555050565b611c3d612882565b73ffffffffffffffffffffffffffffffffffffffff16611c5b611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890614794565b60405180910390fd5b8060178190555050565b611cc3612882565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890614674565b60405180910390fd5b8060056000611d3e612882565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611deb612882565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e309190614597565b60405180910390a35050565b6000611e46610fec565b9050601960009054906101000a900460ff1615611e6257600080fd5b60008211611e6f57600080fd5b600f548282611e7e91906149d8565b1115611e8957600080fd5b611e91611a6d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461209657610c8d83108015611ee05750610c8d8383611ede91906149d8565b105b80611f29575082610ec4108015611f0357508183611efe91906149d8565b610ec4105b8015611f2857506116ab83108015611f2757506116ab8284611f2591906149d8565b105b5b5b80611f72575082611810108015611f4c57508183611f4791906149d8565b611810105b8015611f715750611a6383108015611f705750611a638284611f6e91906149d8565b105b5b5b80611fbb575082611acc108015611f9557508183611f9091906149d8565b611acc105b8015611fba5750611b4383108015611fb95750611b438284611fb791906149d8565b105b5b5b611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190614834565b60405180910390fd5b60145482111561203f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612036906146b4565b60405180910390fd5b8161204984612daf565b6120539190614a5f565b341015612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90614734565b60405180910390fd5b5b60005b828110156120c9576120b68582866120b191906149d8565b612e03565b80806120c190614c06565b915050612099565b506120d48383612e21565b50505050565b6120e2612882565b73ffffffffffffffffffffffffffffffffffffffff16612100611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d90614794565b60405180910390fd5b6001601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121c26121bc612882565b836129af565b612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f890614814565b60405180910390fd5b61220d84848484612f78565b50505050565b60135481565b600c805461222690614ba3565b80601f016020809104026020016040519081016040528092919081815260200182805461225290614ba3565b801561229f5780601f106122745761010080835404028352916020019161229f565b820191906000526020600020905b81548152906001019060200180831161228257829003601f168201915b505050505081565b60606122b28261288a565b6122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e8906147d4565b60405180910390fd5b60006122fb612fd4565b9050600081511161231b5760405180602001604052806000815250612349565b8061232584613066565b600c604051602001612339939291906144c8565b6040516020818303038152906040525b915050919050565b60155481565b600f5481565b601a6020528060005260406000206000915054906101000a900460ff1681565b612385612882565b73ffffffffffffffffffffffffffffffffffffffff166123a3611a6d565b73ffffffffffffffffffffffffffffffffffffffff16146123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f090614794565b60405180910390fd5b80600c908051906020019061240f929190613a33565b5050565b61241b612882565b73ffffffffffffffffffffffffffffffffffffffff16612439611a6d565b73ffffffffffffffffffffffffffffffffffffffff161461248f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248690614794565b60405180910390fd5b8060158190555050565b6124a1612882565b73ffffffffffffffffffffffffffffffffffffffff166124bf611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c90614794565b60405180910390fd5b8060168190555050565b60185481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6125c1612882565b73ffffffffffffffffffffffffffffffffffffffff166125df611a6d565b73ffffffffffffffffffffffffffffffffffffffff1614612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262c90614794565b60405180910390fd5b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612698612882565b73ffffffffffffffffffffffffffffffffffffffff166126b6611a6d565b73ffffffffffffffffffffffffffffffffffffffff161461270c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270390614794565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390614614565b60405180910390fd5b61278581612ce9565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061286b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061287b575061287a826131c7565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661296983611767565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129ba8261288a565b6129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f090614694565b60405180910390fd5b6000612a0483611767565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a7357508373ffffffffffffffffffffffffffffffffffffffff16612a5b84610e49565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a845750612a838185612525565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612aad82611767565b73ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa906147b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a90614654565b60405180910390fd5b612b7e838383613231565b612b896000826128f6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bd99190614ab9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c3091906149d8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000610ec48211612dc4576015549050612dfe565b6118108211612dd7576016549050612dfe565b611acc8211612dea576017549050612dfe565b600f548211612dfd576018549050612dfe565b5b919050565b612e1d828260405180602001604052806000815250613345565b5050565b610c8d82108015612e3e5750610c8d8282612e3c91906149d8565b105b15612e5a57612e5981601054612e549190614ab9565b6133a0565b5b81610ec4108015612e7757508082612e7291906149d8565b610ec4105b8015612e9c57506116ab82108015612e9b57506116ab8183612e9991906149d8565b105b5b15612eb857612eb781601154612eb29190614ab9565b6133aa565b5b81611810108015612ed557508082612ed091906149d8565b611810105b8015612efa5750611a6382108015612ef95750611a638183612ef791906149d8565b105b5b15612f1657612f1581601254612f109190614ab9565b6133b4565b5b81611acc108015612f3357508082612f2e91906149d8565b611acc105b8015612f585750611b4382108015612f575750611b438183612f5591906149d8565b105b5b15612f7457612f7381601354612f6e9190614ab9565b6133be565b5b5050565b612f83848484612a8d565b612f8f848484846133c8565b612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc5906145f4565b60405180910390fd5b50505050565b6060600b8054612fe390614ba3565b80601f016020809104026020016040519081016040528092919081815260200182805461300f90614ba3565b801561305c5780601f106130315761010080835404028352916020019161305c565b820191906000526020600020905b81548152906001019060200180831161303f57829003601f168201915b5050505050905090565b606060008214156130ae576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131c2565b600082905060005b600082146130e05780806130c990614c06565b915050600a826130d99190614a2e565b91506130b6565b60008167ffffffffffffffff8111156130fc576130fb614d6b565b5b6040519080825280601f01601f19166020018201604052801561312e5781602001600182028036833780820191505090505b5090505b600085146131bb576001826131479190614ab9565b9150600a856131569190614c4f565b603061316291906149d8565b60f81b81838151811061317857613177614d3c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131b49190614a2e565b9450613132565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61323c83838361279b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561327f5761327a8161355f565b6132be565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146132bd576132bc83826135a8565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613301576132fc81613715565b613340565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461333f5761333e82826137e6565b5b5b505050565b61334f8383613865565b61335c60008484846133c8565b61339b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613392906145f4565b60405180910390fd5b505050565b8060108190555050565b8060118190555050565b8060128190555050565b8060138190555050565b60006133e98473ffffffffffffffffffffffffffffffffffffffff16612788565b15613552578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613412612882565b8786866040518563ffffffff1660e01b81526004016134349493929190614529565b602060405180830381600087803b15801561344e57600080fd5b505af192505050801561347f57506040513d601f19601f8201168201806040525081019061347c9190613f4f565b60015b613502573d80600081146134af576040519150601f19603f3d011682016040523d82523d6000602084013e6134b4565b606091505b506000815114156134fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f1906145f4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613557565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016135b5846118a7565b6135bf9190614ab9565b90506000600760008481526020019081526020016000205490508181146136a4576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137299190614ab9565b905060006009600084815260200190815260200160002054905060006008838154811061375957613758614d3c565b5b90600052602060002001549050806008838154811061377b5761377a614d3c565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806137ca576137c9614d0d565b5b6001900381819060005260206000200160009055905550505050565b60006137f1836118a7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138cc90614754565b60405180910390fd5b6138de8161288a565b1561391e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391590614634565b60405180910390fd5b61392a60008383613231565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461397a91906149d8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613a3f90614ba3565b90600052602060002090601f016020900481019282613a615760008555613aa8565b82601f10613a7a57805160ff1916838001178555613aa8565b82800160010185558215613aa8579182015b82811115613aa7578251825591602001919060010190613a8c565b5b509050613ab59190613ab9565b5090565b5b80821115613ad2576000816000905550600101613aba565b5090565b6000613ae9613ae4846148b4565b61488f565b90508082856020860282011115613b0357613b02614d9f565b5b60005b85811015613b335781613b198882613bc1565b845260208401935060208301925050600181019050613b06565b5050509392505050565b6000613b50613b4b846148da565b61488f565b905082815260208101848484011115613b6c57613b6b614da4565b5b613b77848285614b61565b509392505050565b6000613b92613b8d8461490b565b61488f565b905082815260208101848484011115613bae57613bad614da4565b5b613bb9848285614b61565b509392505050565b600081359050613bd08161535e565b92915050565b600082601f830112613beb57613bea614d9a565b5b6064613bf8848285613ad6565b91505092915050565b600081359050613c1081615375565b92915050565b600081359050613c258161538c565b92915050565b600081519050613c3a8161538c565b92915050565b600082601f830112613c5557613c54614d9a565b5b8135613c65848260208601613b3d565b91505092915050565b600082601f830112613c8357613c82614d9a565b5b8135613c93848260208601613b7f565b91505092915050565b600081359050613cab816153a3565b92915050565b600060208284031215613cc757613cc6614dae565b5b6000613cd584828501613bc1565b91505092915050565b60008060408385031215613cf557613cf4614dae565b5b6000613d0385828601613bc1565b9250506020613d1485828601613bc1565b9150509250929050565b600080600060608486031215613d3757613d36614dae565b5b6000613d4586828701613bc1565b9350506020613d5686828701613bc1565b9250506040613d6786828701613c9c565b9150509250925092565b60008060008060808587031215613d8b57613d8a614dae565b5b6000613d9987828801613bc1565b9450506020613daa87828801613bc1565b9350506040613dbb87828801613c9c565b925050606085013567ffffffffffffffff811115613ddc57613ddb614da9565b5b613de887828801613c40565b91505092959194509250565b60008060408385031215613e0b57613e0a614dae565b5b6000613e1985828601613bc1565b9250506020613e2a85828601613c01565b9150509250929050565b60008060408385031215613e4b57613e4a614dae565b5b6000613e5985828601613bc1565b9250506020613e6a85828601613c9c565b9150509250929050565b600080600060608486031215613e8d57613e8c614dae565b5b6000613e9b86828701613bc1565b9350506020613eac86828701613c9c565b9250506040613ebd86828701613c9c565b9150509250925092565b6000610c808284031215613ede57613edd614dae565b5b6000613eec84828501613bd6565b91505092915050565b600060208284031215613f0b57613f0a614dae565b5b6000613f1984828501613c01565b91505092915050565b600060208284031215613f3857613f37614dae565b5b6000613f4684828501613c16565b91505092915050565b600060208284031215613f6557613f64614dae565b5b6000613f7384828501613c2b565b91505092915050565b600060208284031215613f9257613f91614dae565b5b600082013567ffffffffffffffff811115613fb057613faf614da9565b5b613fbc84828501613c6e565b91505092915050565b600060208284031215613fdb57613fda614dae565b5b6000613fe984828501613c9c565b91505092915050565b6000613ffe83836144aa565b60208301905092915050565b61401381614aed565b82525050565b600061402482614961565b61402e818561498f565b93506140398361493c565b8060005b8381101561406a5781516140518882613ff2565b975061405c83614982565b92505060018101905061403d565b5085935050505092915050565b61408081614aff565b82525050565b60006140918261496c565b61409b81856149a0565b93506140ab818560208601614b70565b6140b481614db3565b840191505092915050565b60006140ca82614977565b6140d481856149bc565b93506140e4818560208601614b70565b6140ed81614db3565b840191505092915050565b600061410382614977565b61410d81856149cd565b935061411d818560208601614b70565b80840191505092915050565b6000815461413681614ba3565b61414081866149cd565b9450600182166000811461415b576001811461416c5761419f565b60ff1983168652818601935061419f565b6141758561494c565b60005b8381101561419757815481890152600182019150602081019050614178565b838801955050505b50505092915050565b60006141b5602b836149bc565b91506141c082614dc4565b604082019050919050565b60006141d86032836149bc565b91506141e382614e13565b604082019050919050565b60006141fb6026836149bc565b915061420682614e62565b604082019050919050565b600061421e601c836149bc565b915061422982614eb1565b602082019050919050565b60006142416024836149bc565b915061424c82614eda565b604082019050919050565b60006142646019836149bc565b915061426f82614f29565b602082019050919050565b6000614287602c836149bc565b915061429282614f52565b604082019050919050565b60006142aa6022836149bc565b91506142b582614fa1565b604082019050919050565b60006142cd6038836149bc565b91506142d882614ff0565b604082019050919050565b60006142f0602a836149bc565b91506142fb8261503f565b604082019050919050565b60006143136029836149bc565b915061431e8261508e565b604082019050919050565b60006143366011836149bc565b9150614341826150dd565b602082019050919050565b60006143596020836149bc565b915061436482615106565b602082019050919050565b600061437c602c836149bc565b91506143878261512f565b604082019050919050565b600061439f6020836149bc565b91506143aa8261517e565b602082019050919050565b60006143c26029836149bc565b91506143cd826151a7565b604082019050919050565b60006143e5602f836149bc565b91506143f0826151f6565b604082019050919050565b60006144086021836149bc565b915061441382615245565b604082019050919050565b600061442b6000836149b1565b915061443682615294565b600082019050919050565b600061444e6031836149bc565b915061445982615297565b604082019050919050565b60006144716008836149bc565b915061447c826152e6565b602082019050919050565b6000614494602c836149bc565b915061449f8261530f565b604082019050919050565b6144b381614b57565b82525050565b6144c281614b57565b82525050565b60006144d482866140f8565b91506144e082856140f8565b91506144ec8284614129565b9150819050949350505050565b60006145048261441e565b9150819050919050565b6000602082019050614523600083018461400a565b92915050565b600060808201905061453e600083018761400a565b61454b602083018661400a565b61455860408301856144b9565b818103606083015261456a8184614086565b905095945050505050565b6000602082019050818103600083015261458f8184614019565b905092915050565b60006020820190506145ac6000830184614077565b92915050565b600060208201905081810360008301526145cc81846140bf565b905092915050565b600060208201905081810360008301526145ed816141a8565b9050919050565b6000602082019050818103600083015261460d816141cb565b9050919050565b6000602082019050818103600083015261462d816141ee565b9050919050565b6000602082019050818103600083015261464d81614211565b9050919050565b6000602082019050818103600083015261466d81614234565b9050919050565b6000602082019050818103600083015261468d81614257565b9050919050565b600060208201905081810360008301526146ad8161427a565b9050919050565b600060208201905081810360008301526146cd8161429d565b9050919050565b600060208201905081810360008301526146ed816142c0565b9050919050565b6000602082019050818103600083015261470d816142e3565b9050919050565b6000602082019050818103600083015261472d81614306565b9050919050565b6000602082019050818103600083015261474d81614329565b9050919050565b6000602082019050818103600083015261476d8161434c565b9050919050565b6000602082019050818103600083015261478d8161436f565b9050919050565b600060208201905081810360008301526147ad81614392565b9050919050565b600060208201905081810360008301526147cd816143b5565b9050919050565b600060208201905081810360008301526147ed816143d8565b9050919050565b6000602082019050818103600083015261480d816143fb565b9050919050565b6000602082019050818103600083015261482d81614441565b9050919050565b6000602082019050818103600083015261484d81614464565b9050919050565b6000602082019050818103600083015261486d81614487565b9050919050565b600060208201905061488960008301846144b9565b92915050565b60006148996148aa565b90506148a58282614bd5565b919050565b6000604051905090565b600067ffffffffffffffff8211156148cf576148ce614d6b565b5b602082029050919050565b600067ffffffffffffffff8211156148f5576148f4614d6b565b5b6148fe82614db3565b9050602081019050919050565b600067ffffffffffffffff82111561492657614925614d6b565b5b61492f82614db3565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006149e382614b57565b91506149ee83614b57565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a2357614a22614c80565b5b828201905092915050565b6000614a3982614b57565b9150614a4483614b57565b925082614a5457614a53614caf565b5b828204905092915050565b6000614a6a82614b57565b9150614a7583614b57565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614aae57614aad614c80565b5b828202905092915050565b6000614ac482614b57565b9150614acf83614b57565b925082821015614ae257614ae1614c80565b5b828203905092915050565b6000614af882614b37565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b8e578082015181840152602081019050614b73565b83811115614b9d576000848401525b50505050565b60006002820490506001821680614bbb57607f821691505b60208210811415614bcf57614bce614cde565b5b50919050565b614bde82614db3565b810181811067ffffffffffffffff82111715614bfd57614bfc614d6b565b5b80604052505050565b6000614c1182614b57565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c4457614c43614c80565b5b600182019050919050565b6000614c5a82614b57565b9150614c6583614b57565b925082614c7557614c74614caf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e7420657863656564206d6178696d756d20616c6c6f7760008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f20706179000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7265736572766564000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61536781614aed565b811461537257600080fd5b50565b61537e81614aff565b811461538957600080fd5b50565b61539581614b0b565b81146153a057600080fd5b50565b6153ac81614b57565b81146153b757600080fd5b5056fea26469706673582212203e0dcdcf628505377d3cd1d28b258692a92f758f65c408a47be97efd3e840f0864736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c5769744c696e6b204c616e640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7769746c696e6b6c616e640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d514b704b4a5162557a464e704a6e4b705a5639675650326f72567853746f554c6a3355774173565a784371692f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): WitLink Land
Arg [1] : _symbol (string): witlinkland
Arg [2] : _initBaseURI (string): ipfs://QmQKpKJQbUzFNpJnKpZV9gVP2orVxStoULj3UwAsVZxCqi/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 5769744c696e6b204c616e640000000000000000000000000000000000000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [6] : 7769746c696e6b6c616e64000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d514b704b4a5162557a464e704a6e4b705a563967565032
Arg [9] : 6f72567853746f554c6a3355774173565a784371692f00000000000000000000


Deployed Bytecode Sourcemap

45054:7054:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38553:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51189:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25723:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27416:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26939:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45213:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39356:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45336:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45502:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28475:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45379:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45252:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38937:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45808:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51383:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45420:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51913:192;;;:::i;:::-;;28922:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49520:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50586:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51276:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39546:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45634:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51608:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50918:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45725:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45589:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25330:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45141:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24973:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4573:94;;;;;;;;;;;;;:::i;:::-;;50788:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3922:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50680:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25892:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46714:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46602:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27796:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48476:1036;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51497:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29178:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45459:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45169:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49918:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45542:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45298:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45758:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51030:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46362:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46486:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45678:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28194:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51798:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4822:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38553:300;38700:4;38757:35;38742:50;;;:11;:50;;;;:103;;;;38809:36;38833:11;38809:23;:36::i;:::-;38742:103;38722:123;;38553:300;;;:::o;51189:79::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51254:6:::1;51245;;:15;;;;;;;;;;;;;;;;;;51189:79:::0;:::o;25723:100::-;25777:13;25810:5;25803:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25723:100;:::o;27416:308::-;27537:7;27584:16;27592:7;27584;:16::i;:::-;27562:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27692:15;:24;27708:7;27692:24;;;;;;;;;;;;;;;;;;;;;27685:31;;27416:308;;;:::o;26939:411::-;27020:13;27036:23;27051:7;27036:14;:23::i;:::-;27020:39;;27084:5;27078:11;;:2;:11;;;;27070:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27178:5;27162:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27187:37;27204:5;27211:12;:10;:12::i;:::-;27187:16;:37::i;:::-;27162:62;27140:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27321:21;27330:2;27334:7;27321:8;:21::i;:::-;27009:341;26939:411;;:::o;45213:32::-;;;;:::o;39356:113::-;39417:7;39444:10;:17;;;;39437:24;;39356:113;:::o;45336:36::-;;;;:::o;45502:33::-;;;;:::o;28475:376::-;28684:41;28703:12;:10;:12::i;:::-;28717:7;28684:18;:41::i;:::-;28662:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28815:28;28825:4;28831:2;28835:7;28815:9;:28::i;:::-;28475:376;;;:::o;45379:34::-;;;;:::o;45252:39::-;;;;:::o;38937:343::-;39079:7;39134:23;39151:5;39134:16;:23::i;:::-;39126:5;:31;39104:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;39246:12;:19;39259:5;39246:19;;;;;;;;;;;;;;;:26;39266:5;39246:26;;;;;;;;;;;;39239:33;;38937:343;;;;:::o;45808:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;51383:106::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51476:5:::1;51455:11;:18;51467:5;51455:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;51383:106:::0;:::o;45420:32::-;;;;:::o;51913:192::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51970:12:::1;51996:10;51988:24;;52034:21;51988:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51969:101;;;52089:7;52081:16;;;::::0;::::1;;51958:147;51913:192::o:0;28922:185::-;29060:39;29077:4;29083:2;29087:7;29060:39;;;;;;;;;;;;:16;:39::i;:::-;28922:185;;;:::o;49520:390::-;49607:16;49641:23;49667:17;49677:6;49667:9;:17::i;:::-;49641:43;;49695:25;49737:15;49723:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49695:58;;49769:9;49764:113;49784:15;49780:1;:19;49764:113;;;49835:30;49855:6;49863:1;49835:19;:30::i;:::-;49821:8;49830:1;49821:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49801:3;;;;;:::i;:::-;;;;49764:113;;;;49894:8;49887:15;;;;49520:390;;;:::o;50586:86::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50656:8:::1;50649:4;:15;;;;50586:86:::0;:::o;51276:99::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51363:4:::1;51342:11;:18;51354:5;51342:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;51276:99:::0;:::o;39546:320::-;39666:7;39721:30;:28;:30::i;:::-;39713:5;:38;39691:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;39841:10;39852:5;39841:17;;;;;;;;:::i;:::-;;;;;;;;;;39834:24;;39546:320;;;:::o;45634:37::-;;;;:::o;51608:182::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51697:9:::1;51692:91;51716:1;51712;:5;51692:91;;;51767:4;51739:14;:25;51754:6;51761:1;51754:9;;;;;;;:::i;:::-;;;;;;51739:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;51719:3;;;;;:::i;:::-;;;;51692:91;;;;51608:182:::0;:::o;50918:104::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51003:11:::1;50993:7;:21;;;;;;;;;;;;:::i;:::-;;50918:104:::0;:::o;45725:26::-;;;;;;;;;;;;;:::o;45589:38::-;;;;:::o;25330:326::-;25447:7;25472:13;25488:7;:16;25496:7;25488:16;;;;;;;;;;;;;;;;;;;;;25472:32;;25554:1;25537:19;;:5;:19;;;;25515:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25643:5;25636:12;;;25330:326;;;:::o;45141:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24973:295::-;25090:7;25154:1;25137:19;;:5;:19;;;;25115:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25244:9;:16;25254:5;25244:16;;;;;;;;;;;;;;;;25237:23;;24973:295;;;:::o;4573:94::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4638:21:::1;4656:1;4638:9;:21::i;:::-;4573:94::o:0;50788:122::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50885:17:::1;50869:13;:33;;;;50788:122:::0;:::o;3922:87::-;3968:7;3995:6;;;;;;;;;;;3988:13;;3922:87;:::o;50680:100::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50764:8:::1;50750:11;:22;;;;50680:100:::0;:::o;25892:104::-;25948:13;25981:7;25974:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25892:104;:::o;46714:122::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46811:17:::1;46795:13;:33;;;;46714:122:::0;:::o;46602:106::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46687:13:::1;46675:9;:25;;;;46602:106:::0;:::o;27796:327::-;27943:12;:10;:12::i;:::-;27931:24;;:8;:24;;;;27923:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28043:8;27998:18;:32;28017:12;:10;:12::i;:::-;27998:32;;;;;;;;;;;;;;;:42;28031:8;27998:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28096:8;28067:48;;28082:12;:10;:12::i;:::-;28067:48;;;28106:8;28067:48;;;;;;:::i;:::-;;;;;;;;27796:327;;:::o;48476:1036::-;48575:14;48592:13;:11;:13::i;:::-;48575:30;;48625:6;;;;;;;;;;;48624:7;48616:16;;;;;;48665:1;48651:11;:15;48643:24;;;;;;48710:9;;48695:11;48686:6;:20;;;;:::i;:::-;:33;;48678:42;;;;;;48749:7;:5;:7::i;:::-;48735:21;;:10;:21;;;48731:623;;48793:4;48782:8;:15;:48;;;;;48826:4;48815:8;48801:11;:22;;;;:::i;:::-;:29;48782:48;48781:156;;;;48844:8;48837:4;:15;:48;;;;;48874:11;48863:8;:22;;;;:::i;:::-;48856:4;:29;48837:48;48836:100;;;;;48900:4;48891:8;:13;:44;;;;;48931:4;48919:11;48908:8;:22;;;;:::i;:::-;:27;48891:44;48836:100;48781:156;:258;;;;48948:8;48943:4;:13;:44;;;;;48976:11;48965:8;:22;;;;:::i;:::-;48960:4;:27;48943:44;48942:96;;;;;49002:4;48993:8;:13;:44;;;;;49033:4;49021:11;49010:8;:22;;;;:::i;:::-;:27;48993:44;48942:96;48781:258;:360;;;;49050:8;49045:4;:13;:44;;;;;49078:11;49067:8;:22;;;;:::i;:::-;49062:4;:27;49045:44;49044:96;;;;;49104:4;49095:8;:13;:44;;;;;49135:4;49123:11;49112:8;:22;;;;:::i;:::-;:27;49095:44;49044:96;48781:360;48773:381;;;;;;;;;;;;:::i;:::-;;;;;;;;;49192:13;;49177:11;:28;;49169:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;49309:11;49280:26;49297:8;49280:16;:26::i;:::-;:40;;;;:::i;:::-;49267:9;:53;;49259:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;48731:623;49369:9;49364:96;49388:11;49384:1;:15;49364:96;;;49421:27;49431:3;49446:1;49435:8;:12;;;;:::i;:::-;49421:9;:27::i;:::-;49401:3;;;;;:::i;:::-;;;;49364:96;;;;49470:34;49483:8;49492:11;49470:12;:34::i;:::-;48564:948;48476:1036;;;:::o;51497:103::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51588:4:::1;51564:14;:21;51579:5;51564:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;51497:103:::0;:::o;29178:365::-;29367:41;29386:12;:10;:12::i;:::-;29400:7;29367:18;:41::i;:::-;29345:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29496:39;29510:4;29516:2;29520:7;29529:5;29496:13;:39::i;:::-;29178:365;;;;:::o;45459:36::-;;;;:::o;45169:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49918:642::-;50036:13;50089:16;50097:7;50089;:16::i;:::-;50067:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;50193:28;50224:10;:8;:10::i;:::-;50193:41;;50296:1;50271:14;50265:28;:32;:287;;;;;;;;;;;;;;;;;50389:14;50430:18;:7;:16;:18::i;:::-;50475:13;50346:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50265:287;50245:307;;;49918:642;;;:::o;45542:40::-;;;;:::o;45298:31::-;;;;:::o;45758:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;51030:151::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51156:17:::1;51140:13;:33;;;;;;;;;;;;:::i;:::-;;51030:151:::0;:::o;46362:118::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46456:16:::1;46441:12;:31;;;;46362:118:::0;:::o;46486:110::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46574:14:::1;46561:10;:27;;;;46486:110:::0;:::o;45678:40::-;;;;:::o;28194:214::-;28336:4;28365:18;:25;28384:5;28365:25;;;;;;;;;;;;;;;:35;28391:8;28365:35;;;;;;;;;;;;;;;;;;;;;;;;;28358:42;;28194:214;;;;:::o;51798:107::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51892:5:::1;51868:14;:21;51883:5;51868:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;51798:107:::0;:::o;4822:229::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4945:1:::1;4925:22;;:8;:22;;;;4903:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5024:19;5034:8;5024:9;:19::i;:::-;4822:229:::0;:::o;5991:387::-;6051:4;6259:12;6326:7;6314:20;6306:28;;6369:1;6362:4;:8;6355:15;;;5991:387;;;:::o;37504:126::-;;;;:::o;24554:355::-;24701:4;24758:25;24743:40;;;:11;:40;;;;:105;;;;24815:33;24800:48;;;:11;:48;;;;24743:105;:158;;;;24865:36;24889:11;24865:23;:36::i;:::-;24743:158;24723:178;;24554:355;;;:::o;2699:98::-;2752:7;2779:10;2772:17;;2699:98;:::o;31090:127::-;31155:4;31207:1;31179:30;;:7;:16;31187:7;31179:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31172:37;;31090:127;;;:::o;35213:174::-;35315:2;35288:15;:24;35304:7;35288:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35371:7;35367:2;35333:46;;35342:23;35357:7;35342:14;:23::i;:::-;35333:46;;;;;;;;;;;;35213:174;;:::o;31384:452::-;31513:4;31557:16;31565:7;31557;:16::i;:::-;31535:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31656:13;31672:23;31687:7;31672:14;:23::i;:::-;31656:39;;31725:5;31714:16;;:7;:16;;;:64;;;;31771:7;31747:31;;:20;31759:7;31747:11;:20::i;:::-;:31;;;31714:64;:113;;;;31795:32;31812:5;31819:7;31795:16;:32::i;:::-;31714:113;31706:122;;;31384:452;;;;:::o;34480:615::-;34653:4;34626:31;;:23;34641:7;34626:14;:23::i;:::-;:31;;;34604:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;34759:1;34745:16;;:2;:16;;;;34737:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34815:39;34836:4;34842:2;34846:7;34815:20;:39::i;:::-;34919:29;34936:1;34940:7;34919:8;:29::i;:::-;34980:1;34961:9;:15;34971:4;34961:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35009:1;34992:9;:13;35002:2;34992:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35040:2;35021:7;:16;35029:7;35021:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35079:7;35075:2;35060:27;;35069:4;35060:27;;;;;;;;;;;;34480:615;;;:::o;5059:173::-;5115:16;5134:6;;;;;;;;;;;5115:25;;5160:8;5151:6;;:17;;;;;;;;;;;;;;;;;;5215:8;5184:40;;5205:8;5184:40;;;;;;;;;;;;5104:128;5059:173;:::o;47304:394::-;47370:13;47410:4;47399:7;:15;47396:66;;47438:12;;47431:19;;;;47396:66;47486:4;47475:7;:15;47472:64;;47514:10;;47507:17;;;;47472:64;47560:4;47549:7;:15;47546:63;;47588:9;;47581:16;;;;47546:63;47633:9;;47622:7;:20;47619:72;;47666:13;;47659:20;;;;47619:72;47304:394;;;;:::o;32178:110::-;32254:26;32264:2;32268:7;32254:26;;;;;;;;;;;;:9;:26::i;:::-;32178:110;;:::o;47704:766::-;47799:4;47788:8;:15;:48;;;;;47832:4;47821:8;47807:11;:22;;;;:::i;:::-;:29;47788:48;47785:127;;;47853:47;47888:11;47871:14;;:28;;;;:::i;:::-;47853:17;:47::i;:::-;47785:127;47933:8;47926:4;:15;:48;;;;;47963:11;47952:8;:22;;;;:::i;:::-;47945:4;:29;47926:48;47925:100;;;;;47989:4;47980:8;:13;:44;;;;;48020:4;48008:11;47997:8;:22;;;;:::i;:::-;:27;47980:44;47925:100;47922:175;;;48042:43;48073:11;48058:12;;:26;;;;:::i;:::-;48042:15;:43::i;:::-;47922:175;48116:8;48111:4;:13;:44;;;;;48144:11;48133:8;:22;;;;:::i;:::-;48128:4;:27;48111:44;48110:96;;;;;48170:4;48161:8;:13;:44;;;;;48201:4;48189:11;48178:8;:22;;;;:::i;:::-;:27;48161:44;48110:96;48107:169;;;48223:41;48252:11;48238;;:25;;;;:::i;:::-;48223:14;:41::i;:::-;48107:169;48295:8;48290:4;:13;:44;;;;;48323:11;48312:8;:22;;;;:::i;:::-;48307:4;:27;48290:44;48289:96;;;;;48349:4;48340:8;:13;:44;;;;;48380:4;48368:11;48357:8;:22;;;;:::i;:::-;:27;48340:44;48289:96;48286:177;;;48402:49;48439:11;48421:15;;:29;;;;:::i;:::-;48402:18;:49::i;:::-;48286:177;47704:766;;:::o;30425:352::-;30582:28;30592:4;30598:2;30602:7;30582:9;:28::i;:::-;30643:48;30666:4;30672:2;30676:7;30685:5;30643:22;:48::i;:::-;30621:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;30425:352;;;;:::o;46248:108::-;46308:13;46341:7;46334:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46248:108;:::o;297:723::-;353:13;583:1;574:5;:10;570:53;;;601:10;;;;;;;;;;;;;;;;;;;;;570:53;633:12;648:5;633:20;;664:14;689:78;704:1;696:4;:9;689:78;;722:8;;;;;:::i;:::-;;;;753:2;745:10;;;;;:::i;:::-;;;689:78;;;777:19;809:6;799:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;777:39;;827:154;843:1;834:5;:10;827:154;;871:1;861:11;;;;;:::i;:::-;;;938:2;930:5;:10;;;;:::i;:::-;917:2;:24;;;;:::i;:::-;904:39;;887:6;894;887:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;967:2;958:11;;;;;:::i;:::-;;;827:154;;;1005:6;991:21;;;;;297:723;;;;:::o;16356:207::-;16486:4;16530:25;16515:40;;;:11;:40;;;;16508:47;;16356:207;;;:::o;40479:589::-;40623:45;40650:4;40656:2;40660:7;40623:26;:45::i;:::-;40701:1;40685:18;;:4;:18;;;40681:187;;;40720:40;40752:7;40720:31;:40::i;:::-;40681:187;;;40790:2;40782:10;;:4;:10;;;40778:90;;40809:47;40842:4;40848:7;40809:32;:47::i;:::-;40778:90;40681:187;40896:1;40882:16;;:2;:16;;;40878:183;;;40915:45;40952:7;40915:36;:45::i;:::-;40878:183;;;40988:4;40982:10;;:2;:10;;;40978:83;;41009:40;41037:2;41041:7;41009:27;:40::i;:::-;40978:83;40878:183;40479:589;;;:::o;32515:321::-;32645:18;32651:2;32655:7;32645:5;:18::i;:::-;32696:54;32727:1;32731:2;32735:7;32744:5;32696:22;:54::i;:::-;32674:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32515:321;;;:::o;46848:112::-;46937:15;46920:14;:32;;;;46848:112;:::o;46966:104::-;47049:13;47034:12;:28;;;;46966:104;:::o;47076:100::-;47156:12;47142:11;:26;;;;47076:100;:::o;47182:116::-;47274:16;47256:15;:34;;;;47182:116;:::o;35952:980::-;36107:4;36128:15;:2;:13;;;:15::i;:::-;36124:801;;;36197:2;36181:36;;;36240:12;:10;:12::i;:::-;36275:4;36302:7;36332:5;36181:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36160:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36556:1;36539:6;:13;:18;36535:320;;;36582:108;;;;;;;;;;:::i;:::-;;;;;;;;36535:320;36805:6;36799:13;36790:6;36786:2;36782:15;36775:38;36160:710;36430:41;;;36420:51;;;:6;:51;;;;36413:58;;;;;36124:801;36909:4;36902:11;;35952:980;;;;;;;:::o;41791:164::-;41895:10;:17;;;;41868:15;:24;41884:7;41868:24;;;;;;;;;;;:44;;;;41923:10;41939:7;41923:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41791:164;:::o;42582:1002::-;42862:22;42912:1;42887:22;42904:4;42887:16;:22::i;:::-;:26;;;;:::i;:::-;42862:51;;42924:18;42945:17;:26;42963:7;42945:26;;;;;;;;;;;;42924:47;;43092:14;43078:10;:28;43074:328;;43123:19;43145:12;:18;43158:4;43145:18;;;;;;;;;;;;;;;:34;43164:14;43145:34;;;;;;;;;;;;43123:56;;43229:11;43196:12;:18;43209:4;43196:18;;;;;;;;;;;;;;;:30;43215:10;43196:30;;;;;;;;;;;:44;;;;43346:10;43313:17;:30;43331:11;43313:30;;;;;;;;;;;:43;;;;43108:294;43074:328;43498:17;:26;43516:7;43498:26;;;;;;;;;;;43491:33;;;43542:12;:18;43555:4;43542:18;;;;;;;;;;;;;;;:34;43561:14;43542:34;;;;;;;;;;;43535:41;;;42677:907;;42582:1002;;:::o;43879:1079::-;44132:22;44177:1;44157:10;:17;;;;:21;;;;:::i;:::-;44132:46;;44189:18;44210:15;:24;44226:7;44210:24;;;;;;;;;;;;44189:45;;44561:19;44583:10;44594:14;44583:26;;;;;;;;:::i;:::-;;;;;;;;;;44561:48;;44647:11;44622:10;44633;44622:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44758:10;44727:15;:28;44743:11;44727:28;;;;;;;;;;;:41;;;;44899:15;:24;44915:7;44899:24;;;;;;;;;;;44892:31;;;44934:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43950:1008;;;43879:1079;:::o;41369:221::-;41454:14;41471:20;41488:2;41471:16;:20::i;:::-;41454:37;;41529:7;41502:12;:16;41515:2;41502:16;;;;;;;;;;;;;;;:24;41519:6;41502:24;;;;;;;;;;;:34;;;;41576:6;41547:17;:26;41565:7;41547:26;;;;;;;;;;;:35;;;;41443:147;41369:221;;:::o;33172:382::-;33266:1;33252:16;;:2;:16;;;;33244:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33325:16;33333:7;33325;:16::i;:::-;33324:17;33316:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33387:45;33416:1;33420:2;33424:7;33387:20;:45::i;:::-;33462:1;33445:9;:13;33455:2;33445:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33493:2;33474:7;:16;33482:7;33474:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33538:7;33534:2;33513:33;;33530:1;33513:33;;;;;;;;;;;;33172:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;27:659:1:-;123:5;148:81;164:64;221:6;164:64;:::i;:::-;148:81;:::i;:::-;139:90;;249:5;275:6;325:3;317:4;309:6;305:17;300:3;296:27;293:36;290:143;;;344:79;;:::i;:::-;290:143;457:1;442:238;467:6;464:1;461:13;442:238;;;535:3;564:37;597:3;585:10;564:37;:::i;:::-;559:3;552:50;631:4;626:3;622:14;615:21;;665:4;660:3;656:14;649:21;;502:178;489:1;486;482:9;477:14;;442:238;;;446:14;129:557;;27:659;;;;;:::o;692:410::-;769:5;794:65;810:48;851:6;810:48;:::i;:::-;794:65;:::i;:::-;785:74;;882:6;875:5;868:21;920:4;913:5;909:16;958:3;949:6;944:3;940:16;937:25;934:112;;;965:79;;:::i;:::-;934:112;1055:41;1089:6;1084:3;1079;1055:41;:::i;:::-;775:327;692:410;;;;;:::o;1108:412::-;1186:5;1211:66;1227:49;1269:6;1227:49;:::i;:::-;1211:66;:::i;:::-;1202:75;;1300:6;1293:5;1286:21;1338:4;1331:5;1327:16;1376:3;1367:6;1362:3;1358:16;1355:25;1352:112;;;1383:79;;:::i;:::-;1352:112;1473:41;1507:6;1502:3;1497;1473:41;:::i;:::-;1192:328;1108:412;;;;;:::o;1526:139::-;1572:5;1610:6;1597:20;1588:29;;1626:33;1653:5;1626:33;:::i;:::-;1526:139;;;;:::o;1691:343::-;1762:5;1811:3;1804:4;1796:6;1792:17;1788:27;1778:122;;1819:79;;:::i;:::-;1778:122;1923:4;1945:83;2024:3;2016:6;2008;1945:83;:::i;:::-;1936:92;;1768:266;1691:343;;;;:::o;2040:133::-;2083:5;2121:6;2108:20;2099:29;;2137:30;2161:5;2137:30;:::i;:::-;2040:133;;;;:::o;2179:137::-;2224:5;2262:6;2249:20;2240:29;;2278:32;2304:5;2278:32;:::i;:::-;2179:137;;;;:::o;2322:141::-;2378:5;2409:6;2403:13;2394:22;;2425:32;2451:5;2425:32;:::i;:::-;2322:141;;;;:::o;2482:338::-;2537:5;2586:3;2579:4;2571:6;2567:17;2563:27;2553:122;;2594:79;;:::i;:::-;2553:122;2711:6;2698:20;2736:78;2810:3;2802:6;2795:4;2787:6;2783:17;2736:78;:::i;:::-;2727:87;;2543:277;2482:338;;;;:::o;2840:340::-;2896:5;2945:3;2938:4;2930:6;2926:17;2922:27;2912:122;;2953:79;;:::i;:::-;2912:122;3070:6;3057:20;3095:79;3170:3;3162:6;3155:4;3147:6;3143:17;3095:79;:::i;:::-;3086:88;;2902:278;2840:340;;;;:::o;3186:139::-;3232:5;3270:6;3257:20;3248:29;;3286:33;3313:5;3286:33;:::i;:::-;3186:139;;;;:::o;3331:329::-;3390:6;3439:2;3427:9;3418:7;3414:23;3410:32;3407:119;;;3445:79;;:::i;:::-;3407:119;3565:1;3590:53;3635:7;3626:6;3615:9;3611:22;3590:53;:::i;:::-;3580:63;;3536:117;3331:329;;;;:::o;3666:474::-;3734:6;3742;3791:2;3779:9;3770:7;3766:23;3762:32;3759:119;;;3797:79;;:::i;:::-;3759:119;3917:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3888:117;4044:2;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4015:118;3666:474;;;;;:::o;4146:619::-;4223:6;4231;4239;4288:2;4276:9;4267:7;4263:23;4259:32;4256:119;;;4294:79;;:::i;:::-;4256:119;4414:1;4439:53;4484:7;4475:6;4464:9;4460:22;4439:53;:::i;:::-;4429:63;;4385:117;4541:2;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4512:118;4669:2;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4640:118;4146:619;;;;;:::o;4771:943::-;4866:6;4874;4882;4890;4939:3;4927:9;4918:7;4914:23;4910:33;4907:120;;;4946:79;;:::i;:::-;4907:120;5066:1;5091:53;5136:7;5127:6;5116:9;5112:22;5091:53;:::i;:::-;5081:63;;5037:117;5193:2;5219:53;5264:7;5255:6;5244:9;5240:22;5219:53;:::i;:::-;5209:63;;5164:118;5321:2;5347:53;5392:7;5383:6;5372:9;5368:22;5347:53;:::i;:::-;5337:63;;5292:118;5477:2;5466:9;5462:18;5449:32;5508:18;5500:6;5497:30;5494:117;;;5530:79;;:::i;:::-;5494:117;5635:62;5689:7;5680:6;5669:9;5665:22;5635:62;:::i;:::-;5625:72;;5420:287;4771:943;;;;;;;:::o;5720:468::-;5785:6;5793;5842:2;5830:9;5821:7;5817:23;5813:32;5810:119;;;5848:79;;:::i;:::-;5810:119;5968:1;5993:53;6038:7;6029:6;6018:9;6014:22;5993:53;:::i;:::-;5983:63;;5939:117;6095:2;6121:50;6163:7;6154:6;6143:9;6139:22;6121:50;:::i;:::-;6111:60;;6066:115;5720:468;;;;;:::o;6194:474::-;6262:6;6270;6319:2;6307:9;6298:7;6294:23;6290:32;6287:119;;;6325:79;;:::i;:::-;6287:119;6445:1;6470:53;6515:7;6506:6;6495:9;6491:22;6470:53;:::i;:::-;6460:63;;6416:117;6572:2;6598:53;6643:7;6634:6;6623:9;6619:22;6598:53;:::i;:::-;6588:63;;6543:118;6194:474;;;;;:::o;6674:619::-;6751:6;6759;6767;6816:2;6804:9;6795:7;6791:23;6787:32;6784:119;;;6822:79;;:::i;:::-;6784:119;6942:1;6967:53;7012:7;7003:6;6992:9;6988:22;6967:53;:::i;:::-;6957:63;;6913:117;7069:2;7095:53;7140:7;7131:6;7120:9;7116:22;7095:53;:::i;:::-;7085:63;;7040:118;7197:2;7223:53;7268:7;7259:6;7248:9;7244:22;7223:53;:::i;:::-;7213:63;;7168:118;6674:619;;;;;:::o;7299:381::-;7383:6;7432:4;7420:9;7411:7;7407:23;7403:34;7400:121;;;7440:79;;:::i;:::-;7400:121;7560:1;7585:78;7655:7;7646:6;7635:9;7631:22;7585:78;:::i;:::-;7575:88;;7531:142;7299:381;;;;:::o;7686:323::-;7742:6;7791:2;7779:9;7770:7;7766:23;7762:32;7759:119;;;7797:79;;:::i;:::-;7759:119;7917:1;7942:50;7984:7;7975:6;7964:9;7960:22;7942:50;:::i;:::-;7932:60;;7888:114;7686:323;;;;:::o;8015:327::-;8073:6;8122:2;8110:9;8101:7;8097:23;8093:32;8090:119;;;8128:79;;:::i;:::-;8090:119;8248:1;8273:52;8317:7;8308:6;8297:9;8293:22;8273:52;:::i;:::-;8263:62;;8219:116;8015:327;;;;:::o;8348:349::-;8417:6;8466:2;8454:9;8445:7;8441:23;8437:32;8434:119;;;8472:79;;:::i;:::-;8434:119;8592:1;8617:63;8672:7;8663:6;8652:9;8648:22;8617:63;:::i;:::-;8607:73;;8563:127;8348:349;;;;:::o;8703:509::-;8772:6;8821:2;8809:9;8800:7;8796:23;8792:32;8789:119;;;8827:79;;:::i;:::-;8789:119;8975:1;8964:9;8960:17;8947:31;9005:18;8997:6;8994:30;8991:117;;;9027:79;;:::i;:::-;8991:117;9132:63;9187:7;9178:6;9167:9;9163:22;9132:63;:::i;:::-;9122:73;;8918:287;8703:509;;;;:::o;9218:329::-;9277:6;9326:2;9314:9;9305:7;9301:23;9297:32;9294:119;;;9332:79;;:::i;:::-;9294:119;9452:1;9477:53;9522:7;9513:6;9502:9;9498:22;9477:53;:::i;:::-;9467:63;;9423:117;9218:329;;;;:::o;9553:179::-;9622:10;9643:46;9685:3;9677:6;9643:46;:::i;:::-;9721:4;9716:3;9712:14;9698:28;;9553:179;;;;:::o;9738:118::-;9825:24;9843:5;9825:24;:::i;:::-;9820:3;9813:37;9738:118;;:::o;9892:732::-;10011:3;10040:54;10088:5;10040:54;:::i;:::-;10110:86;10189:6;10184:3;10110:86;:::i;:::-;10103:93;;10220:56;10270:5;10220:56;:::i;:::-;10299:7;10330:1;10315:284;10340:6;10337:1;10334:13;10315:284;;;10416:6;10410:13;10443:63;10502:3;10487:13;10443:63;:::i;:::-;10436:70;;10529:60;10582:6;10529:60;:::i;:::-;10519:70;;10375:224;10362:1;10359;10355:9;10350:14;;10315:284;;;10319:14;10615:3;10608:10;;10016:608;;;9892:732;;;;:::o;10630:109::-;10711:21;10726:5;10711:21;:::i;:::-;10706:3;10699:34;10630:109;;:::o;10745:360::-;10831:3;10859:38;10891:5;10859:38;:::i;:::-;10913:70;10976:6;10971:3;10913:70;:::i;:::-;10906:77;;10992:52;11037:6;11032:3;11025:4;11018:5;11014:16;10992:52;:::i;:::-;11069:29;11091:6;11069:29;:::i;:::-;11064:3;11060:39;11053:46;;10835:270;10745:360;;;;:::o;11111:364::-;11199:3;11227:39;11260:5;11227:39;:::i;:::-;11282:71;11346:6;11341:3;11282:71;:::i;:::-;11275:78;;11362:52;11407:6;11402:3;11395:4;11388:5;11384:16;11362:52;:::i;:::-;11439:29;11461:6;11439:29;:::i;:::-;11434:3;11430:39;11423:46;;11203:272;11111:364;;;;:::o;11481:377::-;11587:3;11615:39;11648:5;11615:39;:::i;:::-;11670:89;11752:6;11747:3;11670:89;:::i;:::-;11663:96;;11768:52;11813:6;11808:3;11801:4;11794:5;11790:16;11768:52;:::i;:::-;11845:6;11840:3;11836:16;11829:23;;11591:267;11481:377;;;;:::o;11888:845::-;11991:3;12028:5;12022:12;12057:36;12083:9;12057:36;:::i;:::-;12109:89;12191:6;12186:3;12109:89;:::i;:::-;12102:96;;12229:1;12218:9;12214:17;12245:1;12240:137;;;;12391:1;12386:341;;;;12207:520;;12240:137;12324:4;12320:9;12309;12305:25;12300:3;12293:38;12360:6;12355:3;12351:16;12344:23;;12240:137;;12386:341;12453:38;12485:5;12453:38;:::i;:::-;12513:1;12527:154;12541:6;12538:1;12535:13;12527:154;;;12615:7;12609:14;12605:1;12600:3;12596:11;12589:35;12665:1;12656:7;12652:15;12641:26;;12563:4;12560:1;12556:12;12551:17;;12527:154;;;12710:6;12705:3;12701:16;12694:23;;12393:334;;12207:520;;11995:738;;11888:845;;;;:::o;12739:366::-;12881:3;12902:67;12966:2;12961:3;12902:67;:::i;:::-;12895:74;;12978:93;13067:3;12978:93;:::i;:::-;13096:2;13091:3;13087:12;13080:19;;12739:366;;;:::o;13111:::-;13253:3;13274:67;13338:2;13333:3;13274:67;:::i;:::-;13267:74;;13350:93;13439:3;13350:93;:::i;:::-;13468:2;13463:3;13459:12;13452:19;;13111:366;;;:::o;13483:::-;13625:3;13646:67;13710:2;13705:3;13646:67;:::i;:::-;13639:74;;13722:93;13811:3;13722:93;:::i;:::-;13840:2;13835:3;13831:12;13824:19;;13483:366;;;:::o;13855:::-;13997:3;14018:67;14082:2;14077:3;14018:67;:::i;:::-;14011:74;;14094:93;14183:3;14094:93;:::i;:::-;14212:2;14207:3;14203:12;14196:19;;13855:366;;;:::o;14227:::-;14369:3;14390:67;14454:2;14449:3;14390:67;:::i;:::-;14383:74;;14466:93;14555:3;14466:93;:::i;:::-;14584:2;14579:3;14575:12;14568:19;;14227:366;;;:::o;14599:::-;14741:3;14762:67;14826:2;14821:3;14762:67;:::i;:::-;14755:74;;14838:93;14927:3;14838:93;:::i;:::-;14956:2;14951:3;14947:12;14940:19;;14599:366;;;:::o;14971:::-;15113:3;15134:67;15198:2;15193:3;15134:67;:::i;:::-;15127:74;;15210:93;15299:3;15210:93;:::i;:::-;15328:2;15323:3;15319:12;15312:19;;14971:366;;;:::o;15343:::-;15485:3;15506:67;15570:2;15565:3;15506:67;:::i;:::-;15499:74;;15582:93;15671:3;15582:93;:::i;:::-;15700:2;15695:3;15691:12;15684:19;;15343:366;;;:::o;15715:::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:::-;16229:3;16250:67;16314:2;16309:3;16250:67;:::i;:::-;16243:74;;16326:93;16415:3;16326:93;:::i;:::-;16444:2;16439:3;16435:12;16428:19;;16087:366;;;:::o;16459:::-;16601:3;16622:67;16686:2;16681:3;16622:67;:::i;:::-;16615:74;;16698:93;16787:3;16698:93;:::i;:::-;16816:2;16811:3;16807:12;16800:19;;16459:366;;;:::o;16831:::-;16973:3;16994:67;17058:2;17053:3;16994:67;:::i;:::-;16987:74;;17070:93;17159:3;17070:93;:::i;:::-;17188:2;17183:3;17179:12;17172:19;;16831:366;;;:::o;17203:::-;17345:3;17366:67;17430:2;17425:3;17366:67;:::i;:::-;17359:74;;17442:93;17531:3;17442:93;:::i;:::-;17560:2;17555:3;17551:12;17544:19;;17203:366;;;:::o;17575:::-;17717:3;17738:67;17802:2;17797:3;17738:67;:::i;:::-;17731:74;;17814:93;17903:3;17814:93;:::i;:::-;17932:2;17927:3;17923:12;17916:19;;17575:366;;;:::o;17947:::-;18089:3;18110:67;18174:2;18169:3;18110:67;:::i;:::-;18103:74;;18186:93;18275:3;18186:93;:::i;:::-;18304:2;18299:3;18295:12;18288:19;;17947:366;;;:::o;18319:::-;18461:3;18482:67;18546:2;18541:3;18482:67;:::i;:::-;18475:74;;18558:93;18647:3;18558:93;:::i;:::-;18676:2;18671:3;18667:12;18660:19;;18319:366;;;:::o;18691:::-;18833:3;18854:67;18918:2;18913:3;18854:67;:::i;:::-;18847:74;;18930:93;19019:3;18930:93;:::i;:::-;19048:2;19043:3;19039:12;19032:19;;18691:366;;;:::o;19063:::-;19205:3;19226:67;19290:2;19285:3;19226:67;:::i;:::-;19219:74;;19302:93;19391:3;19302:93;:::i;:::-;19420:2;19415:3;19411:12;19404:19;;19063:366;;;:::o;19435:398::-;19594:3;19615:83;19696:1;19691:3;19615:83;:::i;:::-;19608:90;;19707:93;19796:3;19707:93;:::i;:::-;19825:1;19820:3;19816:11;19809:18;;19435:398;;;:::o;19839:366::-;19981:3;20002:67;20066:2;20061:3;20002:67;:::i;:::-;19995:74;;20078:93;20167:3;20078:93;:::i;:::-;20196:2;20191:3;20187:12;20180:19;;19839:366;;;:::o;20211:365::-;20353:3;20374:66;20438:1;20433:3;20374:66;:::i;:::-;20367:73;;20449:93;20538:3;20449:93;:::i;:::-;20567:2;20562:3;20558:12;20551:19;;20211:365;;;:::o;20582:366::-;20724:3;20745:67;20809:2;20804:3;20745:67;:::i;:::-;20738:74;;20821:93;20910:3;20821:93;:::i;:::-;20939:2;20934:3;20930:12;20923:19;;20582:366;;;:::o;20954:108::-;21031:24;21049:5;21031:24;:::i;:::-;21026:3;21019:37;20954:108;;:::o;21068:118::-;21155:24;21173:5;21155:24;:::i;:::-;21150:3;21143:37;21068:118;;:::o;21192:589::-;21417:3;21439:95;21530:3;21521:6;21439:95;:::i;:::-;21432:102;;21551:95;21642:3;21633:6;21551:95;:::i;:::-;21544:102;;21663:92;21751:3;21742:6;21663:92;:::i;:::-;21656:99;;21772:3;21765:10;;21192:589;;;;;;:::o;21787:379::-;21971:3;21993:147;22136:3;21993:147;:::i;:::-;21986:154;;22157:3;22150:10;;21787:379;;;:::o;22172:222::-;22265:4;22303:2;22292:9;22288:18;22280:26;;22316:71;22384:1;22373:9;22369:17;22360:6;22316:71;:::i;:::-;22172:222;;;;:::o;22400:640::-;22595:4;22633:3;22622:9;22618:19;22610:27;;22647:71;22715:1;22704:9;22700:17;22691:6;22647:71;:::i;:::-;22728:72;22796:2;22785:9;22781:18;22772:6;22728:72;:::i;:::-;22810;22878:2;22867:9;22863:18;22854:6;22810:72;:::i;:::-;22929:9;22923:4;22919:20;22914:2;22903:9;22899:18;22892:48;22957:76;23028:4;23019:6;22957:76;:::i;:::-;22949:84;;22400:640;;;;;;;:::o;23046:373::-;23189:4;23227:2;23216:9;23212:18;23204:26;;23276:9;23270:4;23266:20;23262:1;23251:9;23247:17;23240:47;23304:108;23407:4;23398:6;23304:108;:::i;:::-;23296:116;;23046:373;;;;:::o;23425:210::-;23512:4;23550:2;23539:9;23535:18;23527:26;;23563:65;23625:1;23614:9;23610:17;23601:6;23563:65;:::i;:::-;23425:210;;;;:::o;23641:313::-;23754:4;23792:2;23781:9;23777:18;23769:26;;23841:9;23835:4;23831:20;23827:1;23816:9;23812:17;23805:47;23869:78;23942:4;23933:6;23869:78;:::i;:::-;23861:86;;23641:313;;;;:::o;23960:419::-;24126:4;24164:2;24153:9;24149:18;24141:26;;24213:9;24207:4;24203:20;24199:1;24188:9;24184:17;24177:47;24241:131;24367:4;24241:131;:::i;:::-;24233:139;;23960:419;;;:::o;24385:::-;24551:4;24589:2;24578:9;24574:18;24566:26;;24638:9;24632:4;24628:20;24624:1;24613:9;24609:17;24602:47;24666:131;24792:4;24666:131;:::i;:::-;24658:139;;24385:419;;;:::o;24810:::-;24976:4;25014:2;25003:9;24999:18;24991:26;;25063:9;25057:4;25053:20;25049:1;25038:9;25034:17;25027:47;25091:131;25217:4;25091:131;:::i;:::-;25083:139;;24810:419;;;:::o;25235:::-;25401:4;25439:2;25428:9;25424:18;25416:26;;25488:9;25482:4;25478:20;25474:1;25463:9;25459:17;25452:47;25516:131;25642:4;25516:131;:::i;:::-;25508:139;;25235:419;;;:::o;25660:::-;25826:4;25864:2;25853:9;25849:18;25841:26;;25913:9;25907:4;25903:20;25899:1;25888:9;25884:17;25877:47;25941:131;26067:4;25941:131;:::i;:::-;25933:139;;25660:419;;;:::o;26085:::-;26251:4;26289:2;26278:9;26274:18;26266:26;;26338:9;26332:4;26328:20;26324:1;26313:9;26309:17;26302:47;26366:131;26492:4;26366:131;:::i;:::-;26358:139;;26085:419;;;:::o;26510:::-;26676:4;26714:2;26703:9;26699:18;26691:26;;26763:9;26757:4;26753:20;26749:1;26738:9;26734:17;26727:47;26791:131;26917:4;26791:131;:::i;:::-;26783:139;;26510:419;;;:::o;26935:::-;27101:4;27139:2;27128:9;27124:18;27116:26;;27188:9;27182:4;27178:20;27174:1;27163:9;27159:17;27152:47;27216:131;27342:4;27216:131;:::i;:::-;27208:139;;26935:419;;;:::o;27360:::-;27526:4;27564:2;27553:9;27549:18;27541:26;;27613:9;27607:4;27603:20;27599:1;27588:9;27584:17;27577:47;27641:131;27767:4;27641:131;:::i;:::-;27633:139;;27360:419;;;:::o;27785:::-;27951:4;27989:2;27978:9;27974:18;27966:26;;28038:9;28032:4;28028:20;28024:1;28013:9;28009:17;28002:47;28066:131;28192:4;28066:131;:::i;:::-;28058:139;;27785:419;;;:::o;28210:::-;28376:4;28414:2;28403:9;28399:18;28391:26;;28463:9;28457:4;28453:20;28449:1;28438:9;28434:17;28427:47;28491:131;28617:4;28491:131;:::i;:::-;28483:139;;28210:419;;;:::o;28635:::-;28801:4;28839:2;28828:9;28824:18;28816:26;;28888:9;28882:4;28878:20;28874:1;28863:9;28859:17;28852:47;28916:131;29042:4;28916:131;:::i;:::-;28908:139;;28635:419;;;:::o;29060:::-;29226:4;29264:2;29253:9;29249:18;29241:26;;29313:9;29307:4;29303:20;29299:1;29288:9;29284:17;29277:47;29341:131;29467:4;29341:131;:::i;:::-;29333:139;;29060:419;;;:::o;29485:::-;29651:4;29689:2;29678:9;29674:18;29666:26;;29738:9;29732:4;29728:20;29724:1;29713:9;29709:17;29702:47;29766:131;29892:4;29766:131;:::i;:::-;29758:139;;29485:419;;;:::o;29910:::-;30076:4;30114:2;30103:9;30099:18;30091:26;;30163:9;30157:4;30153:20;30149:1;30138:9;30134:17;30127:47;30191:131;30317:4;30191:131;:::i;:::-;30183:139;;29910:419;;;:::o;30335:::-;30501:4;30539:2;30528:9;30524:18;30516:26;;30588:9;30582:4;30578:20;30574:1;30563:9;30559:17;30552:47;30616:131;30742:4;30616:131;:::i;:::-;30608:139;;30335:419;;;:::o;30760:::-;30926:4;30964:2;30953:9;30949:18;30941:26;;31013:9;31007:4;31003:20;30999:1;30988:9;30984:17;30977:47;31041:131;31167:4;31041:131;:::i;:::-;31033:139;;30760:419;;;:::o;31185:::-;31351:4;31389:2;31378:9;31374:18;31366:26;;31438:9;31432:4;31428:20;31424:1;31413:9;31409:17;31402:47;31466:131;31592:4;31466:131;:::i;:::-;31458:139;;31185:419;;;:::o;31610:::-;31776:4;31814:2;31803:9;31799:18;31791:26;;31863:9;31857:4;31853:20;31849:1;31838:9;31834:17;31827:47;31891:131;32017:4;31891:131;:::i;:::-;31883:139;;31610:419;;;:::o;32035:::-;32201:4;32239:2;32228:9;32224:18;32216:26;;32288:9;32282:4;32278:20;32274:1;32263:9;32259:17;32252:47;32316:131;32442:4;32316:131;:::i;:::-;32308:139;;32035:419;;;:::o;32460:::-;32626:4;32664:2;32653:9;32649:18;32641:26;;32713:9;32707:4;32703:20;32699:1;32688:9;32684:17;32677:47;32741:131;32867:4;32741:131;:::i;:::-;32733:139;;32460:419;;;:::o;32885:222::-;32978:4;33016:2;33005:9;33001:18;32993:26;;33029:71;33097:1;33086:9;33082:17;33073:6;33029:71;:::i;:::-;32885:222;;;;:::o;33113:129::-;33147:6;33174:20;;:::i;:::-;33164:30;;33203:33;33231:4;33223:6;33203:33;:::i;:::-;33113:129;;;:::o;33248:75::-;33281:6;33314:2;33308:9;33298:19;;33248:75;:::o;33329:251::-;33406:4;33496:18;33488:6;33485:30;33482:56;;;33518:18;;:::i;:::-;33482:56;33568:4;33560:6;33556:17;33548:25;;33329:251;;;:::o;33586:307::-;33647:4;33737:18;33729:6;33726:30;33723:56;;;33759:18;;:::i;:::-;33723:56;33797:29;33819:6;33797:29;:::i;:::-;33789:37;;33881:4;33875;33871:15;33863:23;;33586:307;;;:::o;33899:308::-;33961:4;34051:18;34043:6;34040:30;34037:56;;;34073:18;;:::i;:::-;34037:56;34111:29;34133:6;34111:29;:::i;:::-;34103:37;;34195:4;34189;34185:15;34177:23;;33899:308;;;:::o;34213:132::-;34280:4;34303:3;34295:11;;34333:4;34328:3;34324:14;34316:22;;34213:132;;;:::o;34351:141::-;34400:4;34423:3;34415:11;;34446:3;34443:1;34436:14;34480:4;34477:1;34467:18;34459:26;;34351:141;;;:::o;34498:114::-;34565:6;34599:5;34593:12;34583:22;;34498:114;;;:::o;34618:98::-;34669:6;34703:5;34697:12;34687:22;;34618:98;;;:::o;34722:99::-;34774:6;34808:5;34802:12;34792:22;;34722:99;;;:::o;34827:113::-;34897:4;34929;34924:3;34920:14;34912:22;;34827:113;;;:::o;34946:184::-;35045:11;35079:6;35074:3;35067:19;35119:4;35114:3;35110:14;35095:29;;34946:184;;;;:::o;35136:168::-;35219:11;35253:6;35248:3;35241:19;35293:4;35288:3;35284:14;35269:29;;35136:168;;;;:::o;35310:147::-;35411:11;35448:3;35433:18;;35310:147;;;;:::o;35463:169::-;35547:11;35581:6;35576:3;35569:19;35621:4;35616:3;35612:14;35597:29;;35463:169;;;;:::o;35638:148::-;35740:11;35777:3;35762:18;;35638:148;;;;:::o;35792:305::-;35832:3;35851:20;35869:1;35851:20;:::i;:::-;35846:25;;35885:20;35903:1;35885:20;:::i;:::-;35880:25;;36039:1;35971:66;35967:74;35964:1;35961:81;35958:107;;;36045:18;;:::i;:::-;35958:107;36089:1;36086;36082:9;36075:16;;35792:305;;;;:::o;36103:185::-;36143:1;36160:20;36178:1;36160:20;:::i;:::-;36155:25;;36194:20;36212:1;36194:20;:::i;:::-;36189:25;;36233:1;36223:35;;36238:18;;:::i;:::-;36223:35;36280:1;36277;36273:9;36268:14;;36103:185;;;;:::o;36294:348::-;36334:7;36357:20;36375:1;36357:20;:::i;:::-;36352:25;;36391:20;36409:1;36391:20;:::i;:::-;36386:25;;36579:1;36511:66;36507:74;36504:1;36501:81;36496:1;36489:9;36482:17;36478:105;36475:131;;;36586:18;;:::i;:::-;36475:131;36634:1;36631;36627:9;36616:20;;36294:348;;;;:::o;36648:191::-;36688:4;36708:20;36726:1;36708:20;:::i;:::-;36703:25;;36742:20;36760:1;36742:20;:::i;:::-;36737:25;;36781:1;36778;36775:8;36772:34;;;36786:18;;:::i;:::-;36772:34;36831:1;36828;36824:9;36816:17;;36648:191;;;;:::o;36845:96::-;36882:7;36911:24;36929:5;36911:24;:::i;:::-;36900:35;;36845:96;;;:::o;36947:90::-;36981:7;37024:5;37017:13;37010:21;36999:32;;36947:90;;;:::o;37043:149::-;37079:7;37119:66;37112:5;37108:78;37097:89;;37043:149;;;:::o;37198:126::-;37235:7;37275:42;37268:5;37264:54;37253:65;;37198:126;;;:::o;37330:77::-;37367:7;37396:5;37385:16;;37330:77;;;:::o;37413:154::-;37497:6;37492:3;37487;37474:30;37559:1;37550:6;37545:3;37541:16;37534:27;37413:154;;;:::o;37573:307::-;37641:1;37651:113;37665:6;37662:1;37659:13;37651:113;;;37750:1;37745:3;37741:11;37735:18;37731:1;37726:3;37722:11;37715:39;37687:2;37684:1;37680:10;37675:15;;37651:113;;;37782:6;37779:1;37776:13;37773:101;;;37862:1;37853:6;37848:3;37844:16;37837:27;37773:101;37622:258;37573:307;;;:::o;37886:320::-;37930:6;37967:1;37961:4;37957:12;37947:22;;38014:1;38008:4;38004:12;38035:18;38025:81;;38091:4;38083:6;38079:17;38069:27;;38025:81;38153:2;38145:6;38142:14;38122:18;38119:38;38116:84;;;38172:18;;:::i;:::-;38116:84;37937:269;37886:320;;;:::o;38212:281::-;38295:27;38317:4;38295:27;:::i;:::-;38287:6;38283:40;38425:6;38413:10;38410:22;38389:18;38377:10;38374:34;38371:62;38368:88;;;38436:18;;:::i;:::-;38368:88;38476:10;38472:2;38465:22;38255:238;38212:281;;:::o;38499:233::-;38538:3;38561:24;38579:5;38561:24;:::i;:::-;38552:33;;38607:66;38600:5;38597:77;38594:103;;;38677:18;;:::i;:::-;38594:103;38724:1;38717:5;38713:13;38706:20;;38499:233;;;:::o;38738:176::-;38770:1;38787:20;38805:1;38787:20;:::i;:::-;38782:25;;38821:20;38839:1;38821:20;:::i;:::-;38816:25;;38860:1;38850:35;;38865:18;;:::i;:::-;38850:35;38906:1;38903;38899:9;38894:14;;38738:176;;;;:::o;38920:180::-;38968:77;38965:1;38958:88;39065:4;39062:1;39055:15;39089:4;39086:1;39079:15;39106:180;39154:77;39151:1;39144:88;39251:4;39248:1;39241:15;39275:4;39272:1;39265:15;39292:180;39340:77;39337:1;39330:88;39437:4;39434:1;39427:15;39461:4;39458:1;39451:15;39478:180;39526:77;39523:1;39516:88;39623:4;39620:1;39613:15;39647:4;39644:1;39637:15;39664:180;39712:77;39709:1;39702:88;39809:4;39806:1;39799:15;39833:4;39830:1;39823:15;39850:180;39898:77;39895:1;39888:88;39995:4;39992:1;39985:15;40019:4;40016:1;40009:15;40036:117;40145:1;40142;40135:12;40159:117;40268:1;40265;40258:12;40282:117;40391:1;40388;40381:12;40405:117;40514:1;40511;40504:12;40528:117;40637:1;40634;40627:12;40651:102;40692:6;40743:2;40739:7;40734:2;40727:5;40723:14;40719:28;40709:38;;40651:102;;;:::o;40759:230::-;40899:34;40895:1;40887:6;40883:14;40876:58;40968:13;40963:2;40955:6;40951:15;40944:38;40759:230;:::o;40995:237::-;41135:34;41131:1;41123:6;41119:14;41112:58;41204:20;41199:2;41191:6;41187:15;41180:45;40995:237;:::o;41238:225::-;41378:34;41374:1;41366:6;41362:14;41355:58;41447:8;41442:2;41434:6;41430:15;41423:33;41238:225;:::o;41469:178::-;41609:30;41605:1;41597:6;41593:14;41586:54;41469:178;:::o;41653:223::-;41793:34;41789:1;41781:6;41777:14;41770:58;41862:6;41857:2;41849:6;41845:15;41838:31;41653:223;:::o;41882:175::-;42022:27;42018:1;42010:6;42006:14;41999:51;41882:175;:::o;42063:231::-;42203:34;42199:1;42191:6;42187:14;42180:58;42272:14;42267:2;42259:6;42255:15;42248:39;42063:231;:::o;42300:221::-;42440:34;42436:1;42428:6;42424:14;42417:58;42509:4;42504:2;42496:6;42492:15;42485:29;42300:221;:::o;42527:243::-;42667:34;42663:1;42655:6;42651:14;42644:58;42736:26;42731:2;42723:6;42719:15;42712:51;42527:243;:::o;42776:229::-;42916:34;42912:1;42904:6;42900:14;42893:58;42985:12;42980:2;42972:6;42968:15;42961:37;42776:229;:::o;43011:228::-;43151:34;43147:1;43139:6;43135:14;43128:58;43220:11;43215:2;43207:6;43203:15;43196:36;43011:228;:::o;43245:167::-;43385:19;43381:1;43373:6;43369:14;43362:43;43245:167;:::o;43418:182::-;43558:34;43554:1;43546:6;43542:14;43535:58;43418:182;:::o;43606:231::-;43746:34;43742:1;43734:6;43730:14;43723:58;43815:14;43810:2;43802:6;43798:15;43791:39;43606:231;:::o;43843:182::-;43983:34;43979:1;43971:6;43967:14;43960:58;43843:182;:::o;44031:228::-;44171:34;44167:1;44159:6;44155:14;44148:58;44240:11;44235:2;44227:6;44223:15;44216:36;44031:228;:::o;44265:234::-;44405:34;44401:1;44393:6;44389:14;44382:58;44474:17;44469:2;44461:6;44457:15;44450:42;44265:234;:::o;44505:220::-;44645:34;44641:1;44633:6;44629:14;44622:58;44714:3;44709:2;44701:6;44697:15;44690:28;44505:220;:::o;44731:114::-;;:::o;44851:236::-;44991:34;44987:1;44979:6;44975:14;44968:58;45060:19;45055:2;45047:6;45043:15;45036:44;44851:236;:::o;45093:158::-;45233:10;45229:1;45221:6;45217:14;45210:34;45093:158;:::o;45257:231::-;45397:34;45393:1;45385:6;45381:14;45374:58;45466:14;45461:2;45453:6;45449:15;45442:39;45257:231;:::o;45494:122::-;45567:24;45585:5;45567:24;:::i;:::-;45560:5;45557:35;45547:63;;45606:1;45603;45596:12;45547:63;45494:122;:::o;45622:116::-;45692:21;45707:5;45692:21;:::i;:::-;45685:5;45682:32;45672:60;;45728:1;45725;45718:12;45672:60;45622:116;:::o;45744:120::-;45816:23;45833:5;45816:23;:::i;:::-;45809:5;45806:34;45796:62;;45854:1;45851;45844:12;45796:62;45744:120;:::o;45870:122::-;45943:24;45961:5;45943:24;:::i;:::-;45936:5;45933:35;45923:63;;45982:1;45979;45972:12;45923:63;45870:122;:::o

Swarm Source

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