ETH Price: $3,452.36 (-1.15%)
Gas: 13 Gwei

Token

SQUADTS Bronze Sai (SBS)
 

Overview

Max Total Supply

21 SBS

Holders

21

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SBS
0x327555b0eeaede911208fc3c18b66c57923b84b6
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:
SquadtsSai

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-30
*/

// SPDX-License-Identifier: MIT


// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts v4.4.0 (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 {
        _setApprovalForAll(_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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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


// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (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() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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


// File: contracts/SquadtsSai.sol
pragma solidity ^0.8.21;

contract SquadtsSai is ERC721, Ownable {
    using Strings for uint256;

    string private _metaDataURL = "";
    bool public isMintActive = true;

    uint256 constant TOKEN_IDS_STARTS_AT = 1;
    uint256 constant TOKEN_MIN = 6001;
    uint256 constant TOKEN_MAX = 7000;
    uint256 tokenCount = 0;

    address constant contractAddress = 0xEEAF63F35B7c365AFf27015A9AA5d6e4b734962C;

    mapping(uint256 => bool) public tokenClaimed;
    mapping(address => bool) public walletClaimed;

    // add "metaDataURL" to our constructor
    constructor(
        string memory name,
        string memory symbol,
        string memory metaDataURL
    ) ERC721(name, symbol) {
        setMetaDataURL(metaDataURL);
    }

    // Getters & Setters
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return _metaDataURL;
    }
    function setMetaDataURL(string memory value) public onlyOwner {
        _metaDataURL = value;
    }
    function setMintActive(bool value) external onlyOwner {
        isMintActive = value;
    }
    function totalSupply() public view returns (uint256) {
        return tokenCount;
    }

    // Minting
    function mint(uint256 tokenId) external {
        require(isMintActive, "Minting is inactive");
        require(tokenId >= TOKEN_MIN, "Token is out of range");
        require(tokenId <= TOKEN_MAX, "Token is out of range");
        require(!tokenClaimed[tokenId], "Token already claimed");
        require(!walletClaimed[msg.sender], "Wallet already claimed");
        require(ERC721(contractAddress).ownerOf(tokenId) == msg.sender, "Wallet does not own token");
        uint256 supply = totalSupply();
        tokenClaimed[tokenId] = true;
        walletClaimed[msg.sender] = true;
        tokenCount += 1;
        _safeMint(msg.sender, TOKEN_IDS_STARTS_AT + supply);
    }
    function gift(address to) external onlyOwner {
        uint256 supply = totalSupply();
        walletClaimed[to] = true;
        tokenCount += 1;
        _safeMint(to, TOKEN_IDS_STARTS_AT + supply);
    }

    // Withdraw
    function withdraw() external payable onlyOwner {
        uint256 balance = address(this).balance;
        (bool success, ) = payable(msg.sender).call{value: balance}("");
        require(success, "Transfer failed");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"metaDataURL","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","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","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":"isMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"value","type":"string"}],"name":"setMetaDataURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"walletClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405260405180602001604052805f81525060079081620000239190620004cf565b50600160085f6101000a81548160ff0219169083151502179055505f6009553480156200004e575f80fd5b5060405162003f8838038062003f8883398181016040528101906200007491906200070b565b8282815f9081620000869190620004cf565b508060019081620000989190620004cf565b505050620000bb620000af620000d560201b60201c565b620000dc60201b60201c565b620000cc816200019f60201b60201c565b5050506200083f565b5f33905090565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001af620000d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620001d56200024360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200022e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000225906200081f565b60405180910390fd5b80600790816200023f9190620004cf565b5050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620002e757607f821691505b602082108103620002fd57620002fc620002a2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620003617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000324565b6200036d868362000324565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003b7620003b1620003ab8462000385565b6200038e565b62000385565b9050919050565b5f819050919050565b620003d28362000397565b620003ea620003e182620003be565b84845462000330565b825550505050565b5f90565b62000400620003f2565b6200040d818484620003c7565b505050565b5b818110156200043457620004285f82620003f6565b60018101905062000413565b5050565b601f82111562000483576200044d8162000303565b620004588462000315565b8101602085101562000468578190505b62000480620004778562000315565b83018262000412565b50505b505050565b5f82821c905092915050565b5f620004a55f198460080262000488565b1980831691505092915050565b5f620004bf838362000494565b9150826002028217905092915050565b620004da826200026b565b67ffffffffffffffff811115620004f657620004f562000275565b5b620005028254620002cf565b6200050f82828562000438565b5f60209050601f83116001811462000545575f841562000530578287015190505b6200053c8582620004b2565b865550620005ab565b601f198416620005558662000303565b5f5b828110156200057e5784890151825560018201915060208501945060208101905062000557565b868310156200059e57848901516200059a601f89168262000494565b8355505b6001600288020188555050505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b620005e782620005cc565b810181811067ffffffffffffffff8211171562000609576200060862000275565b5b80604052505050565b5f6200061d620005b3565b90506200062b8282620005dc565b919050565b5f67ffffffffffffffff8211156200064d576200064c62000275565b5b6200065882620005cc565b9050602081019050919050565b5f5b838110156200068457808201518184015260208101905062000667565b5f8484015250505050565b5f620006a56200069f8462000630565b62000612565b905082815260208101848484011115620006c457620006c3620005c8565b5b620006d184828562000665565b509392505050565b5f82601f830112620006f057620006ef620005c4565b5b8151620007028482602086016200068f565b91505092915050565b5f805f60608486031215620007255762000724620005bc565b5b5f84015167ffffffffffffffff811115620007455762000744620005c0565b5b6200075386828701620006d9565b935050602084015167ffffffffffffffff811115620007775762000776620005c0565b5b6200078586828701620006d9565b925050604084015167ffffffffffffffff811115620007a957620007a8620005c0565b5b620007b786828701620006d9565b9150509250925092565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000807602083620007c1565b91506200081482620007d1565b602082019050919050565b5f6020820190508181035f8301526200083881620007f9565b9050919050565b61373b806200084d5f395ff3fe608060405260043610610165575f3560e01c8063715018a6116100d0578063b88d4fde11610089578063cbfc4bce11610063578063cbfc4bce14610517578063e985e9c51461053f578063ee1cc9441461057b578063f2fde38b146105a357610165565b8063b88d4fde14610477578063c25d8f4d1461049f578063c87b56dd146104db57610165565b8063715018a6146103955780638da5cb5b146103ab57806395d89b41146103d55780639d7b9a6c146103ff578063a0712d6814610427578063a22cb4651461044f57610165565b806336ee1d8d1161012257806336ee1d8d146102855780633ccfd60b146102c157806342842e0e146102cb5780635b92ac0d146102f35780636352211e1461031d57806370a082311461035957610165565b806301ffc9a71461016957806306fdde03146101a5578063081812fc146101cf578063095ea7b31461020b57806318160ddd1461023357806323b872dd1461025d575b5f80fd5b348015610174575f80fd5b5061018f600480360381019061018a919061216b565b6105cb565b60405161019c91906121b0565b60405180910390f35b3480156101b0575f80fd5b506101b96106ac565b6040516101c69190612253565b60405180910390f35b3480156101da575f80fd5b506101f560048036038101906101f091906122a6565b61073b565b6040516102029190612310565b60405180910390f35b348015610216575f80fd5b50610231600480360381019061022c9190612353565b6107bc565b005b34801561023e575f80fd5b506102476108d2565b60405161025491906123a0565b60405180910390f35b348015610268575f80fd5b50610283600480360381019061027e91906123b9565b6108db565b005b348015610290575f80fd5b506102ab60048036038101906102a691906122a6565b61093b565b6040516102b891906121b0565b60405180910390f35b6102c9610958565b005b3480156102d6575f80fd5b506102f160048036038101906102ec91906123b9565b610a84565b005b3480156102fe575f80fd5b50610307610aa3565b60405161031491906121b0565b60405180910390f35b348015610328575f80fd5b50610343600480360381019061033e91906122a6565b610ab5565b6040516103509190612310565b60405180910390f35b348015610364575f80fd5b5061037f600480360381019061037a9190612409565b610b61565b60405161038c91906123a0565b60405180910390f35b3480156103a0575f80fd5b506103a9610c15565b005b3480156103b6575f80fd5b506103bf610c9c565b6040516103cc9190612310565b60405180910390f35b3480156103e0575f80fd5b506103e9610cc4565b6040516103f69190612253565b60405180910390f35b34801561040a575f80fd5b5061042560048036038101906104209190612560565b610d54565b005b348015610432575f80fd5b5061044d600480360381019061044891906122a6565b610de3565b005b34801561045a575f80fd5b50610475600480360381019061047091906125d1565b611158565b005b348015610482575f80fd5b5061049d600480360381019061049891906126ad565b61116e565b005b3480156104aa575f80fd5b506104c560048036038101906104c09190612409565b6111d0565b6040516104d291906121b0565b60405180910390f35b3480156104e6575f80fd5b5061050160048036038101906104fc91906122a6565b6111ed565b60405161050e9190612253565b60405180910390f35b348015610522575f80fd5b5061053d60048036038101906105389190612409565b6112c7565b005b34801561054a575f80fd5b506105656004803603810190610560919061272d565b6113d6565b60405161057291906121b0565b60405180910390f35b348015610586575f80fd5b506105a1600480360381019061059c919061276b565b611464565b005b3480156105ae575f80fd5b506105c960048036038101906105c49190612409565b6114fc565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061069557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106a557506106a4826115f2565b5b9050919050565b60605f80546106ba906127c3565b80601f01602080910402602001604051908101604052809291908181526020018280546106e6906127c3565b80156107315780601f1061070857610100808354040283529160200191610731565b820191905f5260205f20905b81548152906001019060200180831161071457829003601f168201915b5050505050905090565b5f6107458261165b565b610784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b90612863565b60405180910390fd5b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f6107c682610ab5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d906128f1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108556116c3565b73ffffffffffffffffffffffffffffffffffffffff16148061088457506108838161087e6116c3565b6113d6565b5b6108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba9061297f565b60405180910390fd5b6108cd83836116ca565b505050565b5f600954905090565b6108ec6108e66116c3565b82611780565b61092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290612a0d565b60405180910390fd5b61093683838361185c565b505050565b600a602052805f5260405f205f915054906101000a900460ff1681565b6109606116c3565b73ffffffffffffffffffffffffffffffffffffffff1661097e610c9c565b73ffffffffffffffffffffffffffffffffffffffff16146109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb90612a75565b60405180910390fd5b5f4790505f3373ffffffffffffffffffffffffffffffffffffffff16826040516109fd90612ac0565b5f6040518083038185875af1925050503d805f8114610a37576040519150601f19603f3d011682016040523d82523d5f602084013e610a3c565b606091505b5050905080610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7790612b1e565b60405180910390fd5b5050565b610a9e83838360405180602001604052805f81525061116e565b505050565b60085f9054906101000a900460ff1681565b5f8060025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90612bac565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790612c3a565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c1d6116c3565b73ffffffffffffffffffffffffffffffffffffffff16610c3b610c9c565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8890612a75565b60405180910390fd5b610c9a5f611aac565b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610cd3906127c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cff906127c3565b8015610d4a5780601f10610d2157610100808354040283529160200191610d4a565b820191905f5260205f20905b815481529060010190602001808311610d2d57829003601f168201915b5050505050905090565b610d5c6116c3565b73ffffffffffffffffffffffffffffffffffffffff16610d7a610c9c565b73ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790612a75565b60405180910390fd5b8060079081610ddf9190612df5565b5050565b60085f9054906101000a900460ff16610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2890612f0e565b60405180910390fd5b611771811015610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90612f76565b60405180910390fd5b611b58811115610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290612f76565b60405180910390fd5b600a5f8281526020019081526020015f205f9054906101000a900460ff1615610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090612fde565b60405180910390fd5b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90613046565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1673eeaf63f35b7c365aff27015a9aa5d6e4b734962c73ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161100791906123a0565b602060405180830381865afa158015611022573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110469190613078565b73ffffffffffffffffffffffffffffffffffffffff161461109c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611093906130ed565b60405180910390fd5b5f6110a56108d2565b90506001600a5f8481526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f8282546111379190613138565b925050819055506111543382600161114f9190613138565b611b6f565b5050565b61116a6111636116c3565b8383611b8c565b5050565b61117f6111796116c3565b83611780565b6111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590612a0d565b60405180910390fd5b6111ca84848484611cf3565b50505050565b600b602052805f5260405f205f915054906101000a900460ff1681565b60606111f88261165b565b611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e906131db565b60405180910390fd5b60078054611244906127c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611270906127c3565b80156112bb5780601f10611292576101008083540402835291602001916112bb565b820191905f5260205f20905b81548152906001019060200180831161129e57829003601f168201915b50505050509050919050565b6112cf6116c3565b73ffffffffffffffffffffffffffffffffffffffff166112ed610c9c565b73ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90612a75565b60405180910390fd5b5f61134c6108d2565b90506001600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f8282546113b59190613138565b925050819055506113d2828260016113cd9190613138565b611b6f565b5050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61146c6116c3565b73ffffffffffffffffffffffffffffffffffffffff1661148a610c9c565b73ffffffffffffffffffffffffffffffffffffffff16146114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790612a75565b60405180910390fd5b8060085f6101000a81548160ff02191690831515021790555050565b6115046116c3565b73ffffffffffffffffffffffffffffffffffffffff16611522610c9c565b73ffffffffffffffffffffffffffffffffffffffff1614611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90612a75565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613269565b60405180910390fd5b6115ef81611aac565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f33905090565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661173a83610ab5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f61178a8261165b565b6117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c0906132f7565b60405180910390fd5b5f6117d383610ab5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061184257508373ffffffffffffffffffffffffffffffffffffffff1661182a8461073b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611853575061185281856113d6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661187c82610ab5565b73ffffffffffffffffffffffffffffffffffffffff16146118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990613385565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790613413565b60405180910390fd5b61194b838383611d4f565b6119555f826116ca565b600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119a29190613431565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119f69190613138565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b88828260405180602001604052805f815250611d54565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906134ae565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ce691906121b0565b60405180910390a3505050565b611cfe84848461185c565b611d0a84848484611dae565b611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d409061353c565b60405180910390fd5b50505050565b505050565b611d5e8383611f30565b611d6a5f848484611dae565b611da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da09061353c565b60405180910390fd5b505050565b5f611dce8473ffffffffffffffffffffffffffffffffffffffff166120f4565b15611f23578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611df76116c3565b8786866040518563ffffffff1660e01b8152600401611e1994939291906135ac565b6020604051808303815f875af1925050508015611e5457506040513d601f19601f82011682018060405250810190611e51919061360a565b60015b611ed3573d805f8114611e82576040519150601f19603f3d011682016040523d82523d5f602084013e611e87565b606091505b505f815103611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec29061353c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f28565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f959061367f565b60405180910390fd5b611fa78161165b565b15611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde906136e7565b60405180910390fd5b611ff25f8383611d4f565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461203f9190613138565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61214a81612116565b8114612154575f80fd5b50565b5f8135905061216581612141565b92915050565b5f602082840312156121805761217f61210e565b5b5f61218d84828501612157565b91505092915050565b5f8115159050919050565b6121aa81612196565b82525050565b5f6020820190506121c35f8301846121a1565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156122005780820151818401526020810190506121e5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612225826121c9565b61222f81856121d3565b935061223f8185602086016121e3565b6122488161220b565b840191505092915050565b5f6020820190508181035f83015261226b818461221b565b905092915050565b5f819050919050565b61228581612273565b811461228f575f80fd5b50565b5f813590506122a08161227c565b92915050565b5f602082840312156122bb576122ba61210e565b5b5f6122c884828501612292565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6122fa826122d1565b9050919050565b61230a816122f0565b82525050565b5f6020820190506123235f830184612301565b92915050565b612332816122f0565b811461233c575f80fd5b50565b5f8135905061234d81612329565b92915050565b5f80604083850312156123695761236861210e565b5b5f6123768582860161233f565b925050602061238785828601612292565b9150509250929050565b61239a81612273565b82525050565b5f6020820190506123b35f830184612391565b92915050565b5f805f606084860312156123d0576123cf61210e565b5b5f6123dd8682870161233f565b93505060206123ee8682870161233f565b92505060406123ff86828701612292565b9150509250925092565b5f6020828403121561241e5761241d61210e565b5b5f61242b8482850161233f565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6124728261220b565b810181811067ffffffffffffffff821117156124915761249061243c565b5b80604052505050565b5f6124a3612105565b90506124af8282612469565b919050565b5f67ffffffffffffffff8211156124ce576124cd61243c565b5b6124d78261220b565b9050602081019050919050565b828183375f83830152505050565b5f6125046124ff846124b4565b61249a565b9050828152602081018484840111156125205761251f612438565b5b61252b8482856124e4565b509392505050565b5f82601f83011261254757612546612434565b5b81356125578482602086016124f2565b91505092915050565b5f602082840312156125755761257461210e565b5b5f82013567ffffffffffffffff81111561259257612591612112565b5b61259e84828501612533565b91505092915050565b6125b081612196565b81146125ba575f80fd5b50565b5f813590506125cb816125a7565b92915050565b5f80604083850312156125e7576125e661210e565b5b5f6125f48582860161233f565b9250506020612605858286016125bd565b9150509250929050565b5f67ffffffffffffffff8211156126295761262861243c565b5b6126328261220b565b9050602081019050919050565b5f61265161264c8461260f565b61249a565b90508281526020810184848401111561266d5761266c612438565b5b6126788482856124e4565b509392505050565b5f82601f83011261269457612693612434565b5b81356126a484826020860161263f565b91505092915050565b5f805f80608085870312156126c5576126c461210e565b5b5f6126d28782880161233f565b94505060206126e38782880161233f565b93505060406126f487828801612292565b925050606085013567ffffffffffffffff81111561271557612714612112565b5b61272187828801612680565b91505092959194509250565b5f80604083850312156127435761274261210e565b5b5f6127508582860161233f565b92505060206127618582860161233f565b9150509250929050565b5f602082840312156127805761277f61210e565b5b5f61278d848285016125bd565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806127da57607f821691505b6020821081036127ed576127ec612796565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f61284d602c836121d3565b9150612858826127f3565b604082019050919050565b5f6020820190508181035f83015261287a81612841565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f6128db6021836121d3565b91506128e682612881565b604082019050919050565b5f6020820190508181035f830152612908816128cf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f775f8201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b5f6129696038836121d3565b91506129748261290f565b604082019050919050565b5f6020820190508181035f8301526129968161295d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f5f8201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b5f6129f76031836121d3565b9150612a028261299d565b604082019050919050565b5f6020820190508181035f830152612a24816129eb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612a5f6020836121d3565b9150612a6a82612a2b565b602082019050919050565b5f6020820190508181035f830152612a8c81612a53565b9050919050565b5f81905092915050565b50565b5f612aab5f83612a93565b9150612ab682612a9d565b5f82019050919050565b5f612aca82612aa0565b9150819050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f612b08600f836121d3565b9150612b1382612ad4565b602082019050919050565b5f6020820190508181035f830152612b3581612afc565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e65786973745f8201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b5f612b966029836121d3565b9150612ba182612b3c565b604082019050919050565b5f6020820190508181035f830152612bc381612b8a565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f612c24602a836121d3565b9150612c2f82612bca565b604082019050919050565b5f6020820190508181035f830152612c5181612c18565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612cb47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612c79565b612cbe8683612c79565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612cf9612cf4612cef84612273565b612cd6565b612273565b9050919050565b5f819050919050565b612d1283612cdf565b612d26612d1e82612d00565b848454612c85565b825550505050565b5f90565b612d3a612d2e565b612d45818484612d09565b505050565b5b81811015612d6857612d5d5f82612d32565b600181019050612d4b565b5050565b601f821115612dad57612d7e81612c58565b612d8784612c6a565b81016020851015612d96578190505b612daa612da285612c6a565b830182612d4a565b50505b505050565b5f82821c905092915050565b5f612dcd5f1984600802612db2565b1980831691505092915050565b5f612de58383612dbe565b9150826002028217905092915050565b612dfe826121c9565b67ffffffffffffffff811115612e1757612e1661243c565b5b612e2182546127c3565b612e2c828285612d6c565b5f60209050601f831160018114612e5d575f8415612e4b578287015190505b612e558582612dda565b865550612ebc565b601f198416612e6b86612c58565b5f5b82811015612e9257848901518255600182019150602085019450602081019050612e6d565b86831015612eaf5784890151612eab601f891682612dbe565b8355505b6001600288020188555050505b505050505050565b7f4d696e74696e6720697320696e616374697665000000000000000000000000005f82015250565b5f612ef86013836121d3565b9150612f0382612ec4565b602082019050919050565b5f6020820190508181035f830152612f2581612eec565b9050919050565b7f546f6b656e206973206f7574206f662072616e676500000000000000000000005f82015250565b5f612f606015836121d3565b9150612f6b82612f2c565b602082019050919050565b5f6020820190508181035f830152612f8d81612f54565b9050919050565b7f546f6b656e20616c726561647920636c61696d656400000000000000000000005f82015250565b5f612fc86015836121d3565b9150612fd382612f94565b602082019050919050565b5f6020820190508181035f830152612ff581612fbc565b9050919050565b7f57616c6c657420616c726561647920636c61696d6564000000000000000000005f82015250565b5f6130306016836121d3565b915061303b82612ffc565b602082019050919050565b5f6020820190508181035f83015261305d81613024565b9050919050565b5f8151905061307281612329565b92915050565b5f6020828403121561308d5761308c61210e565b5b5f61309a84828501613064565b91505092915050565b7f57616c6c657420646f6573206e6f74206f776e20746f6b656e000000000000005f82015250565b5f6130d76019836121d3565b91506130e2826130a3565b602082019050919050565b5f6020820190508181035f830152613104816130cb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61314282612273565b915061314d83612273565b92508282019050808211156131655761316461310b565b5b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f6131c5602f836121d3565b91506131d08261316b565b604082019050919050565b5f6020820190508181035f8301526131f2816131b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6132536026836121d3565b915061325e826131f9565b604082019050919050565b5f6020820190508181035f83015261328081613247565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f6132e1602c836121d3565b91506132ec82613287565b604082019050919050565b5f6020820190508181035f83015261330e816132d5565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e207468617420695f8201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b5f61336f6029836121d3565b915061337a82613315565b604082019050919050565b5f6020820190508181035f83015261339c81613363565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6133fd6024836121d3565b9150613408826133a3565b604082019050919050565b5f6020820190508181035f83015261342a816133f1565b9050919050565b5f61343b82612273565b915061344683612273565b925082820390508181111561345e5761345d61310b565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f6134986019836121d3565b91506134a382613464565b602082019050919050565b5f6020820190508181035f8301526134c58161348c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f6135266032836121d3565b9150613531826134cc565b604082019050919050565b5f6020820190508181035f8301526135538161351a565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f61357e8261355a565b6135888185613564565b93506135988185602086016121e3565b6135a18161220b565b840191505092915050565b5f6080820190506135bf5f830187612301565b6135cc6020830186612301565b6135d96040830185612391565b81810360608301526135eb8184613574565b905095945050505050565b5f8151905061360481612141565b92915050565b5f6020828403121561361f5761361e61210e565b5b5f61362c848285016135f6565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f6136696020836121d3565b915061367482613635565b602082019050919050565b5f6020820190508181035f8301526136968161365d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f6136d1601c836121d3565b91506136dc8261369d565b602082019050919050565b5f6020820190508181035f8301526136fe816136c5565b905091905056fea264697066735822122042a2546f664bc26857799386496356656ffe9cf3060ae8f7ca25a757d2b6e25164736f6c63430008150033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012535155414454532042726f6e7a6520536169000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035342530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d664376554c43567865354d597072504357457a4a6e7070646f39514c5369644354644445375a654c7279396f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610165575f3560e01c8063715018a6116100d0578063b88d4fde11610089578063cbfc4bce11610063578063cbfc4bce14610517578063e985e9c51461053f578063ee1cc9441461057b578063f2fde38b146105a357610165565b8063b88d4fde14610477578063c25d8f4d1461049f578063c87b56dd146104db57610165565b8063715018a6146103955780638da5cb5b146103ab57806395d89b41146103d55780639d7b9a6c146103ff578063a0712d6814610427578063a22cb4651461044f57610165565b806336ee1d8d1161012257806336ee1d8d146102855780633ccfd60b146102c157806342842e0e146102cb5780635b92ac0d146102f35780636352211e1461031d57806370a082311461035957610165565b806301ffc9a71461016957806306fdde03146101a5578063081812fc146101cf578063095ea7b31461020b57806318160ddd1461023357806323b872dd1461025d575b5f80fd5b348015610174575f80fd5b5061018f600480360381019061018a919061216b565b6105cb565b60405161019c91906121b0565b60405180910390f35b3480156101b0575f80fd5b506101b96106ac565b6040516101c69190612253565b60405180910390f35b3480156101da575f80fd5b506101f560048036038101906101f091906122a6565b61073b565b6040516102029190612310565b60405180910390f35b348015610216575f80fd5b50610231600480360381019061022c9190612353565b6107bc565b005b34801561023e575f80fd5b506102476108d2565b60405161025491906123a0565b60405180910390f35b348015610268575f80fd5b50610283600480360381019061027e91906123b9565b6108db565b005b348015610290575f80fd5b506102ab60048036038101906102a691906122a6565b61093b565b6040516102b891906121b0565b60405180910390f35b6102c9610958565b005b3480156102d6575f80fd5b506102f160048036038101906102ec91906123b9565b610a84565b005b3480156102fe575f80fd5b50610307610aa3565b60405161031491906121b0565b60405180910390f35b348015610328575f80fd5b50610343600480360381019061033e91906122a6565b610ab5565b6040516103509190612310565b60405180910390f35b348015610364575f80fd5b5061037f600480360381019061037a9190612409565b610b61565b60405161038c91906123a0565b60405180910390f35b3480156103a0575f80fd5b506103a9610c15565b005b3480156103b6575f80fd5b506103bf610c9c565b6040516103cc9190612310565b60405180910390f35b3480156103e0575f80fd5b506103e9610cc4565b6040516103f69190612253565b60405180910390f35b34801561040a575f80fd5b5061042560048036038101906104209190612560565b610d54565b005b348015610432575f80fd5b5061044d600480360381019061044891906122a6565b610de3565b005b34801561045a575f80fd5b50610475600480360381019061047091906125d1565b611158565b005b348015610482575f80fd5b5061049d600480360381019061049891906126ad565b61116e565b005b3480156104aa575f80fd5b506104c560048036038101906104c09190612409565b6111d0565b6040516104d291906121b0565b60405180910390f35b3480156104e6575f80fd5b5061050160048036038101906104fc91906122a6565b6111ed565b60405161050e9190612253565b60405180910390f35b348015610522575f80fd5b5061053d60048036038101906105389190612409565b6112c7565b005b34801561054a575f80fd5b506105656004803603810190610560919061272d565b6113d6565b60405161057291906121b0565b60405180910390f35b348015610586575f80fd5b506105a1600480360381019061059c919061276b565b611464565b005b3480156105ae575f80fd5b506105c960048036038101906105c49190612409565b6114fc565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061069557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106a557506106a4826115f2565b5b9050919050565b60605f80546106ba906127c3565b80601f01602080910402602001604051908101604052809291908181526020018280546106e6906127c3565b80156107315780601f1061070857610100808354040283529160200191610731565b820191905f5260205f20905b81548152906001019060200180831161071457829003601f168201915b5050505050905090565b5f6107458261165b565b610784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b90612863565b60405180910390fd5b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f6107c682610ab5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d906128f1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108556116c3565b73ffffffffffffffffffffffffffffffffffffffff16148061088457506108838161087e6116c3565b6113d6565b5b6108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba9061297f565b60405180910390fd5b6108cd83836116ca565b505050565b5f600954905090565b6108ec6108e66116c3565b82611780565b61092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290612a0d565b60405180910390fd5b61093683838361185c565b505050565b600a602052805f5260405f205f915054906101000a900460ff1681565b6109606116c3565b73ffffffffffffffffffffffffffffffffffffffff1661097e610c9c565b73ffffffffffffffffffffffffffffffffffffffff16146109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb90612a75565b60405180910390fd5b5f4790505f3373ffffffffffffffffffffffffffffffffffffffff16826040516109fd90612ac0565b5f6040518083038185875af1925050503d805f8114610a37576040519150601f19603f3d011682016040523d82523d5f602084013e610a3c565b606091505b5050905080610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7790612b1e565b60405180910390fd5b5050565b610a9e83838360405180602001604052805f81525061116e565b505050565b60085f9054906101000a900460ff1681565b5f8060025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90612bac565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790612c3a565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c1d6116c3565b73ffffffffffffffffffffffffffffffffffffffff16610c3b610c9c565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8890612a75565b60405180910390fd5b610c9a5f611aac565b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610cd3906127c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cff906127c3565b8015610d4a5780601f10610d2157610100808354040283529160200191610d4a565b820191905f5260205f20905b815481529060010190602001808311610d2d57829003601f168201915b5050505050905090565b610d5c6116c3565b73ffffffffffffffffffffffffffffffffffffffff16610d7a610c9c565b73ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790612a75565b60405180910390fd5b8060079081610ddf9190612df5565b5050565b60085f9054906101000a900460ff16610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2890612f0e565b60405180910390fd5b611771811015610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90612f76565b60405180910390fd5b611b58811115610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290612f76565b60405180910390fd5b600a5f8281526020019081526020015f205f9054906101000a900460ff1615610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090612fde565b60405180910390fd5b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90613046565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1673eeaf63f35b7c365aff27015a9aa5d6e4b734962c73ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161100791906123a0565b602060405180830381865afa158015611022573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110469190613078565b73ffffffffffffffffffffffffffffffffffffffff161461109c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611093906130ed565b60405180910390fd5b5f6110a56108d2565b90506001600a5f8481526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f8282546111379190613138565b925050819055506111543382600161114f9190613138565b611b6f565b5050565b61116a6111636116c3565b8383611b8c565b5050565b61117f6111796116c3565b83611780565b6111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590612a0d565b60405180910390fd5b6111ca84848484611cf3565b50505050565b600b602052805f5260405f205f915054906101000a900460ff1681565b60606111f88261165b565b611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e906131db565b60405180910390fd5b60078054611244906127c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611270906127c3565b80156112bb5780601f10611292576101008083540402835291602001916112bb565b820191905f5260205f20905b81548152906001019060200180831161129e57829003601f168201915b50505050509050919050565b6112cf6116c3565b73ffffffffffffffffffffffffffffffffffffffff166112ed610c9c565b73ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90612a75565b60405180910390fd5b5f61134c6108d2565b90506001600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f8282546113b59190613138565b925050819055506113d2828260016113cd9190613138565b611b6f565b5050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61146c6116c3565b73ffffffffffffffffffffffffffffffffffffffff1661148a610c9c565b73ffffffffffffffffffffffffffffffffffffffff16146114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790612a75565b60405180910390fd5b8060085f6101000a81548160ff02191690831515021790555050565b6115046116c3565b73ffffffffffffffffffffffffffffffffffffffff16611522610c9c565b73ffffffffffffffffffffffffffffffffffffffff1614611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90612a75565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613269565b60405180910390fd5b6115ef81611aac565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f33905090565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661173a83610ab5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f61178a8261165b565b6117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c0906132f7565b60405180910390fd5b5f6117d383610ab5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061184257508373ffffffffffffffffffffffffffffffffffffffff1661182a8461073b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611853575061185281856113d6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661187c82610ab5565b73ffffffffffffffffffffffffffffffffffffffff16146118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990613385565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790613413565b60405180910390fd5b61194b838383611d4f565b6119555f826116ca565b600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119a29190613431565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119f69190613138565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b88828260405180602001604052805f815250611d54565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906134ae565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ce691906121b0565b60405180910390a3505050565b611cfe84848461185c565b611d0a84848484611dae565b611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d409061353c565b60405180910390fd5b50505050565b505050565b611d5e8383611f30565b611d6a5f848484611dae565b611da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da09061353c565b60405180910390fd5b505050565b5f611dce8473ffffffffffffffffffffffffffffffffffffffff166120f4565b15611f23578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611df76116c3565b8786866040518563ffffffff1660e01b8152600401611e1994939291906135ac565b6020604051808303815f875af1925050508015611e5457506040513d601f19601f82011682018060405250810190611e51919061360a565b60015b611ed3573d805f8114611e82576040519150601f19603f3d011682016040523d82523d5f602084013e611e87565b606091505b505f815103611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec29061353c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f28565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f959061367f565b60405180910390fd5b611fa78161165b565b15611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde906136e7565b60405180910390fd5b611ff25f8383611d4f565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461203f9190613138565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61214a81612116565b8114612154575f80fd5b50565b5f8135905061216581612141565b92915050565b5f602082840312156121805761217f61210e565b5b5f61218d84828501612157565b91505092915050565b5f8115159050919050565b6121aa81612196565b82525050565b5f6020820190506121c35f8301846121a1565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156122005780820151818401526020810190506121e5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612225826121c9565b61222f81856121d3565b935061223f8185602086016121e3565b6122488161220b565b840191505092915050565b5f6020820190508181035f83015261226b818461221b565b905092915050565b5f819050919050565b61228581612273565b811461228f575f80fd5b50565b5f813590506122a08161227c565b92915050565b5f602082840312156122bb576122ba61210e565b5b5f6122c884828501612292565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6122fa826122d1565b9050919050565b61230a816122f0565b82525050565b5f6020820190506123235f830184612301565b92915050565b612332816122f0565b811461233c575f80fd5b50565b5f8135905061234d81612329565b92915050565b5f80604083850312156123695761236861210e565b5b5f6123768582860161233f565b925050602061238785828601612292565b9150509250929050565b61239a81612273565b82525050565b5f6020820190506123b35f830184612391565b92915050565b5f805f606084860312156123d0576123cf61210e565b5b5f6123dd8682870161233f565b93505060206123ee8682870161233f565b92505060406123ff86828701612292565b9150509250925092565b5f6020828403121561241e5761241d61210e565b5b5f61242b8482850161233f565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6124728261220b565b810181811067ffffffffffffffff821117156124915761249061243c565b5b80604052505050565b5f6124a3612105565b90506124af8282612469565b919050565b5f67ffffffffffffffff8211156124ce576124cd61243c565b5b6124d78261220b565b9050602081019050919050565b828183375f83830152505050565b5f6125046124ff846124b4565b61249a565b9050828152602081018484840111156125205761251f612438565b5b61252b8482856124e4565b509392505050565b5f82601f83011261254757612546612434565b5b81356125578482602086016124f2565b91505092915050565b5f602082840312156125755761257461210e565b5b5f82013567ffffffffffffffff81111561259257612591612112565b5b61259e84828501612533565b91505092915050565b6125b081612196565b81146125ba575f80fd5b50565b5f813590506125cb816125a7565b92915050565b5f80604083850312156125e7576125e661210e565b5b5f6125f48582860161233f565b9250506020612605858286016125bd565b9150509250929050565b5f67ffffffffffffffff8211156126295761262861243c565b5b6126328261220b565b9050602081019050919050565b5f61265161264c8461260f565b61249a565b90508281526020810184848401111561266d5761266c612438565b5b6126788482856124e4565b509392505050565b5f82601f83011261269457612693612434565b5b81356126a484826020860161263f565b91505092915050565b5f805f80608085870312156126c5576126c461210e565b5b5f6126d28782880161233f565b94505060206126e38782880161233f565b93505060406126f487828801612292565b925050606085013567ffffffffffffffff81111561271557612714612112565b5b61272187828801612680565b91505092959194509250565b5f80604083850312156127435761274261210e565b5b5f6127508582860161233f565b92505060206127618582860161233f565b9150509250929050565b5f602082840312156127805761277f61210e565b5b5f61278d848285016125bd565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806127da57607f821691505b6020821081036127ed576127ec612796565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f61284d602c836121d3565b9150612858826127f3565b604082019050919050565b5f6020820190508181035f83015261287a81612841565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f6128db6021836121d3565b91506128e682612881565b604082019050919050565b5f6020820190508181035f830152612908816128cf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f775f8201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b5f6129696038836121d3565b91506129748261290f565b604082019050919050565b5f6020820190508181035f8301526129968161295d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f5f8201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b5f6129f76031836121d3565b9150612a028261299d565b604082019050919050565b5f6020820190508181035f830152612a24816129eb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612a5f6020836121d3565b9150612a6a82612a2b565b602082019050919050565b5f6020820190508181035f830152612a8c81612a53565b9050919050565b5f81905092915050565b50565b5f612aab5f83612a93565b9150612ab682612a9d565b5f82019050919050565b5f612aca82612aa0565b9150819050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f612b08600f836121d3565b9150612b1382612ad4565b602082019050919050565b5f6020820190508181035f830152612b3581612afc565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e65786973745f8201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b5f612b966029836121d3565b9150612ba182612b3c565b604082019050919050565b5f6020820190508181035f830152612bc381612b8a565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f612c24602a836121d3565b9150612c2f82612bca565b604082019050919050565b5f6020820190508181035f830152612c5181612c18565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612cb47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612c79565b612cbe8683612c79565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612cf9612cf4612cef84612273565b612cd6565b612273565b9050919050565b5f819050919050565b612d1283612cdf565b612d26612d1e82612d00565b848454612c85565b825550505050565b5f90565b612d3a612d2e565b612d45818484612d09565b505050565b5b81811015612d6857612d5d5f82612d32565b600181019050612d4b565b5050565b601f821115612dad57612d7e81612c58565b612d8784612c6a565b81016020851015612d96578190505b612daa612da285612c6a565b830182612d4a565b50505b505050565b5f82821c905092915050565b5f612dcd5f1984600802612db2565b1980831691505092915050565b5f612de58383612dbe565b9150826002028217905092915050565b612dfe826121c9565b67ffffffffffffffff811115612e1757612e1661243c565b5b612e2182546127c3565b612e2c828285612d6c565b5f60209050601f831160018114612e5d575f8415612e4b578287015190505b612e558582612dda565b865550612ebc565b601f198416612e6b86612c58565b5f5b82811015612e9257848901518255600182019150602085019450602081019050612e6d565b86831015612eaf5784890151612eab601f891682612dbe565b8355505b6001600288020188555050505b505050505050565b7f4d696e74696e6720697320696e616374697665000000000000000000000000005f82015250565b5f612ef86013836121d3565b9150612f0382612ec4565b602082019050919050565b5f6020820190508181035f830152612f2581612eec565b9050919050565b7f546f6b656e206973206f7574206f662072616e676500000000000000000000005f82015250565b5f612f606015836121d3565b9150612f6b82612f2c565b602082019050919050565b5f6020820190508181035f830152612f8d81612f54565b9050919050565b7f546f6b656e20616c726561647920636c61696d656400000000000000000000005f82015250565b5f612fc86015836121d3565b9150612fd382612f94565b602082019050919050565b5f6020820190508181035f830152612ff581612fbc565b9050919050565b7f57616c6c657420616c726561647920636c61696d6564000000000000000000005f82015250565b5f6130306016836121d3565b915061303b82612ffc565b602082019050919050565b5f6020820190508181035f83015261305d81613024565b9050919050565b5f8151905061307281612329565b92915050565b5f6020828403121561308d5761308c61210e565b5b5f61309a84828501613064565b91505092915050565b7f57616c6c657420646f6573206e6f74206f776e20746f6b656e000000000000005f82015250565b5f6130d76019836121d3565b91506130e2826130a3565b602082019050919050565b5f6020820190508181035f830152613104816130cb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61314282612273565b915061314d83612273565b92508282019050808211156131655761316461310b565b5b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f6131c5602f836121d3565b91506131d08261316b565b604082019050919050565b5f6020820190508181035f8301526131f2816131b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6132536026836121d3565b915061325e826131f9565b604082019050919050565b5f6020820190508181035f83015261328081613247565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f6132e1602c836121d3565b91506132ec82613287565b604082019050919050565b5f6020820190508181035f83015261330e816132d5565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e207468617420695f8201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b5f61336f6029836121d3565b915061337a82613315565b604082019050919050565b5f6020820190508181035f83015261339c81613363565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6133fd6024836121d3565b9150613408826133a3565b604082019050919050565b5f6020820190508181035f83015261342a816133f1565b9050919050565b5f61343b82612273565b915061344683612273565b925082820390508181111561345e5761345d61310b565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f6134986019836121d3565b91506134a382613464565b602082019050919050565b5f6020820190508181035f8301526134c58161348c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f6135266032836121d3565b9150613531826134cc565b604082019050919050565b5f6020820190508181035f8301526135538161351a565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f61357e8261355a565b6135888185613564565b93506135988185602086016121e3565b6135a18161220b565b840191505092915050565b5f6080820190506135bf5f830187612301565b6135cc6020830186612301565b6135d96040830185612391565b81810360608301526135eb8184613574565b905095945050505050565b5f8151905061360481612141565b92915050565b5f6020828403121561361f5761361e61210e565b5b5f61362c848285016135f6565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f6136696020836121d3565b915061367482613635565b602082019050919050565b5f6020820190508181035f8301526136968161365d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f6136d1601c836121d3565b91506136dc8261369d565b602082019050919050565b5f6020820190508181035f8301526136fe816136c5565b905091905056fea264697066735822122042a2546f664bc26857799386496356656ffe9cf3060ae8f7ca25a757d2b6e25164736f6c63430008150033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012535155414454532042726f6e7a6520536169000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035342530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d664376554c43567865354d597072504357457a4a6e7070646f39514c5369644354644445375a654c7279396f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): SQUADTS Bronze Sai
Arg [1] : symbol (string): SBS
Arg [2] : metaDataURL (string): https://ipfs.io/ipfs/QmfCvULCVxe5MYprPCWEzJnppdo9QLSidCTdDE7ZeLry9o

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 535155414454532042726f6e7a65205361690000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 5342530000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [8] : 68747470733a2f2f697066732e696f2f697066732f516d664376554c43567865
Arg [9] : 354d597072504357457a4a6e7070646f39514c5369644354644445375a654c72
Arg [10] : 79396f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36240:2463:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21209:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22154:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23713:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23236:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37434:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24463:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36643:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38473:225;;;:::i;:::-;;24873:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36359:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21848:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21578:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35358:103;;;;;;;;;;;;;:::i;:::-;;34707:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22323:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37228:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37547:686;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24006:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25129:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36694:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37009:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38239:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24232:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37335:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35616:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21209:305;21311:4;21363:25;21348:40;;;:11;:40;;;;:105;;;;21420:33;21405:48;;;:11;:48;;;;21348:105;:158;;;;21470:36;21494:11;21470:23;:36::i;:::-;21348:158;21328:178;;21209:305;;;:::o;22154:100::-;22208:13;22241:5;22234:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22154:100;:::o;23713:221::-;23789:7;23817:16;23825:7;23817;:16::i;:::-;23809:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23902:15;:24;23918:7;23902:24;;;;;;;;;;;;;;;;;;;;;23895:31;;23713:221;;;:::o;23236:411::-;23317:13;23333:23;23348:7;23333:14;:23::i;:::-;23317:39;;23381:5;23375:11;;:2;:11;;;23367:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23475:5;23459:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23484:37;23501:5;23508:12;:10;:12::i;:::-;23484:16;:37::i;:::-;23459:62;23437:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23618:21;23627:2;23631:7;23618:8;:21::i;:::-;23306:341;23236:411;;:::o;37434:89::-;37478:7;37505:10;;37498:17;;37434:89;:::o;24463:339::-;24658:41;24677:12;:10;:12::i;:::-;24691:7;24658:18;:41::i;:::-;24650:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24766:28;24776:4;24782:2;24786:7;24766:9;:28::i;:::-;24463:339;;;:::o;36643:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;38473:225::-;34938:12;:10;:12::i;:::-;34927:23;;:7;:5;:7::i;:::-;:23;;;34919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38531:15:::1;38549:21;38531:39;;38582:12;38608:10;38600:24;;38632:7;38600:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38581:63;;;38663:7;38655:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;38520:178;;38473:225::o:0;24873:185::-;25011:39;25028:4;25034:2;25038:7;25011:39;;;;;;;;;;;;:16;:39::i;:::-;24873:185;;;:::o;36359:31::-;;;;;;;;;;;;;:::o;21848:239::-;21920:7;21940:13;21956:7;:16;21964:7;21956:16;;;;;;;;;;;;;;;;;;;;;21940:32;;22008:1;21991:19;;:5;:19;;;21983:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22074:5;22067:12;;;21848:239;;;:::o;21578:208::-;21650:7;21695:1;21678:19;;:5;:19;;;21670:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21762:9;:16;21772:5;21762:16;;;;;;;;;;;;;;;;21755:23;;21578:208;;;:::o;35358:103::-;34938:12;:10;:12::i;:::-;34927:23;;:7;:5;:7::i;:::-;:23;;;34919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35423:30:::1;35450:1;35423:18;:30::i;:::-;35358:103::o:0;34707:87::-;34753:7;34780:6;;;;;;;;;;;34773:13;;34707:87;:::o;22323:104::-;22379:13;22412:7;22405:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22323:104;:::o;37228:101::-;34938:12;:10;:12::i;:::-;34927:23;;:7;:5;:7::i;:::-;:23;;;34919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37316:5:::1;37301:12;:20;;;;;;:::i;:::-;;37228:101:::0;:::o;37547:686::-;37606:12;;;;;;;;;;;37598:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;36475:4;37661:7;:20;;37653:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;36515:4;37726:7;:20;;37718:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;37792:12;:21;37805:7;37792:21;;;;;;;;;;;;;;;;;;;;;37791:22;37783:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;37859:13;:25;37873:10;37859:25;;;;;;;;;;;;;;;;;;;;;;;;;37858:26;37850:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37974:10;37930:54;;36592:42;37930:31;;;37962:7;37930:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;37922:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;38025:14;38042:13;:11;:13::i;:::-;38025:30;;38090:4;38066:12;:21;38079:7;38066:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;38133:4;38105:13;:25;38119:10;38105:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38162:1;38148:10;;:15;;;;;;;:::i;:::-;;;;;;;;38174:51;38184:10;38218:6;36438:1;38196:28;;;;:::i;:::-;38174:9;:51::i;:::-;37587:646;37547:686;:::o;24006:155::-;24101:52;24120:12;:10;:12::i;:::-;24134:8;24144;24101:18;:52::i;:::-;24006:155;;:::o;25129:328::-;25304:41;25323:12;:10;:12::i;:::-;25337:7;25304:18;:41::i;:::-;25296:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25410:39;25424:4;25430:2;25434:7;25443:5;25410:13;:39::i;:::-;25129:328;;;;:::o;36694:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;37009:213::-;37082:13;37116:16;37124:7;37116;:16::i;:::-;37108:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37202:12;37195:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37009:213;;;:::o;38239:209::-;34938:12;:10;:12::i;:::-;34927:23;;:7;:5;:7::i;:::-;:23;;;34919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38295:14:::1;38312:13;:11;:13::i;:::-;38295:30;;38356:4;38336:13;:17;38350:2;38336:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;38385:1;38371:10;;:15;;;;;;;:::i;:::-;;;;;;;;38397:43;38407:2;38433:6;36438:1;38411:28;;;;:::i;:::-;38397:9;:43::i;:::-;38284:164;38239:209:::0;:::o;24232:164::-;24329:4;24353:18;:25;24372:5;24353:25;;;;;;;;;;;;;;;:35;24379:8;24353:35;;;;;;;;;;;;;;;;;;;;;;;;;24346:42;;24232:164;;;;:::o;37335:93::-;34938:12;:10;:12::i;:::-;34927:23;;:7;:5;:7::i;:::-;:23;;;34919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37415:5:::1;37400:12;;:20;;;;;;;;;;;;;;;;;;37335:93:::0;:::o;35616:201::-;34938:12;:10;:12::i;:::-;34927:23;;:7;:5;:7::i;:::-;:23;;;34919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35725:1:::1;35705:22;;:8;:22;;::::0;35697:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35781:28;35800:8;35781:18;:28::i;:::-;35616:201:::0;:::o;13111:157::-;13196:4;13235:25;13220:40;;;:11;:40;;;;13213:47;;13111:157;;;:::o;26967:127::-;27032:4;27084:1;27056:30;;:7;:16;27064:7;27056:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27049:37;;26967:127;;;:::o;19619:98::-;19672:7;19699:10;19692:17;;19619:98;:::o;30949:174::-;31051:2;31024:15;:24;31040:7;31024:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31107:7;31103:2;31069:46;;31078:23;31093:7;31078:14;:23::i;:::-;31069:46;;;;;;;;;;;;30949:174;;:::o;27261:348::-;27354:4;27379:16;27387:7;27379;:16::i;:::-;27371:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27455:13;27471:23;27486:7;27471:14;:23::i;:::-;27455:39;;27524:5;27513:16;;:7;:16;;;:51;;;;27557:7;27533:31;;:20;27545:7;27533:11;:20::i;:::-;:31;;;27513:51;:87;;;;27568:32;27585:5;27592:7;27568:16;:32::i;:::-;27513:87;27505:96;;;27261:348;;;;:::o;30253:578::-;30412:4;30385:31;;:23;30400:7;30385:14;:23::i;:::-;:31;;;30377:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30495:1;30481:16;;:2;:16;;;30473:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30551:39;30572:4;30578:2;30582:7;30551:20;:39::i;:::-;30655:29;30672:1;30676:7;30655:8;:29::i;:::-;30716:1;30697:9;:15;30707:4;30697:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30745:1;30728:9;:13;30738:2;30728:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30776:2;30757:7;:16;30765:7;30757:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30815:7;30811:2;30796:27;;30805:4;30796:27;;;;;;;;;;;;30253:578;;;:::o;35977:191::-;36051:16;36070:6;;;;;;;;;;;36051:25;;36096:8;36087:6;;:17;;;;;;;;;;;;;;;;;;36151:8;36120:40;;36141:8;36120:40;;;;;;;;;;;;36040:128;35977:191;:::o;27951:110::-;28027:26;28037:2;28041:7;28027:26;;;;;;;;;;;;:9;:26::i;:::-;27951:110;;:::o;31265:315::-;31420:8;31411:17;;:5;:17;;;31403:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31507:8;31469:18;:25;31488:5;31469:25;;;;;;;;;;;;;;;:35;31495:8;31469:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31553:8;31531:41;;31546:5;31531:41;;;31563:8;31531:41;;;;;;:::i;:::-;;;;;;;;31265:315;;;:::o;26339:::-;26496:28;26506:4;26512:2;26516:7;26496:9;:28::i;:::-;26543:48;26566:4;26572:2;26576:7;26585:5;26543:22;:48::i;:::-;26535:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26339:315;;;;:::o;33516:126::-;;;;:::o;28288:321::-;28418:18;28424:2;28428:7;28418:5;:18::i;:::-;28469:54;28500:1;28504:2;28508:7;28517:5;28469:22;:54::i;:::-;28447:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28288:321;;;:::o;32145:799::-;32300:4;32321:15;:2;:13;;;:15::i;:::-;32317:620;;;32373:2;32357:36;;;32394:12;:10;:12::i;:::-;32408:4;32414:7;32423:5;32357:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32353:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32616:1;32599:6;:13;:18;32595:272;;32642:60;;;;;;;;;;:::i;:::-;;;;;;;;32595:272;32817:6;32811:13;32802:6;32798:2;32794:15;32787:38;32353:529;32490:41;;;32480:51;;;:6;:51;;;;32473:58;;;;;32317:620;32921:4;32914:11;;32145:799;;;;;;;:::o;28945:382::-;29039:1;29025:16;;:2;:16;;;29017:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29098:16;29106:7;29098;:16::i;:::-;29097:17;29089:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29160:45;29189:1;29193:2;29197:7;29160:20;:45::i;:::-;29235:1;29218:9;:13;29228:2;29218:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29266:2;29247:7;:16;29255:7;29247:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29311:7;29307:2;29286:33;;29303:1;29286:33;;;;;;;;;;;;28945:382;;:::o;2975:387::-;3035:4;3243:12;3310:7;3298:20;3290:28;;3353:1;3346:4;:8;3339:15;;;2975:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:329::-;5926:6;5975:2;5963:9;5954:7;5950:23;5946:32;5943:119;;;5981:79;;:::i;:::-;5943:119;6101:1;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6072:117;5867:329;;;;:::o;6202:117::-;6311:1;6308;6301:12;6325:117;6434:1;6431;6424:12;6448:180;6496:77;6493:1;6486:88;6593:4;6590:1;6583:15;6617:4;6614:1;6607:15;6634:281;6717:27;6739:4;6717:27;:::i;:::-;6709:6;6705:40;6847:6;6835:10;6832:22;6811:18;6799:10;6796:34;6793:62;6790:88;;;6858:18;;:::i;:::-;6790:88;6898:10;6894:2;6887:22;6677:238;6634:281;;:::o;6921:129::-;6955:6;6982:20;;:::i;:::-;6972:30;;7011:33;7039:4;7031:6;7011:33;:::i;:::-;6921:129;;;:::o;7056:308::-;7118:4;7208:18;7200:6;7197:30;7194:56;;;7230:18;;:::i;:::-;7194:56;7268:29;7290:6;7268:29;:::i;:::-;7260:37;;7352:4;7346;7342:15;7334:23;;7056:308;;;:::o;7370:146::-;7467:6;7462:3;7457;7444:30;7508:1;7499:6;7494:3;7490:16;7483:27;7370:146;;;:::o;7522:425::-;7600:5;7625:66;7641:49;7683:6;7641:49;:::i;:::-;7625:66;:::i;:::-;7616:75;;7714:6;7707:5;7700:21;7752:4;7745:5;7741:16;7790:3;7781:6;7776:3;7772:16;7769:25;7766:112;;;7797:79;;:::i;:::-;7766:112;7887:54;7934:6;7929:3;7924;7887:54;:::i;:::-;7606:341;7522:425;;;;;:::o;7967:340::-;8023:5;8072:3;8065:4;8057:6;8053:17;8049:27;8039:122;;8080:79;;:::i;:::-;8039:122;8197:6;8184:20;8222:79;8297:3;8289:6;8282:4;8274:6;8270:17;8222:79;:::i;:::-;8213:88;;8029:278;7967:340;;;;:::o;8313:509::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:63;8797:7;8788:6;8777:9;8773:22;8742:63;:::i;:::-;8732:73;;8528:287;8313:509;;;;:::o;8828:116::-;8898:21;8913:5;8898:21;:::i;:::-;8891:5;8888:32;8878:60;;8934:1;8931;8924:12;8878:60;8828:116;:::o;8950:133::-;8993:5;9031:6;9018:20;9009:29;;9047:30;9071:5;9047:30;:::i;:::-;8950:133;;;;:::o;9089:468::-;9154:6;9162;9211:2;9199:9;9190:7;9186:23;9182:32;9179:119;;;9217:79;;:::i;:::-;9179:119;9337:1;9362:53;9407:7;9398:6;9387:9;9383:22;9362:53;:::i;:::-;9352:63;;9308:117;9464:2;9490:50;9532:7;9523:6;9512:9;9508:22;9490:50;:::i;:::-;9480:60;;9435:115;9089:468;;;;;:::o;9563:307::-;9624:4;9714:18;9706:6;9703:30;9700:56;;;9736:18;;:::i;:::-;9700:56;9774:29;9796:6;9774:29;:::i;:::-;9766:37;;9858:4;9852;9848:15;9840:23;;9563:307;;;:::o;9876:423::-;9953:5;9978:65;9994:48;10035:6;9994:48;:::i;:::-;9978:65;:::i;:::-;9969:74;;10066:6;10059:5;10052:21;10104:4;10097:5;10093:16;10142:3;10133:6;10128:3;10124:16;10121:25;10118:112;;;10149:79;;:::i;:::-;10118:112;10239:54;10286:6;10281:3;10276;10239:54;:::i;:::-;9959:340;9876:423;;;;;:::o;10318:338::-;10373:5;10422:3;10415:4;10407:6;10403:17;10399:27;10389:122;;10430:79;;:::i;:::-;10389:122;10547:6;10534:20;10572:78;10646:3;10638:6;10631:4;10623:6;10619:17;10572:78;:::i;:::-;10563:87;;10379:277;10318:338;;;;:::o;10662:943::-;10757:6;10765;10773;10781;10830:3;10818:9;10809:7;10805:23;10801:33;10798:120;;;10837:79;;:::i;:::-;10798:120;10957:1;10982:53;11027:7;11018:6;11007:9;11003:22;10982:53;:::i;:::-;10972:63;;10928:117;11084:2;11110:53;11155:7;11146:6;11135:9;11131:22;11110:53;:::i;:::-;11100:63;;11055:118;11212:2;11238:53;11283:7;11274:6;11263:9;11259:22;11238:53;:::i;:::-;11228:63;;11183:118;11368:2;11357:9;11353:18;11340:32;11399:18;11391:6;11388:30;11385:117;;;11421:79;;:::i;:::-;11385:117;11526:62;11580:7;11571:6;11560:9;11556:22;11526:62;:::i;:::-;11516:72;;11311:287;10662:943;;;;;;;:::o;11611:474::-;11679:6;11687;11736:2;11724:9;11715:7;11711:23;11707:32;11704:119;;;11742:79;;:::i;:::-;11704:119;11862:1;11887:53;11932:7;11923:6;11912:9;11908:22;11887:53;:::i;:::-;11877:63;;11833:117;11989:2;12015:53;12060:7;12051:6;12040:9;12036:22;12015:53;:::i;:::-;12005:63;;11960:118;11611:474;;;;;:::o;12091:323::-;12147:6;12196:2;12184:9;12175:7;12171:23;12167:32;12164:119;;;12202:79;;:::i;:::-;12164:119;12322:1;12347:50;12389:7;12380:6;12369:9;12365:22;12347:50;:::i;:::-;12337:60;;12293:114;12091:323;;;;:::o;12420:180::-;12468:77;12465:1;12458:88;12565:4;12562:1;12555:15;12589:4;12586:1;12579:15;12606:320;12650:6;12687:1;12681:4;12677:12;12667:22;;12734:1;12728:4;12724:12;12755:18;12745:81;;12811:4;12803:6;12799:17;12789:27;;12745:81;12873:2;12865:6;12862:14;12842:18;12839:38;12836:84;;12892:18;;:::i;:::-;12836:84;12657:269;12606:320;;;:::o;12932:231::-;13072:34;13068:1;13060:6;13056:14;13049:58;13141:14;13136:2;13128:6;13124:15;13117:39;12932:231;:::o;13169:366::-;13311:3;13332:67;13396:2;13391:3;13332:67;:::i;:::-;13325:74;;13408:93;13497:3;13408:93;:::i;:::-;13526:2;13521:3;13517:12;13510:19;;13169:366;;;:::o;13541:419::-;13707:4;13745:2;13734:9;13730:18;13722:26;;13794:9;13788:4;13784:20;13780:1;13769:9;13765:17;13758:47;13822:131;13948:4;13822:131;:::i;:::-;13814:139;;13541:419;;;:::o;13966:220::-;14106:34;14102:1;14094:6;14090:14;14083:58;14175:3;14170:2;14162:6;14158:15;14151:28;13966:220;:::o;14192:366::-;14334:3;14355:67;14419:2;14414:3;14355:67;:::i;:::-;14348:74;;14431:93;14520:3;14431:93;:::i;:::-;14549:2;14544:3;14540:12;14533:19;;14192:366;;;:::o;14564:419::-;14730:4;14768:2;14757:9;14753:18;14745:26;;14817:9;14811:4;14807:20;14803:1;14792:9;14788:17;14781:47;14845:131;14971:4;14845:131;:::i;:::-;14837:139;;14564:419;;;:::o;14989:243::-;15129:34;15125:1;15117:6;15113:14;15106:58;15198:26;15193:2;15185:6;15181:15;15174:51;14989:243;:::o;15238:366::-;15380:3;15401:67;15465:2;15460:3;15401:67;:::i;:::-;15394:74;;15477:93;15566:3;15477:93;:::i;:::-;15595:2;15590:3;15586:12;15579:19;;15238:366;;;:::o;15610:419::-;15776:4;15814:2;15803:9;15799:18;15791:26;;15863:9;15857:4;15853:20;15849:1;15838:9;15834:17;15827:47;15891:131;16017:4;15891:131;:::i;:::-;15883:139;;15610:419;;;:::o;16035:236::-;16175:34;16171:1;16163:6;16159:14;16152:58;16244:19;16239:2;16231:6;16227:15;16220:44;16035:236;:::o;16277:366::-;16419:3;16440:67;16504:2;16499:3;16440:67;:::i;:::-;16433:74;;16516:93;16605:3;16516:93;:::i;:::-;16634:2;16629:3;16625:12;16618:19;;16277:366;;;:::o;16649:419::-;16815:4;16853:2;16842:9;16838:18;16830:26;;16902:9;16896:4;16892:20;16888:1;16877:9;16873:17;16866:47;16930:131;17056:4;16930:131;:::i;:::-;16922:139;;16649:419;;;:::o;17074:182::-;17214:34;17210:1;17202:6;17198:14;17191:58;17074:182;:::o;17262:366::-;17404:3;17425:67;17489:2;17484:3;17425:67;:::i;:::-;17418:74;;17501:93;17590:3;17501:93;:::i;:::-;17619:2;17614:3;17610:12;17603:19;;17262:366;;;:::o;17634:419::-;17800:4;17838:2;17827:9;17823:18;17815:26;;17887:9;17881:4;17877:20;17873:1;17862:9;17858:17;17851:47;17915:131;18041:4;17915:131;:::i;:::-;17907:139;;17634:419;;;:::o;18059:147::-;18160:11;18197:3;18182:18;;18059:147;;;;:::o;18212:114::-;;:::o;18332:398::-;18491:3;18512:83;18593:1;18588:3;18512:83;:::i;:::-;18505:90;;18604:93;18693:3;18604:93;:::i;:::-;18722:1;18717:3;18713:11;18706:18;;18332:398;;;:::o;18736:379::-;18920:3;18942:147;19085:3;18942:147;:::i;:::-;18935:154;;19106:3;19099:10;;18736:379;;;:::o;19121:165::-;19261:17;19257:1;19249:6;19245:14;19238:41;19121:165;:::o;19292:366::-;19434:3;19455:67;19519:2;19514:3;19455:67;:::i;:::-;19448:74;;19531:93;19620:3;19531:93;:::i;:::-;19649:2;19644:3;19640:12;19633:19;;19292:366;;;:::o;19664:419::-;19830:4;19868:2;19857:9;19853:18;19845:26;;19917:9;19911:4;19907:20;19903:1;19892:9;19888:17;19881:47;19945:131;20071:4;19945:131;:::i;:::-;19937:139;;19664:419;;;:::o;20089:228::-;20229:34;20225:1;20217:6;20213:14;20206:58;20298:11;20293:2;20285:6;20281:15;20274:36;20089:228;:::o;20323:366::-;20465:3;20486:67;20550:2;20545:3;20486:67;:::i;:::-;20479:74;;20562:93;20651:3;20562:93;:::i;:::-;20680:2;20675:3;20671:12;20664:19;;20323:366;;;:::o;20695:419::-;20861:4;20899:2;20888:9;20884:18;20876:26;;20948:9;20942:4;20938:20;20934:1;20923:9;20919:17;20912:47;20976:131;21102:4;20976:131;:::i;:::-;20968:139;;20695:419;;;:::o;21120:229::-;21260:34;21256:1;21248:6;21244:14;21237:58;21329:12;21324:2;21316:6;21312:15;21305:37;21120:229;:::o;21355:366::-;21497:3;21518:67;21582:2;21577:3;21518:67;:::i;:::-;21511:74;;21594:93;21683:3;21594:93;:::i;:::-;21712:2;21707:3;21703:12;21696:19;;21355:366;;;:::o;21727:419::-;21893:4;21931:2;21920:9;21916:18;21908:26;;21980:9;21974:4;21970:20;21966:1;21955:9;21951:17;21944:47;22008:131;22134:4;22008:131;:::i;:::-;22000:139;;21727:419;;;:::o;22152:141::-;22201:4;22224:3;22216:11;;22247:3;22244:1;22237:14;22281:4;22278:1;22268:18;22260:26;;22152:141;;;:::o;22299:93::-;22336:6;22383:2;22378;22371:5;22367:14;22363:23;22353:33;;22299:93;;;:::o;22398:107::-;22442:8;22492:5;22486:4;22482:16;22461:37;;22398:107;;;;:::o;22511:393::-;22580:6;22630:1;22618:10;22614:18;22653:97;22683:66;22672:9;22653:97;:::i;:::-;22771:39;22801:8;22790:9;22771:39;:::i;:::-;22759:51;;22843:4;22839:9;22832:5;22828:21;22819:30;;22892:4;22882:8;22878:19;22871:5;22868:30;22858:40;;22587:317;;22511:393;;;;;:::o;22910:60::-;22938:3;22959:5;22952:12;;22910:60;;;:::o;22976:142::-;23026:9;23059:53;23077:34;23086:24;23104:5;23086:24;:::i;:::-;23077:34;:::i;:::-;23059:53;:::i;:::-;23046:66;;22976:142;;;:::o;23124:75::-;23167:3;23188:5;23181:12;;23124:75;;;:::o;23205:269::-;23315:39;23346:7;23315:39;:::i;:::-;23376:91;23425:41;23449:16;23425:41;:::i;:::-;23417:6;23410:4;23404:11;23376:91;:::i;:::-;23370:4;23363:105;23281:193;23205:269;;;:::o;23480:73::-;23525:3;23480:73;:::o;23559:189::-;23636:32;;:::i;:::-;23677:65;23735:6;23727;23721:4;23677:65;:::i;:::-;23612:136;23559:189;;:::o;23754:186::-;23814:120;23831:3;23824:5;23821:14;23814:120;;;23885:39;23922:1;23915:5;23885:39;:::i;:::-;23858:1;23851:5;23847:13;23838:22;;23814:120;;;23754:186;;:::o;23946:543::-;24047:2;24042:3;24039:11;24036:446;;;24081:38;24113:5;24081:38;:::i;:::-;24165:29;24183:10;24165:29;:::i;:::-;24155:8;24151:44;24348:2;24336:10;24333:18;24330:49;;;24369:8;24354:23;;24330:49;24392:80;24448:22;24466:3;24448:22;:::i;:::-;24438:8;24434:37;24421:11;24392:80;:::i;:::-;24051:431;;24036:446;23946:543;;;:::o;24495:117::-;24549:8;24599:5;24593:4;24589:16;24568:37;;24495:117;;;;:::o;24618:169::-;24662:6;24695:51;24743:1;24739:6;24731:5;24728:1;24724:13;24695:51;:::i;:::-;24691:56;24776:4;24770;24766:15;24756:25;;24669:118;24618:169;;;;:::o;24792:295::-;24868:4;25014:29;25039:3;25033:4;25014:29;:::i;:::-;25006:37;;25076:3;25073:1;25069:11;25063:4;25060:21;25052:29;;24792:295;;;;:::o;25092:1395::-;25209:37;25242:3;25209:37;:::i;:::-;25311:18;25303:6;25300:30;25297:56;;;25333:18;;:::i;:::-;25297:56;25377:38;25409:4;25403:11;25377:38;:::i;:::-;25462:67;25522:6;25514;25508:4;25462:67;:::i;:::-;25556:1;25580:4;25567:17;;25612:2;25604:6;25601:14;25629:1;25624:618;;;;26286:1;26303:6;26300:77;;;26352:9;26347:3;26343:19;26337:26;26328:35;;26300:77;26403:67;26463:6;26456:5;26403:67;:::i;:::-;26397:4;26390:81;26259:222;25594:887;;25624:618;25676:4;25672:9;25664:6;25660:22;25710:37;25742:4;25710:37;:::i;:::-;25769:1;25783:208;25797:7;25794:1;25791:14;25783:208;;;25876:9;25871:3;25867:19;25861:26;25853:6;25846:42;25927:1;25919:6;25915:14;25905:24;;25974:2;25963:9;25959:18;25946:31;;25820:4;25817:1;25813:12;25808:17;;25783:208;;;26019:6;26010:7;26007:19;26004:179;;;26077:9;26072:3;26068:19;26062:26;26120:48;26162:4;26154:6;26150:17;26139:9;26120:48;:::i;:::-;26112:6;26105:64;26027:156;26004:179;26229:1;26225;26217:6;26213:14;26209:22;26203:4;26196:36;25631:611;;;25594:887;;25184:1303;;;25092:1395;;:::o;26493:169::-;26633:21;26629:1;26621:6;26617:14;26610:45;26493:169;:::o;26668:366::-;26810:3;26831:67;26895:2;26890:3;26831:67;:::i;:::-;26824:74;;26907:93;26996:3;26907:93;:::i;:::-;27025:2;27020:3;27016:12;27009:19;;26668:366;;;:::o;27040:419::-;27206:4;27244:2;27233:9;27229:18;27221:26;;27293:9;27287:4;27283:20;27279:1;27268:9;27264:17;27257:47;27321:131;27447:4;27321:131;:::i;:::-;27313:139;;27040:419;;;:::o;27465:171::-;27605:23;27601:1;27593:6;27589:14;27582:47;27465:171;:::o;27642:366::-;27784:3;27805:67;27869:2;27864:3;27805:67;:::i;:::-;27798:74;;27881:93;27970:3;27881:93;:::i;:::-;27999:2;27994:3;27990:12;27983:19;;27642:366;;;:::o;28014:419::-;28180:4;28218:2;28207:9;28203:18;28195:26;;28267:9;28261:4;28257:20;28253:1;28242:9;28238:17;28231:47;28295:131;28421:4;28295:131;:::i;:::-;28287:139;;28014:419;;;:::o;28439:171::-;28579:23;28575:1;28567:6;28563:14;28556:47;28439:171;:::o;28616:366::-;28758:3;28779:67;28843:2;28838:3;28779:67;:::i;:::-;28772:74;;28855:93;28944:3;28855:93;:::i;:::-;28973:2;28968:3;28964:12;28957:19;;28616:366;;;:::o;28988:419::-;29154:4;29192:2;29181:9;29177:18;29169:26;;29241:9;29235:4;29231:20;29227:1;29216:9;29212:17;29205:47;29269:131;29395:4;29269:131;:::i;:::-;29261:139;;28988:419;;;:::o;29413:172::-;29553:24;29549:1;29541:6;29537:14;29530:48;29413:172;:::o;29591:366::-;29733:3;29754:67;29818:2;29813:3;29754:67;:::i;:::-;29747:74;;29830:93;29919:3;29830:93;:::i;:::-;29948:2;29943:3;29939:12;29932:19;;29591:366;;;:::o;29963:419::-;30129:4;30167:2;30156:9;30152:18;30144:26;;30216:9;30210:4;30206:20;30202:1;30191:9;30187:17;30180:47;30244:131;30370:4;30244:131;:::i;:::-;30236:139;;29963:419;;;:::o;30388:143::-;30445:5;30476:6;30470:13;30461:22;;30492:33;30519:5;30492:33;:::i;:::-;30388:143;;;;:::o;30537:351::-;30607:6;30656:2;30644:9;30635:7;30631:23;30627:32;30624:119;;;30662:79;;:::i;:::-;30624:119;30782:1;30807:64;30863:7;30854:6;30843:9;30839:22;30807:64;:::i;:::-;30797:74;;30753:128;30537:351;;;;:::o;30894:175::-;31034:27;31030:1;31022:6;31018:14;31011:51;30894:175;:::o;31075:366::-;31217:3;31238:67;31302:2;31297:3;31238:67;:::i;:::-;31231:74;;31314:93;31403:3;31314:93;:::i;:::-;31432:2;31427:3;31423:12;31416:19;;31075:366;;;:::o;31447:419::-;31613:4;31651:2;31640:9;31636:18;31628:26;;31700:9;31694:4;31690:20;31686:1;31675:9;31671:17;31664:47;31728:131;31854:4;31728:131;:::i;:::-;31720:139;;31447:419;;;:::o;31872:180::-;31920:77;31917:1;31910:88;32017:4;32014:1;32007:15;32041:4;32038:1;32031:15;32058:191;32098:3;32117:20;32135:1;32117:20;:::i;:::-;32112:25;;32151:20;32169:1;32151:20;:::i;:::-;32146:25;;32194:1;32191;32187:9;32180:16;;32215:3;32212:1;32209:10;32206:36;;;32222:18;;:::i;:::-;32206:36;32058:191;;;;:::o;32255:234::-;32395:34;32391:1;32383:6;32379:14;32372:58;32464:17;32459:2;32451:6;32447:15;32440:42;32255:234;:::o;32495:366::-;32637:3;32658:67;32722:2;32717:3;32658:67;:::i;:::-;32651:74;;32734:93;32823:3;32734:93;:::i;:::-;32852:2;32847:3;32843:12;32836:19;;32495:366;;;:::o;32867:419::-;33033:4;33071:2;33060:9;33056:18;33048:26;;33120:9;33114:4;33110:20;33106:1;33095:9;33091:17;33084:47;33148:131;33274:4;33148:131;:::i;:::-;33140:139;;32867:419;;;:::o;33292:225::-;33432:34;33428:1;33420:6;33416:14;33409:58;33501:8;33496:2;33488:6;33484:15;33477:33;33292:225;:::o;33523:366::-;33665:3;33686:67;33750:2;33745:3;33686:67;:::i;:::-;33679:74;;33762:93;33851:3;33762:93;:::i;:::-;33880:2;33875:3;33871:12;33864:19;;33523:366;;;:::o;33895:419::-;34061:4;34099:2;34088:9;34084:18;34076:26;;34148:9;34142:4;34138:20;34134:1;34123:9;34119:17;34112:47;34176:131;34302:4;34176:131;:::i;:::-;34168:139;;33895:419;;;:::o;34320:231::-;34460:34;34456:1;34448:6;34444:14;34437:58;34529:14;34524:2;34516:6;34512:15;34505:39;34320:231;:::o;34557:366::-;34699:3;34720:67;34784:2;34779:3;34720:67;:::i;:::-;34713:74;;34796:93;34885:3;34796:93;:::i;:::-;34914:2;34909:3;34905:12;34898:19;;34557:366;;;:::o;34929:419::-;35095:4;35133:2;35122:9;35118:18;35110:26;;35182:9;35176:4;35172:20;35168:1;35157:9;35153:17;35146:47;35210:131;35336:4;35210:131;:::i;:::-;35202:139;;34929:419;;;:::o;35354:228::-;35494:34;35490:1;35482:6;35478:14;35471:58;35563:11;35558:2;35550:6;35546:15;35539:36;35354:228;:::o;35588:366::-;35730:3;35751:67;35815:2;35810:3;35751:67;:::i;:::-;35744:74;;35827:93;35916:3;35827:93;:::i;:::-;35945:2;35940:3;35936:12;35929:19;;35588:366;;;:::o;35960:419::-;36126:4;36164:2;36153:9;36149:18;36141:26;;36213:9;36207:4;36203:20;36199:1;36188:9;36184:17;36177:47;36241:131;36367:4;36241:131;:::i;:::-;36233:139;;35960:419;;;:::o;36385:223::-;36525:34;36521:1;36513:6;36509:14;36502:58;36594:6;36589:2;36581:6;36577:15;36570:31;36385:223;:::o;36614:366::-;36756:3;36777:67;36841:2;36836:3;36777:67;:::i;:::-;36770:74;;36853:93;36942:3;36853:93;:::i;:::-;36971:2;36966:3;36962:12;36955:19;;36614:366;;;:::o;36986:419::-;37152:4;37190:2;37179:9;37175:18;37167:26;;37239:9;37233:4;37229:20;37225:1;37214:9;37210:17;37203:47;37267:131;37393:4;37267:131;:::i;:::-;37259:139;;36986:419;;;:::o;37411:194::-;37451:4;37471:20;37489:1;37471:20;:::i;:::-;37466:25;;37505:20;37523:1;37505:20;:::i;:::-;37500:25;;37549:1;37546;37542:9;37534:17;;37573:1;37567:4;37564:11;37561:37;;;37578:18;;:::i;:::-;37561:37;37411:194;;;;:::o;37611:175::-;37751:27;37747:1;37739:6;37735:14;37728:51;37611:175;:::o;37792:366::-;37934:3;37955:67;38019:2;38014:3;37955:67;:::i;:::-;37948:74;;38031:93;38120:3;38031:93;:::i;:::-;38149:2;38144:3;38140:12;38133:19;;37792:366;;;:::o;38164:419::-;38330:4;38368:2;38357:9;38353:18;38345:26;;38417:9;38411:4;38407:20;38403:1;38392:9;38388:17;38381:47;38445:131;38571:4;38445:131;:::i;:::-;38437:139;;38164:419;;;:::o;38589:237::-;38729:34;38725:1;38717:6;38713:14;38706:58;38798:20;38793:2;38785:6;38781:15;38774:45;38589:237;:::o;38832:366::-;38974:3;38995:67;39059:2;39054:3;38995:67;:::i;:::-;38988:74;;39071:93;39160:3;39071:93;:::i;:::-;39189:2;39184:3;39180:12;39173:19;;38832:366;;;:::o;39204:419::-;39370:4;39408:2;39397:9;39393:18;39385:26;;39457:9;39451:4;39447:20;39443:1;39432:9;39428:17;39421:47;39485:131;39611:4;39485:131;:::i;:::-;39477:139;;39204:419;;;:::o;39629:98::-;39680:6;39714:5;39708:12;39698:22;;39629:98;;;:::o;39733:168::-;39816:11;39850:6;39845:3;39838:19;39890:4;39885:3;39881:14;39866:29;;39733:168;;;;:::o;39907:373::-;39993:3;40021:38;40053:5;40021:38;:::i;:::-;40075:70;40138:6;40133:3;40075:70;:::i;:::-;40068:77;;40154:65;40212:6;40207:3;40200:4;40193:5;40189:16;40154:65;:::i;:::-;40244:29;40266:6;40244:29;:::i;:::-;40239:3;40235:39;40228:46;;39997:283;39907:373;;;;:::o;40286:640::-;40481:4;40519:3;40508:9;40504:19;40496:27;;40533:71;40601:1;40590:9;40586:17;40577:6;40533:71;:::i;:::-;40614:72;40682:2;40671:9;40667:18;40658:6;40614:72;:::i;:::-;40696;40764:2;40753:9;40749:18;40740:6;40696:72;:::i;:::-;40815:9;40809:4;40805:20;40800:2;40789:9;40785:18;40778:48;40843:76;40914:4;40905:6;40843:76;:::i;:::-;40835:84;;40286:640;;;;;;;:::o;40932:141::-;40988:5;41019:6;41013:13;41004:22;;41035:32;41061:5;41035:32;:::i;:::-;40932:141;;;;:::o;41079:349::-;41148:6;41197:2;41185:9;41176:7;41172:23;41168:32;41165:119;;;41203:79;;:::i;:::-;41165:119;41323:1;41348:63;41403:7;41394:6;41383:9;41379:22;41348:63;:::i;:::-;41338:73;;41294:127;41079:349;;;;:::o;41434:182::-;41574:34;41570:1;41562:6;41558:14;41551:58;41434:182;:::o;41622:366::-;41764:3;41785:67;41849:2;41844:3;41785:67;:::i;:::-;41778:74;;41861:93;41950:3;41861:93;:::i;:::-;41979:2;41974:3;41970:12;41963:19;;41622:366;;;:::o;41994:419::-;42160:4;42198:2;42187:9;42183:18;42175:26;;42247:9;42241:4;42237:20;42233:1;42222:9;42218:17;42211:47;42275:131;42401:4;42275:131;:::i;:::-;42267:139;;41994:419;;;:::o;42419:178::-;42559:30;42555:1;42547:6;42543:14;42536:54;42419:178;:::o;42603:366::-;42745:3;42766:67;42830:2;42825:3;42766:67;:::i;:::-;42759:74;;42842:93;42931:3;42842:93;:::i;:::-;42960:2;42955:3;42951:12;42944:19;;42603:366;;;:::o;42975:419::-;43141:4;43179:2;43168:9;43164:18;43156:26;;43228:9;43222:4;43218:20;43214:1;43203:9;43199:17;43192:47;43256:131;43382:4;43256:131;:::i;:::-;43248:139;;42975:419;;;:::o

Swarm Source

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