ETH Price: $3,316.23 (-1.70%)
Gas: 2 Gwei

Token

Societhy OG Pass (SOG)
 

Overview

Max Total Supply

250 SOG

Holders

173

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
ademaria.eth
Balance
1 SOG
0xf41e85e898597be250791e0034eee79029a535aa
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The OG pass serves as the on-chain original proof of belonging to the Societhy metaverse. Each OG pass is a 1/1 handcrafted bull bust. This collaboration illuminates Societhy’s values - beauty and persistence.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SOG

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

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

// OpenZeppelin Contracts v4.4.1 (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/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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

// OpenZeppelin Contracts v4.4.1 (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/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

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

// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (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/[email protected]

// OpenZeppelin Contracts (last updated v4.5.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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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

// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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

// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

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

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

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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

// OpenZeppelin Contracts v4.4.1 (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 @openzeppelin/contracts/security/[email protected]

// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File contracts/SOG.sol

pragma solidity ^0.8.0; // solhint-disable-line

contract SOG is ERC721, Ownable, ReentrancyGuard {
    // Using counters diminish gasfees consumption 👉 https://shiny.mirror.xyz/OUampBbIz9ebEicfGnQf5At_ReMHlZy0tB4glb9xQ0E
    using Counters for Counters.Counter;

    // MerkleRoot is used in order to check the allowList
    bytes32 public merkleRoot;
    bool public isAllowListActive;
    mapping(address => uint256) public allowListClaimed;

    bool public isPublicSaleActive;
    bool public reserveClaimed = false;
    uint256 public constant MAX_SUPPLY = 250;
    uint256 public constant RESERVE_SUPPLY = 30;
    uint256 public constant PRICE_PER_TOKEN = 0.2 ether;
    string private _baseURIextended;
    Counters.Counter private _tokenSupply;

    constructor() ERC721("Societhy OG Pass", "SOG") {}

    function totalSupply() public view returns (uint256) {
        return _tokenSupply.current();
    }

    function setAllowList(bytes32 merkleRoot_) external onlyOwner {
        merkleRoot = merkleRoot_;
    }

    function setAllowListActive(bool isAllowListActive_) external onlyOwner {
        isAllowListActive = isAllowListActive_;
    }

    /**
     * onAllowList: Check if the 'claimer' address is present in the allow list.
     * In other words, check if a leaf with the 'claimer' value
     * is present in the stored merkle tree.
     *
     * See Open Zeppelin's 'MerkleProof' library implementation.
     */
    function onAllowList(address claimer, bytes32[] memory proof) public view returns (bool) {
        bytes32 leaf = keccak256(abi.encodePacked(claimer));
        return MerkleProof.verify(proof, merkleRoot, leaf);
    }

    function mintAllowList(bytes32[] calldata merkleProof) external payable nonReentrant {
        require(isAllowListActive, "Allow list is not active");
        require(onAllowList(msg.sender, merkleProof), "Address not in allow list");
        require(allowListClaimed[msg.sender] == 0, "Token already claimed");

        uint256 mintIndex = _tokenSupply.current() + 1;
        require(mintIndex <= MAX_SUPPLY, "Purchase would exceed max tokens");
        require(PRICE_PER_TOKEN <= msg.value, "Not enough ETH sent; check price!");

        _tokenSupply.increment();
        allowListClaimed[msg.sender] += 1;
        _safeMint(msg.sender, mintIndex);
    }

    function reserve() external onlyOwner {
        require(!reserveClaimed, "Reserve already claimed");
        reserveClaimed = true;

        uint256 i;
        for (i = 1; i <= RESERVE_SUPPLY; i++) {
            _tokenSupply.increment();
            _safeMint(msg.sender, _tokenSupply.current());
        }
    }

    function setPublicSaleActive(bool isPublicSaleActive_) external onlyOwner {
        isPublicSaleActive = isPublicSaleActive_;
    }

    function mint(uint256 numberOfTokens) external payable nonReentrant {
        uint256 ts = _tokenSupply.current();
        require(isPublicSaleActive, "Public sale is not open yet");
        require(ts + numberOfTokens <= MAX_SUPPLY, "Purchase would exceed max tokens");
        require(PRICE_PER_TOKEN * numberOfTokens <= msg.value, "Ether value sent is not correct");

        for (uint256 i = 1; i <= numberOfTokens; i++) {
            _tokenSupply.increment();
            _safeMint(msg.sender, _tokenSupply.current());
        }
    }

    function setBaseURI(string memory baseURI_) external onlyOwner {
        _baseURIextended = baseURI_;
    }

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

    /**
     * Optional override for modifying the token URI before return.
     */
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override(ERC721)
        returns (string memory)
    {
        string memory uri = super.tokenURI(tokenId);
        return bytes(uri).length > 0 ? string(abi.encodePacked(uri, ".json")) : "";
    }

    function withdraw(address payable to) external onlyOwner nonReentrant {
        uint256 balance = address(this).balance;
        Address.sendValue(to, balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PER_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowListClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAllowListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintAllowList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"claimer","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"onAllowList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"setAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isAllowListActive_","type":"bool"}],"name":"setAllowListActive","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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPublicSaleActive_","type":"bool"}],"name":"setPublicSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600b60016101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280601081526020017f536f636965746879204f472050617373000000000000000000000000000000008152506040518060400160405280600381526020017f534f4700000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000b1929190620001c9565b508060019080519060200190620000ca929190620001c9565b505050620000ed620000e1620000fb60201b60201c565b6200010360201b60201c565b6001600781905550620002de565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001d79062000279565b90600052602060002090601f016020900481019282620001fb576000855562000247565b82601f106200021657805160ff191683800117855562000247565b8280016001018555821562000247579182015b828111156200024657825182559160200191906001019062000229565b5b5090506200025691906200025a565b5090565b5b80821115620002755760008160009055506001016200025b565b5090565b600060028204905060018216806200029257607f821691505b60208210811415620002a957620002a8620002af565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61465b80620002ee6000396000f3fe6080604052600436106101f95760003560e01c806370a082311161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610705578063cd3293de14610742578063e2e06fa314610759578063e985e9c514610782578063f2fde38b146107bf576101f9565b8063a22cb4651461064b578063aa66797b14610674578063b32c56801461069f578063b88d4fde146106dc576101f9565b8063884b3c82116100dc578063884b3c821461059c5780638da5cb5b146105d957806395d89b4114610604578063a0712d681461062f576101f9565b806370a08231146104f4578063715018a614610531578063833b94991461054857806384584d0714610573576101f9565b806329fc6bae1161019057806342842e0e1161015f57806342842e0e1461041157806351cff8d91461043a57806355f804b3146104635780635d3512a91461048c5780636352211e146104b7576101f9565b806329fc6bae146103675780632eb4a7ab1461039257806332cb6b0c146103bd5780633a73c58d146103e8576101f9565b80631122d94a116101cc5780631122d94a146102cc57806318160ddd146102e85780631e84c4131461031357806323b872dd1461033e576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612fec565b6107e8565b6040516102329190613672565b60405180910390f35b34801561024757600080fd5b506102506108ca565b60405161025d91906136a8565b60405180910390f35b34801561027257600080fd5b5061028d6004803603810190610288919061307f565b61095c565b60405161029a919061360b565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190612f19565b6109e1565b005b6102e660048036038101906102e19190612f55565b610af9565b005b3480156102f457600080fd5b506102fd610dc3565b60405161030a9190613a2a565b60405180910390f35b34801561031f57600080fd5b50610328610dd4565b6040516103359190613672565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190612dbf565b610de7565b005b34801561037357600080fd5b5061037c610e47565b6040516103899190613672565b60405180910390f35b34801561039e57600080fd5b506103a7610e5a565b6040516103b4919061368d565b60405180910390f35b3480156103c957600080fd5b506103d2610e60565b6040516103df9190613a2a565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190612f9a565b610e65565b005b34801561041d57600080fd5b5061043860048036038101906104339190612dbf565b610efe565b005b34801561044657600080fd5b50610461600480360381019061045c9190612d5a565b610f1e565b005b34801561046f57600080fd5b5061048a6004803603810190610485919061303e565b611003565b005b34801561049857600080fd5b506104a1611099565b6040516104ae9190613672565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d9919061307f565b6110ac565b6040516104eb919061360b565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190612d31565b61115e565b6040516105289190613a2a565b60405180910390f35b34801561053d57600080fd5b50610546611216565b005b34801561055457600080fd5b5061055d61129e565b60405161056a9190613a2a565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190612fc3565b6112aa565b005b3480156105a857600080fd5b506105c360048036038101906105be9190612d31565b611330565b6040516105d09190613a2a565b60405180910390f35b3480156105e557600080fd5b506105ee611348565b6040516105fb919061360b565b60405180910390f35b34801561061057600080fd5b50610619611372565b60405161062691906136a8565b60405180910390f35b6106496004803603810190610644919061307f565b611404565b005b34801561065757600080fd5b50610672600480360381019061066d9190612edd565b61159f565b005b34801561068057600080fd5b506106896115b5565b6040516106969190613a2a565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190612e89565b6115ba565b6040516106d39190613672565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190612e0e565b6115fc565b005b34801561071157600080fd5b5061072c6004803603810190610727919061307f565b61165e565b60405161073991906136a8565b60405180910390f35b34801561074e57600080fd5b506107576116b4565b005b34801561076557600080fd5b50610780600480360381019061077b9190612f9a565b6117dd565b005b34801561078e57600080fd5b506107a960048036038101906107a49190612d83565b611876565b6040516107b69190613672565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190612d31565b61190a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c357506108c282611a02565b5b9050919050565b6060600080546108d990613d2d565b80601f016020809104026020016040519081016040528092919081815260200182805461090590613d2d565b80156109525780601f1061092757610100808354040283529160200191610952565b820191906000526020600020905b81548152906001019060200180831161093557829003601f168201915b5050505050905090565b600061096782611a6c565b6109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d906138ea565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ec826110ac565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a549061396a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7c611ad8565b73ffffffffffffffffffffffffffffffffffffffff161480610aab5750610aaa81610aa5611ad8565b611876565b5b610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19061386a565b60405180910390fd5b610af48383611ae0565b505050565b60026007541415610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3690613a0a565b60405180910390fd5b6002600781905550600960009054906101000a900460ff16610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d906139ca565b60405180910390fd5b610be133838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506115ba565b610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179061394a565b60405180910390fd5b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c999061380a565b60405180910390fd5b60006001610cb0600d611b99565b610cba9190613b46565b905060fa811115610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf79061370a565b60405180910390fd5b346702c68af0bb1400001115610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d42906139aa565b60405180910390fd5b610d55600d611ba7565b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610da59190613b46565b92505081905550610db63382611bbd565b5060016007819055505050565b6000610dcf600d611b99565b905090565b600b60009054906101000a900460ff1681565b610df8610df2611ad8565b82611bdb565b610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e9061398a565b60405180910390fd5b610e42838383611cb9565b505050565b600960009054906101000a900460ff1681565b60085481565b60fa81565b610e6d611ad8565b73ffffffffffffffffffffffffffffffffffffffff16610e8b611348565b73ffffffffffffffffffffffffffffffffffffffff1614610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed89061390a565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b610f19838383604051806020016040528060008152506115fc565b505050565b610f26611ad8565b73ffffffffffffffffffffffffffffffffffffffff16610f44611348565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f919061390a565b60405180910390fd5b60026007541415610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790613a0a565b60405180910390fd5b60026007819055506000479050610ff78282611f20565b50600160078190555050565b61100b611ad8565b73ffffffffffffffffffffffffffffffffffffffff16611029611348565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110769061390a565b60405180910390fd5b80600c9080519060200190611095929190612a4b565b5050565b600b60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c906138aa565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c69061388a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61121e611ad8565b73ffffffffffffffffffffffffffffffffffffffff1661123c611348565b73ffffffffffffffffffffffffffffffffffffffff1614611292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112899061390a565b60405180910390fd5b61129c6000612014565b565b6702c68af0bb14000081565b6112b2611ad8565b73ffffffffffffffffffffffffffffffffffffffff166112d0611348565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d9061390a565b60405180910390fd5b8060088190555050565b600a6020528060005260406000206000915090505481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461138190613d2d565b80601f01602080910402602001604051908101604052809291908181526020018280546113ad90613d2d565b80156113fa5780601f106113cf576101008083540402835291602001916113fa565b820191906000526020600020905b8154815290600101906020018083116113dd57829003601f168201915b5050505050905090565b6002600754141561144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190613a0a565b60405180910390fd5b6002600781905550600061145e600d611b99565b9050600b60009054906101000a900460ff166114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a69061384a565b60405180910390fd5b60fa82826114bd9190613b46565b11156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f59061370a565b60405180910390fd5b34826702c68af0bb1400006115139190613bcd565b1115611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b906137aa565b60405180910390fd5b6000600190505b8281116115925761156c600d611ba7565b61157f3361157a600d611b99565b611bbd565b808061158a90613d90565b91505061155b565b5050600160078190555050565b6115b16115aa611ad8565b83836120da565b5050565b601e81565b600080836040516020016115ce9190613595565b6040516020818303038152906040528051906020012090506115f38360085483612247565b91505092915050565b61160d611607611ad8565b83611bdb565b61164c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116439061398a565b60405180910390fd5b6116588484848461225e565b50505050565b6060600061166b836122ba565b9050600081511161168b57604051806020016040528060008152506116ac565b8060405160200161169c91906135d4565b6040516020818303038152906040525b915050919050565b6116bc611ad8565b73ffffffffffffffffffffffffffffffffffffffff166116da611348565b73ffffffffffffffffffffffffffffffffffffffff1614611730576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117279061390a565b60405180910390fd5b600b60019054906101000a900460ff1615611780576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611777906139ea565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506000600190505b601e81116117da576117b4600d611ba7565b6117c7336117c2600d611b99565b611bbd565b80806117d290613d90565b9150506117a2565b50565b6117e5611ad8565b73ffffffffffffffffffffffffffffffffffffffff16611803611348565b73ffffffffffffffffffffffffffffffffffffffff1614611859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118509061390a565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611912611ad8565b73ffffffffffffffffffffffffffffffffffffffff16611930611348565b73ffffffffffffffffffffffffffffffffffffffff1614611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d9061390a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed906136ea565b60405180910390fd5b6119ff81612014565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b53836110ac565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b611bd7828260405180602001604052806000815250612361565b5050565b6000611be682611a6c565b611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c9061382a565b60405180910390fd5b6000611c30836110ac565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c9f57508373ffffffffffffffffffffffffffffffffffffffff16611c878461095c565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cb05750611caf8185611876565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cd9826110ac565b73ffffffffffffffffffffffffffffffffffffffff1614611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d269061372a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d969061376a565b60405180910390fd5b611daa8383836123bc565b611db5600082611ae0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e059190613c27565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5c9190613b46565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f1b8383836123c1565b505050565b80471015611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a906137ea565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611f89906135f6565b60006040518083038185875af1925050503d8060008114611fc6576040519150601f19603f3d011682016040523d82523d6000602084013e611fcb565b606091505b505090508061200f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612006906137ca565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121409061378a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161223a9190613672565b60405180910390a3505050565b60008261225485846123c6565b1490509392505050565b612269848484611cb9565b61227584848484612461565b6122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab906136ca565b60405180910390fd5b50505050565b60606122c582611a6c565b612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb9061392a565b60405180910390fd5b600061230e6125f8565b9050600081511161232e5760405180602001604052806000815250612359565b806123388461268a565b6040516020016123499291906135b0565b6040516020818303038152906040525b915050919050565b61236b8383612837565b6123786000848484612461565b6123b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ae906136ca565b60405180910390fd5b505050565b505050565b505050565b60008082905060005b8451811015612456576000858281518110612413577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116124355761242e8382612a11565b9250612442565b61243f8184612a11565b92505b50808061244e90613d90565b9150506123cf565b508091505092915050565b60006124828473ffffffffffffffffffffffffffffffffffffffff16612a28565b156125eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124ab611ad8565b8786866040518563ffffffff1660e01b81526004016124cd9493929190613626565b602060405180830381600087803b1580156124e757600080fd5b505af192505050801561251857506040513d601f19601f820116820180604052508101906125159190613015565b60015b61259b573d8060008114612548576040519150601f19603f3d011682016040523d82523d6000602084013e61254d565b606091505b50600081511415612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a906136ca565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125f0565b600190505b949350505050565b6060600c805461260790613d2d565b80601f016020809104026020016040519081016040528092919081815260200182805461263390613d2d565b80156126805780601f1061265557610100808354040283529160200191612680565b820191906000526020600020905b81548152906001019060200180831161266357829003601f168201915b5050505050905090565b606060008214156126d2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612832565b600082905060005b600082146127045780806126ed90613d90565b915050600a826126fd9190613b9c565b91506126da565b60008167ffffffffffffffff811115612746577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127785781602001600182028036833780820191505090505b5090505b6000851461282b576001826127919190613c27565b9150600a856127a09190613dfd565b60306127ac9190613b46565b60f81b8183815181106127e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128249190613b9c565b945061277c565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e906138ca565b60405180910390fd5b6128b081611a6c565b156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e79061374a565b60405180910390fd5b6128fc600083836123bc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461294c9190613b46565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a0d600083836123c1565b5050565b600082600052816020526040600020905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612a5790613d2d565b90600052602060002090601f016020900481019282612a795760008555612ac0565b82601f10612a9257805160ff1916838001178555612ac0565b82800160010185558215612ac0579182015b82811115612abf578251825591602001919060010190612aa4565b5b509050612acd9190612ad1565b5090565b5b80821115612aea576000816000905550600101612ad2565b5090565b6000612b01612afc84613a6a565b613a45565b90508083825260208201905082856020860282011115612b2057600080fd5b60005b85811015612b505781612b368882612c89565b845260208401935060208301925050600181019050612b23565b5050509392505050565b6000612b6d612b6884613a96565b613a45565b905082815260208101848484011115612b8557600080fd5b612b90848285613ceb565b509392505050565b6000612bab612ba684613ac7565b613a45565b905082815260208101848484011115612bc357600080fd5b612bce848285613ceb565b509392505050565b600081359050612be58161459b565b92915050565b600081359050612bfa816145b2565b92915050565b60008083601f840112612c1257600080fd5b8235905067ffffffffffffffff811115612c2b57600080fd5b602083019150836020820283011115612c4357600080fd5b9250929050565b600082601f830112612c5b57600080fd5b8135612c6b848260208601612aee565b91505092915050565b600081359050612c83816145c9565b92915050565b600081359050612c98816145e0565b92915050565b600081359050612cad816145f7565b92915050565b600081519050612cc2816145f7565b92915050565b600082601f830112612cd957600080fd5b8135612ce9848260208601612b5a565b91505092915050565b600082601f830112612d0357600080fd5b8135612d13848260208601612b98565b91505092915050565b600081359050612d2b8161460e565b92915050565b600060208284031215612d4357600080fd5b6000612d5184828501612bd6565b91505092915050565b600060208284031215612d6c57600080fd5b6000612d7a84828501612beb565b91505092915050565b60008060408385031215612d9657600080fd5b6000612da485828601612bd6565b9250506020612db585828601612bd6565b9150509250929050565b600080600060608486031215612dd457600080fd5b6000612de286828701612bd6565b9350506020612df386828701612bd6565b9250506040612e0486828701612d1c565b9150509250925092565b60008060008060808587031215612e2457600080fd5b6000612e3287828801612bd6565b9450506020612e4387828801612bd6565b9350506040612e5487828801612d1c565b925050606085013567ffffffffffffffff811115612e7157600080fd5b612e7d87828801612cc8565b91505092959194509250565b60008060408385031215612e9c57600080fd5b6000612eaa85828601612bd6565b925050602083013567ffffffffffffffff811115612ec757600080fd5b612ed385828601612c4a565b9150509250929050565b60008060408385031215612ef057600080fd5b6000612efe85828601612bd6565b9250506020612f0f85828601612c74565b9150509250929050565b60008060408385031215612f2c57600080fd5b6000612f3a85828601612bd6565b9250506020612f4b85828601612d1c565b9150509250929050565b60008060208385031215612f6857600080fd5b600083013567ffffffffffffffff811115612f8257600080fd5b612f8e85828601612c00565b92509250509250929050565b600060208284031215612fac57600080fd5b6000612fba84828501612c74565b91505092915050565b600060208284031215612fd557600080fd5b6000612fe384828501612c89565b91505092915050565b600060208284031215612ffe57600080fd5b600061300c84828501612c9e565b91505092915050565b60006020828403121561302757600080fd5b600061303584828501612cb3565b91505092915050565b60006020828403121561305057600080fd5b600082013567ffffffffffffffff81111561306a57600080fd5b61307684828501612cf2565b91505092915050565b60006020828403121561309157600080fd5b600061309f84828501612d1c565b91505092915050565b6130b181613c5b565b82525050565b6130c86130c382613c5b565b613dd9565b82525050565b6130d781613c7f565b82525050565b6130e681613c8b565b82525050565b60006130f782613af8565b6131018185613b0e565b9350613111818560208601613cfa565b61311a81613eea565b840191505092915050565b600061313082613b03565b61313a8185613b2a565b935061314a818560208601613cfa565b61315381613eea565b840191505092915050565b600061316982613b03565b6131738185613b3b565b9350613183818560208601613cfa565b80840191505092915050565b600061319c603283613b2a565b91506131a782613f08565b604082019050919050565b60006131bf602683613b2a565b91506131ca82613f57565b604082019050919050565b60006131e2602083613b2a565b91506131ed82613fa6565b602082019050919050565b6000613205602583613b2a565b915061321082613fcf565b604082019050919050565b6000613228601c83613b2a565b91506132338261401e565b602082019050919050565b600061324b602483613b2a565b915061325682614047565b604082019050919050565b600061326e601983613b2a565b915061327982614096565b602082019050919050565b6000613291601f83613b2a565b915061329c826140bf565b602082019050919050565b60006132b4603a83613b2a565b91506132bf826140e8565b604082019050919050565b60006132d7601d83613b2a565b91506132e282614137565b602082019050919050565b60006132fa601583613b2a565b915061330582614160565b602082019050919050565b600061331d602c83613b2a565b915061332882614189565b604082019050919050565b6000613340601b83613b2a565b915061334b826141d8565b602082019050919050565b6000613363603883613b2a565b915061336e82614201565b604082019050919050565b6000613386602a83613b2a565b915061339182614250565b604082019050919050565b60006133a9602983613b2a565b91506133b48261429f565b604082019050919050565b60006133cc602083613b2a565b91506133d7826142ee565b602082019050919050565b60006133ef602c83613b2a565b91506133fa82614317565b604082019050919050565b6000613412600583613b3b565b915061341d82614366565b600582019050919050565b6000613435602083613b2a565b91506134408261438f565b602082019050919050565b6000613458602f83613b2a565b9150613463826143b8565b604082019050919050565b600061347b601983613b2a565b915061348682614407565b602082019050919050565b600061349e602183613b2a565b91506134a982614430565b604082019050919050565b60006134c1600083613b1f565b91506134cc8261447f565b600082019050919050565b60006134e4603183613b2a565b91506134ef82614482565b604082019050919050565b6000613507602183613b2a565b9150613512826144d1565b604082019050919050565b600061352a601883613b2a565b915061353582614520565b602082019050919050565b600061354d601783613b2a565b915061355882614549565b602082019050919050565b6000613570601f83613b2a565b915061357b82614572565b602082019050919050565b61358f81613ce1565b82525050565b60006135a182846130b7565b60148201915081905092915050565b60006135bc828561315e565b91506135c8828461315e565b91508190509392505050565b60006135e0828461315e565b91506135eb82613405565b915081905092915050565b6000613601826134b4565b9150819050919050565b600060208201905061362060008301846130a8565b92915050565b600060808201905061363b60008301876130a8565b61364860208301866130a8565b6136556040830185613586565b818103606083015261366781846130ec565b905095945050505050565b600060208201905061368760008301846130ce565b92915050565b60006020820190506136a260008301846130dd565b92915050565b600060208201905081810360008301526136c28184613125565b905092915050565b600060208201905081810360008301526136e38161318f565b9050919050565b60006020820190508181036000830152613703816131b2565b9050919050565b60006020820190508181036000830152613723816131d5565b9050919050565b60006020820190508181036000830152613743816131f8565b9050919050565b600060208201905081810360008301526137638161321b565b9050919050565b600060208201905081810360008301526137838161323e565b9050919050565b600060208201905081810360008301526137a381613261565b9050919050565b600060208201905081810360008301526137c381613284565b9050919050565b600060208201905081810360008301526137e3816132a7565b9050919050565b60006020820190508181036000830152613803816132ca565b9050919050565b60006020820190508181036000830152613823816132ed565b9050919050565b6000602082019050818103600083015261384381613310565b9050919050565b6000602082019050818103600083015261386381613333565b9050919050565b6000602082019050818103600083015261388381613356565b9050919050565b600060208201905081810360008301526138a381613379565b9050919050565b600060208201905081810360008301526138c38161339c565b9050919050565b600060208201905081810360008301526138e3816133bf565b9050919050565b60006020820190508181036000830152613903816133e2565b9050919050565b6000602082019050818103600083015261392381613428565b9050919050565b600060208201905081810360008301526139438161344b565b9050919050565b600060208201905081810360008301526139638161346e565b9050919050565b6000602082019050818103600083015261398381613491565b9050919050565b600060208201905081810360008301526139a3816134d7565b9050919050565b600060208201905081810360008301526139c3816134fa565b9050919050565b600060208201905081810360008301526139e38161351d565b9050919050565b60006020820190508181036000830152613a0381613540565b9050919050565b60006020820190508181036000830152613a2381613563565b9050919050565b6000602082019050613a3f6000830184613586565b92915050565b6000613a4f613a60565b9050613a5b8282613d5f565b919050565b6000604051905090565b600067ffffffffffffffff821115613a8557613a84613ebb565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ab157613ab0613ebb565b5b613aba82613eea565b9050602081019050919050565b600067ffffffffffffffff821115613ae257613ae1613ebb565b5b613aeb82613eea565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b5182613ce1565b9150613b5c83613ce1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b9157613b90613e2e565b5b828201905092915050565b6000613ba782613ce1565b9150613bb283613ce1565b925082613bc257613bc1613e5d565b5b828204905092915050565b6000613bd882613ce1565b9150613be383613ce1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c1c57613c1b613e2e565b5b828202905092915050565b6000613c3282613ce1565b9150613c3d83613ce1565b925082821015613c5057613c4f613e2e565b5b828203905092915050565b6000613c6682613cc1565b9050919050565b6000613c7882613cc1565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d18578082015181840152602081019050613cfd565b83811115613d27576000848401525b50505050565b60006002820490506001821680613d4557607f821691505b60208210811415613d5957613d58613e8c565b5b50919050565b613d6882613eea565b810181811067ffffffffffffffff82111715613d8757613d86613ebb565b5b80604052505050565b6000613d9b82613ce1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dce57613dcd613e2e565b5b600182019050919050565b6000613de482613deb565b9050919050565b6000613df682613efb565b9050919050565b6000613e0882613ce1565b9150613e1383613ce1565b925082613e2357613e22613e5d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e73600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f546f6b656e20616c726561647920636c61696d65640000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206f70656e207965740000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f41646472657373206e6f7420696e20616c6c6f77206c69737400000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e743b20636865636b20707269636560008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f416c6c6f77206c697374206973206e6f74206163746976650000000000000000600082015250565b7f5265736572766520616c726561647920636c61696d6564000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6145a481613c5b565b81146145af57600080fd5b50565b6145bb81613c6d565b81146145c657600080fd5b50565b6145d281613c7f565b81146145dd57600080fd5b50565b6145e981613c8b565b81146145f457600080fd5b50565b61460081613c95565b811461460b57600080fd5b50565b61461781613ce1565b811461462257600080fd5b5056fea264697066735822122080d76e6a4b7d731f3e0822f45c8ad06658c1077b15aa453d489506cb6ed6acde64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106101f95760003560e01c806370a082311161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610705578063cd3293de14610742578063e2e06fa314610759578063e985e9c514610782578063f2fde38b146107bf576101f9565b8063a22cb4651461064b578063aa66797b14610674578063b32c56801461069f578063b88d4fde146106dc576101f9565b8063884b3c82116100dc578063884b3c821461059c5780638da5cb5b146105d957806395d89b4114610604578063a0712d681461062f576101f9565b806370a08231146104f4578063715018a614610531578063833b94991461054857806384584d0714610573576101f9565b806329fc6bae1161019057806342842e0e1161015f57806342842e0e1461041157806351cff8d91461043a57806355f804b3146104635780635d3512a91461048c5780636352211e146104b7576101f9565b806329fc6bae146103675780632eb4a7ab1461039257806332cb6b0c146103bd5780633a73c58d146103e8576101f9565b80631122d94a116101cc5780631122d94a146102cc57806318160ddd146102e85780631e84c4131461031357806323b872dd1461033e576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612fec565b6107e8565b6040516102329190613672565b60405180910390f35b34801561024757600080fd5b506102506108ca565b60405161025d91906136a8565b60405180910390f35b34801561027257600080fd5b5061028d6004803603810190610288919061307f565b61095c565b60405161029a919061360b565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190612f19565b6109e1565b005b6102e660048036038101906102e19190612f55565b610af9565b005b3480156102f457600080fd5b506102fd610dc3565b60405161030a9190613a2a565b60405180910390f35b34801561031f57600080fd5b50610328610dd4565b6040516103359190613672565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190612dbf565b610de7565b005b34801561037357600080fd5b5061037c610e47565b6040516103899190613672565b60405180910390f35b34801561039e57600080fd5b506103a7610e5a565b6040516103b4919061368d565b60405180910390f35b3480156103c957600080fd5b506103d2610e60565b6040516103df9190613a2a565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190612f9a565b610e65565b005b34801561041d57600080fd5b5061043860048036038101906104339190612dbf565b610efe565b005b34801561044657600080fd5b50610461600480360381019061045c9190612d5a565b610f1e565b005b34801561046f57600080fd5b5061048a6004803603810190610485919061303e565b611003565b005b34801561049857600080fd5b506104a1611099565b6040516104ae9190613672565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d9919061307f565b6110ac565b6040516104eb919061360b565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190612d31565b61115e565b6040516105289190613a2a565b60405180910390f35b34801561053d57600080fd5b50610546611216565b005b34801561055457600080fd5b5061055d61129e565b60405161056a9190613a2a565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190612fc3565b6112aa565b005b3480156105a857600080fd5b506105c360048036038101906105be9190612d31565b611330565b6040516105d09190613a2a565b60405180910390f35b3480156105e557600080fd5b506105ee611348565b6040516105fb919061360b565b60405180910390f35b34801561061057600080fd5b50610619611372565b60405161062691906136a8565b60405180910390f35b6106496004803603810190610644919061307f565b611404565b005b34801561065757600080fd5b50610672600480360381019061066d9190612edd565b61159f565b005b34801561068057600080fd5b506106896115b5565b6040516106969190613a2a565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190612e89565b6115ba565b6040516106d39190613672565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190612e0e565b6115fc565b005b34801561071157600080fd5b5061072c6004803603810190610727919061307f565b61165e565b60405161073991906136a8565b60405180910390f35b34801561074e57600080fd5b506107576116b4565b005b34801561076557600080fd5b50610780600480360381019061077b9190612f9a565b6117dd565b005b34801561078e57600080fd5b506107a960048036038101906107a49190612d83565b611876565b6040516107b69190613672565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190612d31565b61190a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c357506108c282611a02565b5b9050919050565b6060600080546108d990613d2d565b80601f016020809104026020016040519081016040528092919081815260200182805461090590613d2d565b80156109525780601f1061092757610100808354040283529160200191610952565b820191906000526020600020905b81548152906001019060200180831161093557829003601f168201915b5050505050905090565b600061096782611a6c565b6109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d906138ea565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ec826110ac565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a549061396a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7c611ad8565b73ffffffffffffffffffffffffffffffffffffffff161480610aab5750610aaa81610aa5611ad8565b611876565b5b610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19061386a565b60405180910390fd5b610af48383611ae0565b505050565b60026007541415610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3690613a0a565b60405180910390fd5b6002600781905550600960009054906101000a900460ff16610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d906139ca565b60405180910390fd5b610be133838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506115ba565b610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179061394a565b60405180910390fd5b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c999061380a565b60405180910390fd5b60006001610cb0600d611b99565b610cba9190613b46565b905060fa811115610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf79061370a565b60405180910390fd5b346702c68af0bb1400001115610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d42906139aa565b60405180910390fd5b610d55600d611ba7565b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610da59190613b46565b92505081905550610db63382611bbd565b5060016007819055505050565b6000610dcf600d611b99565b905090565b600b60009054906101000a900460ff1681565b610df8610df2611ad8565b82611bdb565b610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e9061398a565b60405180910390fd5b610e42838383611cb9565b505050565b600960009054906101000a900460ff1681565b60085481565b60fa81565b610e6d611ad8565b73ffffffffffffffffffffffffffffffffffffffff16610e8b611348565b73ffffffffffffffffffffffffffffffffffffffff1614610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed89061390a565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b610f19838383604051806020016040528060008152506115fc565b505050565b610f26611ad8565b73ffffffffffffffffffffffffffffffffffffffff16610f44611348565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f919061390a565b60405180910390fd5b60026007541415610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790613a0a565b60405180910390fd5b60026007819055506000479050610ff78282611f20565b50600160078190555050565b61100b611ad8565b73ffffffffffffffffffffffffffffffffffffffff16611029611348565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110769061390a565b60405180910390fd5b80600c9080519060200190611095929190612a4b565b5050565b600b60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c906138aa565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c69061388a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61121e611ad8565b73ffffffffffffffffffffffffffffffffffffffff1661123c611348565b73ffffffffffffffffffffffffffffffffffffffff1614611292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112899061390a565b60405180910390fd5b61129c6000612014565b565b6702c68af0bb14000081565b6112b2611ad8565b73ffffffffffffffffffffffffffffffffffffffff166112d0611348565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d9061390a565b60405180910390fd5b8060088190555050565b600a6020528060005260406000206000915090505481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461138190613d2d565b80601f01602080910402602001604051908101604052809291908181526020018280546113ad90613d2d565b80156113fa5780601f106113cf576101008083540402835291602001916113fa565b820191906000526020600020905b8154815290600101906020018083116113dd57829003601f168201915b5050505050905090565b6002600754141561144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190613a0a565b60405180910390fd5b6002600781905550600061145e600d611b99565b9050600b60009054906101000a900460ff166114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a69061384a565b60405180910390fd5b60fa82826114bd9190613b46565b11156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f59061370a565b60405180910390fd5b34826702c68af0bb1400006115139190613bcd565b1115611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b906137aa565b60405180910390fd5b6000600190505b8281116115925761156c600d611ba7565b61157f3361157a600d611b99565b611bbd565b808061158a90613d90565b91505061155b565b5050600160078190555050565b6115b16115aa611ad8565b83836120da565b5050565b601e81565b600080836040516020016115ce9190613595565b6040516020818303038152906040528051906020012090506115f38360085483612247565b91505092915050565b61160d611607611ad8565b83611bdb565b61164c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116439061398a565b60405180910390fd5b6116588484848461225e565b50505050565b6060600061166b836122ba565b9050600081511161168b57604051806020016040528060008152506116ac565b8060405160200161169c91906135d4565b6040516020818303038152906040525b915050919050565b6116bc611ad8565b73ffffffffffffffffffffffffffffffffffffffff166116da611348565b73ffffffffffffffffffffffffffffffffffffffff1614611730576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117279061390a565b60405180910390fd5b600b60019054906101000a900460ff1615611780576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611777906139ea565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506000600190505b601e81116117da576117b4600d611ba7565b6117c7336117c2600d611b99565b611bbd565b80806117d290613d90565b9150506117a2565b50565b6117e5611ad8565b73ffffffffffffffffffffffffffffffffffffffff16611803611348565b73ffffffffffffffffffffffffffffffffffffffff1614611859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118509061390a565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611912611ad8565b73ffffffffffffffffffffffffffffffffffffffff16611930611348565b73ffffffffffffffffffffffffffffffffffffffff1614611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d9061390a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed906136ea565b60405180910390fd5b6119ff81612014565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b53836110ac565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b611bd7828260405180602001604052806000815250612361565b5050565b6000611be682611a6c565b611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c9061382a565b60405180910390fd5b6000611c30836110ac565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c9f57508373ffffffffffffffffffffffffffffffffffffffff16611c878461095c565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cb05750611caf8185611876565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cd9826110ac565b73ffffffffffffffffffffffffffffffffffffffff1614611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d269061372a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d969061376a565b60405180910390fd5b611daa8383836123bc565b611db5600082611ae0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e059190613c27565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5c9190613b46565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f1b8383836123c1565b505050565b80471015611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a906137ea565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611f89906135f6565b60006040518083038185875af1925050503d8060008114611fc6576040519150601f19603f3d011682016040523d82523d6000602084013e611fcb565b606091505b505090508061200f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612006906137ca565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121409061378a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161223a9190613672565b60405180910390a3505050565b60008261225485846123c6565b1490509392505050565b612269848484611cb9565b61227584848484612461565b6122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab906136ca565b60405180910390fd5b50505050565b60606122c582611a6c565b612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb9061392a565b60405180910390fd5b600061230e6125f8565b9050600081511161232e5760405180602001604052806000815250612359565b806123388461268a565b6040516020016123499291906135b0565b6040516020818303038152906040525b915050919050565b61236b8383612837565b6123786000848484612461565b6123b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ae906136ca565b60405180910390fd5b505050565b505050565b505050565b60008082905060005b8451811015612456576000858281518110612413577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116124355761242e8382612a11565b9250612442565b61243f8184612a11565b92505b50808061244e90613d90565b9150506123cf565b508091505092915050565b60006124828473ffffffffffffffffffffffffffffffffffffffff16612a28565b156125eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124ab611ad8565b8786866040518563ffffffff1660e01b81526004016124cd9493929190613626565b602060405180830381600087803b1580156124e757600080fd5b505af192505050801561251857506040513d601f19601f820116820180604052508101906125159190613015565b60015b61259b573d8060008114612548576040519150601f19603f3d011682016040523d82523d6000602084013e61254d565b606091505b50600081511415612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a906136ca565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125f0565b600190505b949350505050565b6060600c805461260790613d2d565b80601f016020809104026020016040519081016040528092919081815260200182805461263390613d2d565b80156126805780601f1061265557610100808354040283529160200191612680565b820191906000526020600020905b81548152906001019060200180831161266357829003601f168201915b5050505050905090565b606060008214156126d2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612832565b600082905060005b600082146127045780806126ed90613d90565b915050600a826126fd9190613b9c565b91506126da565b60008167ffffffffffffffff811115612746577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127785781602001600182028036833780820191505090505b5090505b6000851461282b576001826127919190613c27565b9150600a856127a09190613dfd565b60306127ac9190613b46565b60f81b8183815181106127e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128249190613b9c565b945061277c565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e906138ca565b60405180910390fd5b6128b081611a6c565b156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e79061374a565b60405180910390fd5b6128fc600083836123bc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461294c9190613b46565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a0d600083836123c1565b5050565b600082600052816020526040600020905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612a5790613d2d565b90600052602060002090601f016020900481019282612a795760008555612ac0565b82601f10612a9257805160ff1916838001178555612ac0565b82800160010185558215612ac0579182015b82811115612abf578251825591602001919060010190612aa4565b5b509050612acd9190612ad1565b5090565b5b80821115612aea576000816000905550600101612ad2565b5090565b6000612b01612afc84613a6a565b613a45565b90508083825260208201905082856020860282011115612b2057600080fd5b60005b85811015612b505781612b368882612c89565b845260208401935060208301925050600181019050612b23565b5050509392505050565b6000612b6d612b6884613a96565b613a45565b905082815260208101848484011115612b8557600080fd5b612b90848285613ceb565b509392505050565b6000612bab612ba684613ac7565b613a45565b905082815260208101848484011115612bc357600080fd5b612bce848285613ceb565b509392505050565b600081359050612be58161459b565b92915050565b600081359050612bfa816145b2565b92915050565b60008083601f840112612c1257600080fd5b8235905067ffffffffffffffff811115612c2b57600080fd5b602083019150836020820283011115612c4357600080fd5b9250929050565b600082601f830112612c5b57600080fd5b8135612c6b848260208601612aee565b91505092915050565b600081359050612c83816145c9565b92915050565b600081359050612c98816145e0565b92915050565b600081359050612cad816145f7565b92915050565b600081519050612cc2816145f7565b92915050565b600082601f830112612cd957600080fd5b8135612ce9848260208601612b5a565b91505092915050565b600082601f830112612d0357600080fd5b8135612d13848260208601612b98565b91505092915050565b600081359050612d2b8161460e565b92915050565b600060208284031215612d4357600080fd5b6000612d5184828501612bd6565b91505092915050565b600060208284031215612d6c57600080fd5b6000612d7a84828501612beb565b91505092915050565b60008060408385031215612d9657600080fd5b6000612da485828601612bd6565b9250506020612db585828601612bd6565b9150509250929050565b600080600060608486031215612dd457600080fd5b6000612de286828701612bd6565b9350506020612df386828701612bd6565b9250506040612e0486828701612d1c565b9150509250925092565b60008060008060808587031215612e2457600080fd5b6000612e3287828801612bd6565b9450506020612e4387828801612bd6565b9350506040612e5487828801612d1c565b925050606085013567ffffffffffffffff811115612e7157600080fd5b612e7d87828801612cc8565b91505092959194509250565b60008060408385031215612e9c57600080fd5b6000612eaa85828601612bd6565b925050602083013567ffffffffffffffff811115612ec757600080fd5b612ed385828601612c4a565b9150509250929050565b60008060408385031215612ef057600080fd5b6000612efe85828601612bd6565b9250506020612f0f85828601612c74565b9150509250929050565b60008060408385031215612f2c57600080fd5b6000612f3a85828601612bd6565b9250506020612f4b85828601612d1c565b9150509250929050565b60008060208385031215612f6857600080fd5b600083013567ffffffffffffffff811115612f8257600080fd5b612f8e85828601612c00565b92509250509250929050565b600060208284031215612fac57600080fd5b6000612fba84828501612c74565b91505092915050565b600060208284031215612fd557600080fd5b6000612fe384828501612c89565b91505092915050565b600060208284031215612ffe57600080fd5b600061300c84828501612c9e565b91505092915050565b60006020828403121561302757600080fd5b600061303584828501612cb3565b91505092915050565b60006020828403121561305057600080fd5b600082013567ffffffffffffffff81111561306a57600080fd5b61307684828501612cf2565b91505092915050565b60006020828403121561309157600080fd5b600061309f84828501612d1c565b91505092915050565b6130b181613c5b565b82525050565b6130c86130c382613c5b565b613dd9565b82525050565b6130d781613c7f565b82525050565b6130e681613c8b565b82525050565b60006130f782613af8565b6131018185613b0e565b9350613111818560208601613cfa565b61311a81613eea565b840191505092915050565b600061313082613b03565b61313a8185613b2a565b935061314a818560208601613cfa565b61315381613eea565b840191505092915050565b600061316982613b03565b6131738185613b3b565b9350613183818560208601613cfa565b80840191505092915050565b600061319c603283613b2a565b91506131a782613f08565b604082019050919050565b60006131bf602683613b2a565b91506131ca82613f57565b604082019050919050565b60006131e2602083613b2a565b91506131ed82613fa6565b602082019050919050565b6000613205602583613b2a565b915061321082613fcf565b604082019050919050565b6000613228601c83613b2a565b91506132338261401e565b602082019050919050565b600061324b602483613b2a565b915061325682614047565b604082019050919050565b600061326e601983613b2a565b915061327982614096565b602082019050919050565b6000613291601f83613b2a565b915061329c826140bf565b602082019050919050565b60006132b4603a83613b2a565b91506132bf826140e8565b604082019050919050565b60006132d7601d83613b2a565b91506132e282614137565b602082019050919050565b60006132fa601583613b2a565b915061330582614160565b602082019050919050565b600061331d602c83613b2a565b915061332882614189565b604082019050919050565b6000613340601b83613b2a565b915061334b826141d8565b602082019050919050565b6000613363603883613b2a565b915061336e82614201565b604082019050919050565b6000613386602a83613b2a565b915061339182614250565b604082019050919050565b60006133a9602983613b2a565b91506133b48261429f565b604082019050919050565b60006133cc602083613b2a565b91506133d7826142ee565b602082019050919050565b60006133ef602c83613b2a565b91506133fa82614317565b604082019050919050565b6000613412600583613b3b565b915061341d82614366565b600582019050919050565b6000613435602083613b2a565b91506134408261438f565b602082019050919050565b6000613458602f83613b2a565b9150613463826143b8565b604082019050919050565b600061347b601983613b2a565b915061348682614407565b602082019050919050565b600061349e602183613b2a565b91506134a982614430565b604082019050919050565b60006134c1600083613b1f565b91506134cc8261447f565b600082019050919050565b60006134e4603183613b2a565b91506134ef82614482565b604082019050919050565b6000613507602183613b2a565b9150613512826144d1565b604082019050919050565b600061352a601883613b2a565b915061353582614520565b602082019050919050565b600061354d601783613b2a565b915061355882614549565b602082019050919050565b6000613570601f83613b2a565b915061357b82614572565b602082019050919050565b61358f81613ce1565b82525050565b60006135a182846130b7565b60148201915081905092915050565b60006135bc828561315e565b91506135c8828461315e565b91508190509392505050565b60006135e0828461315e565b91506135eb82613405565b915081905092915050565b6000613601826134b4565b9150819050919050565b600060208201905061362060008301846130a8565b92915050565b600060808201905061363b60008301876130a8565b61364860208301866130a8565b6136556040830185613586565b818103606083015261366781846130ec565b905095945050505050565b600060208201905061368760008301846130ce565b92915050565b60006020820190506136a260008301846130dd565b92915050565b600060208201905081810360008301526136c28184613125565b905092915050565b600060208201905081810360008301526136e38161318f565b9050919050565b60006020820190508181036000830152613703816131b2565b9050919050565b60006020820190508181036000830152613723816131d5565b9050919050565b60006020820190508181036000830152613743816131f8565b9050919050565b600060208201905081810360008301526137638161321b565b9050919050565b600060208201905081810360008301526137838161323e565b9050919050565b600060208201905081810360008301526137a381613261565b9050919050565b600060208201905081810360008301526137c381613284565b9050919050565b600060208201905081810360008301526137e3816132a7565b9050919050565b60006020820190508181036000830152613803816132ca565b9050919050565b60006020820190508181036000830152613823816132ed565b9050919050565b6000602082019050818103600083015261384381613310565b9050919050565b6000602082019050818103600083015261386381613333565b9050919050565b6000602082019050818103600083015261388381613356565b9050919050565b600060208201905081810360008301526138a381613379565b9050919050565b600060208201905081810360008301526138c38161339c565b9050919050565b600060208201905081810360008301526138e3816133bf565b9050919050565b60006020820190508181036000830152613903816133e2565b9050919050565b6000602082019050818103600083015261392381613428565b9050919050565b600060208201905081810360008301526139438161344b565b9050919050565b600060208201905081810360008301526139638161346e565b9050919050565b6000602082019050818103600083015261398381613491565b9050919050565b600060208201905081810360008301526139a3816134d7565b9050919050565b600060208201905081810360008301526139c3816134fa565b9050919050565b600060208201905081810360008301526139e38161351d565b9050919050565b60006020820190508181036000830152613a0381613540565b9050919050565b60006020820190508181036000830152613a2381613563565b9050919050565b6000602082019050613a3f6000830184613586565b92915050565b6000613a4f613a60565b9050613a5b8282613d5f565b919050565b6000604051905090565b600067ffffffffffffffff821115613a8557613a84613ebb565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ab157613ab0613ebb565b5b613aba82613eea565b9050602081019050919050565b600067ffffffffffffffff821115613ae257613ae1613ebb565b5b613aeb82613eea565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b5182613ce1565b9150613b5c83613ce1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b9157613b90613e2e565b5b828201905092915050565b6000613ba782613ce1565b9150613bb283613ce1565b925082613bc257613bc1613e5d565b5b828204905092915050565b6000613bd882613ce1565b9150613be383613ce1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c1c57613c1b613e2e565b5b828202905092915050565b6000613c3282613ce1565b9150613c3d83613ce1565b925082821015613c5057613c4f613e2e565b5b828203905092915050565b6000613c6682613cc1565b9050919050565b6000613c7882613cc1565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d18578082015181840152602081019050613cfd565b83811115613d27576000848401525b50505050565b60006002820490506001821680613d4557607f821691505b60208210811415613d5957613d58613e8c565b5b50919050565b613d6882613eea565b810181811067ffffffffffffffff82111715613d8757613d86613ebb565b5b80604052505050565b6000613d9b82613ce1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dce57613dcd613e2e565b5b600182019050919050565b6000613de482613deb565b9050919050565b6000613df682613efb565b9050919050565b6000613e0882613ce1565b9150613e1383613ce1565b925082613e2357613e22613e5d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e73600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f546f6b656e20616c726561647920636c61696d65640000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206f70656e207965740000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f41646472657373206e6f7420696e20616c6c6f77206c69737400000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e743b20636865636b20707269636560008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f416c6c6f77206c697374206973206e6f74206163746976650000000000000000600082015250565b7f5265736572766520616c726561647920636c61696d6564000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6145a481613c5b565b81146145af57600080fd5b50565b6145bb81613c6d565b81146145c657600080fd5b50565b6145d281613c7f565b81146145dd57600080fd5b50565b6145e981613c8b565b81146145f457600080fd5b50565b61460081613c95565b811461460b57600080fd5b50565b61461781613ce1565b811461462257600080fd5b5056fea264697066735822122080d76e6a4b7d731f3e0822f45c8ad06658c1077b15aa453d489506cb6ed6acde64736f6c63430008040033

Deployed Bytecode Sourcemap

44370:4165:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21696:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22691:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24263:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23786:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46030:668;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45158:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44783:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25063:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44687:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44655:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44861:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45380:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25510:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48363:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47733:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44820:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22385:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22115:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40710:103;;;;;;;;;;;;;:::i;:::-;;44958:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45267:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44723:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40059:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22860:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47176:549;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24556:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44908:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45802:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25766:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48062:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46706:321;;;;;;;;;;;;;:::i;:::-;;47035:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24782:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40968:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21696:355;21843:4;21900:25;21885:40;;;:11;:40;;;;:105;;;;21957:33;21942:48;;;:11;:48;;;;21885:105;:158;;;;22007:36;22031:11;22007:23;:36::i;:::-;21885:158;21865:178;;21696:355;;;:::o;22691:100::-;22745:13;22778:5;22771:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22691:100;:::o;24263:221::-;24339:7;24367:16;24375:7;24367;:16::i;:::-;24359:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24452:15;:24;24468:7;24452:24;;;;;;;;;;;;;;;;;;;;;24445:31;;24263:221;;;:::o;23786:411::-;23867:13;23883:23;23898:7;23883:14;:23::i;:::-;23867:39;;23931:5;23925:11;;:2;:11;;;;23917:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24025:5;24009:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24034:37;24051:5;24058:12;:10;:12::i;:::-;24034:16;:37::i;:::-;24009:62;23987:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24168:21;24177:2;24181:7;24168:8;:21::i;:::-;23786:411;;;:::o;46030:668::-;43343:1;43941:7;;:19;;43933:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43343:1;44074:7;:18;;;;46134:17:::1;;;;;;;;;;;46126:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;46199:36;46211:10;46223:11;;46199:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:36::i;:::-;46191:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46316:1;46284:16;:28;46301:10;46284:28;;;;;;;;;;;;;;;;:33;46276:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46356:17;46401:1;46376:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;46356:46;;44898:3;46421:9;:23;;46413:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46519:9;45000;46500:28;;46492:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46579:24;:12;:22;:24::i;:::-;46646:1;46614:16;:28;46631:10;46614:28;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;46658:32;46668:10;46680:9;46658;:32::i;:::-;44105:1;43299::::0;44253:7;:22;;;;46030:668;;:::o;45158:101::-;45202:7;45229:22;:12;:20;:22::i;:::-;45222:29;;45158:101;:::o;44783:30::-;;;;;;;;;;;;;:::o;25063:376::-;25272:41;25291:12;:10;:12::i;:::-;25305:7;25272:18;:41::i;:::-;25250:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25403:28;25413:4;25419:2;25423:7;25403:9;:28::i;:::-;25063:376;;;:::o;44687:29::-;;;;;;;;;;;;;:::o;44655:25::-;;;;:::o;44861:40::-;44898:3;44861:40;:::o;45380:129::-;40290:12;:10;:12::i;:::-;40279:23;;:7;:5;:7::i;:::-;:23;;;40271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45483:18:::1;45463:17;;:38;;;;;;;;;;;;;;;;;;45380:129:::0;:::o;25510:185::-;25648:39;25665:4;25671:2;25675:7;25648:39;;;;;;;;;;;;:16;:39::i;:::-;25510:185;;;:::o;48363:169::-;40290:12;:10;:12::i;:::-;40279:23;;:7;:5;:7::i;:::-;:23;;;40271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43343:1:::1;43941:7;;:19;;43933:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43343:1;44074:7;:18;;;;48444:15:::2;48462:21;48444:39;;48494:30;48512:2;48516:7;48494:17;:30::i;:::-;44105:1;43299::::1;44253:7;:22;;;;48363:169:::0;:::o;47733:109::-;40290:12;:10;:12::i;:::-;40279:23;;:7;:5;:7::i;:::-;:23;;;40271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47826:8:::1;47807:16;:27;;;;;;;;;;;;:::i;:::-;;47733:109:::0;:::o;44820:34::-;;;;;;;;;;;;;:::o;22385:239::-;22457:7;22477:13;22493:7;:16;22501:7;22493:16;;;;;;;;;;;;;;;;;;;;;22477:32;;22545:1;22528:19;;:5;:19;;;;22520:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22611:5;22604:12;;;22385:239;;;:::o;22115:208::-;22187:7;22232:1;22215:19;;:5;:19;;;;22207:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22299:9;:16;22309:5;22299:16;;;;;;;;;;;;;;;;22292:23;;22115:208;;;:::o;40710:103::-;40290:12;:10;:12::i;:::-;40279:23;;:7;:5;:7::i;:::-;:23;;;40271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40775:30:::1;40802:1;40775:18;:30::i;:::-;40710:103::o:0;44958:51::-;45000:9;44958:51;:::o;45267:105::-;40290:12;:10;:12::i;:::-;40279:23;;:7;:5;:7::i;:::-;:23;;;40271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45353:11:::1;45340:10;:24;;;;45267:105:::0;:::o;44723:51::-;;;;;;;;;;;;;;;;;:::o;40059:87::-;40105:7;40132:6;;;;;;;;;;;40125:13;;40059:87;:::o;22860:104::-;22916:13;22949:7;22942:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22860:104;:::o;47176:549::-;43343:1;43941:7;;:19;;43933:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43343:1;44074:7;:18;;;;47255:10:::1;47268:22;:12;:20;:22::i;:::-;47255:35;;47309:18;;;;;;;;;;;47301:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44898:3;47383:14;47378:2;:19;;;;:::i;:::-;:33;;47370:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;47503:9;47485:14;45000:9;47467:32;;;;:::i;:::-;:45;;47459:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;47566:9;47578:1;47566:13;;47561:157;47586:14;47581:1;:19;47561:157;;47622:24;:12;:22;:24::i;:::-;47661:45;47671:10;47683:22;:12;:20;:22::i;:::-;47661:9;:45::i;:::-;47602:3;;;;;:::i;:::-;;;;47561:157;;;;44105:1;43299::::0;44253:7;:22;;;;47176:549;:::o;24556:155::-;24651:52;24670:12;:10;:12::i;:::-;24684:8;24694;24651:18;:52::i;:::-;24556:155;;:::o;44908:43::-;44949:2;44908:43;:::o;45802:220::-;45885:4;45902:12;45944:7;45927:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;45917:36;;;;;;45902:51;;45971:43;45990:5;45997:10;;46009:4;45971:18;:43::i;:::-;45964:50;;;45802:220;;;;:::o;25766:365::-;25955:41;25974:12;:10;:12::i;:::-;25988:7;25955:18;:41::i;:::-;25933:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26084:39;26098:4;26104:2;26108:7;26117:5;26084:13;:39::i;:::-;25766:365;;;;:::o;48062:293::-;48188:13;48219:17;48239:23;48254:7;48239:14;:23::i;:::-;48219:43;;48300:1;48286:3;48280:17;:21;:67;;;;;;;;;;;;;;;;;48328:3;48311:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;48280:67;48273:74;;;48062:293;;;:::o;46706:321::-;40290:12;:10;:12::i;:::-;40279:23;;:7;:5;:7::i;:::-;:23;;;40271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46764:14:::1;;;;;;;;;;;46763:15;46755:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;46834:4;46817:14;;:21;;;;;;;;;;;;;;;;;;46851:9;46880:1;46876:5;;46871:149;44949:2;46883:1;:19;46871:149;;46924:24;:12;:22;:24::i;:::-;46963:45;46973:10;46985:22;:12;:20;:22::i;:::-;46963:9;:45::i;:::-;46904:3;;;;;:::i;:::-;;;;46871:149;;;40350:1;46706:321::o:0;47035:133::-;40290:12;:10;:12::i;:::-;40279:23;;:7;:5;:7::i;:::-;:23;;;40271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47141:19:::1;47120:18;;:40;;;;;;;;;;;;;;;;;;47035:133:::0;:::o;24782:214::-;24924:4;24953:18;:25;24972:5;24953:25;;;;;;;;;;;;;;;:35;24979:8;24953:35;;;;;;;;;;;;;;;;;;;;;;;;;24946:42;;24782:214;;;;:::o;40968:201::-;40290:12;:10;:12::i;:::-;40279:23;;:7;:5;:7::i;:::-;:23;;;40271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41077:1:::1;41057:22;;:8;:22;;;;41049:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41133:28;41152:8;41133:18;:28::i;:::-;40968:201:::0;:::o;20135:157::-;20220:4;20259:25;20244:40;;;:11;:40;;;;20237:47;;20135:157;;;:::o;27678:127::-;27743:4;27795:1;27767:30;;:7;:16;27775:7;27767:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27760:37;;27678:127;;;:::o;16926:98::-;16979:7;17006:10;16999:17;;16926:98;:::o;31891:174::-;31993:2;31966:15;:24;31982:7;31966:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32049:7;32045:2;32011:46;;32020:23;32035:7;32020:14;:23::i;:::-;32011:46;;;;;;;;;;;;31891:174;;:::o;36009:114::-;36074:7;36101;:14;;;36094:21;;36009:114;;;:::o;36131:127::-;36238:1;36220:7;:14;;;:19;;;;;;;;;;;36131:127;:::o;28729:110::-;28805:26;28815:2;28819:7;28805:26;;;;;;;;;;;;:9;:26::i;:::-;28729:110;;:::o;27972:415::-;28101:4;28131:16;28139:7;28131;:16::i;:::-;28123:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28207:13;28223:23;28238:7;28223:14;:23::i;:::-;28207:39;;28276:5;28265:16;;:7;:16;;;:64;;;;28322:7;28298:31;;:20;28310:7;28298:11;:20::i;:::-;:31;;;28265:64;:113;;;;28346:32;28363:5;28370:7;28346:16;:32::i;:::-;28265:113;28257:122;;;27972:415;;;;:::o;31148:625::-;31307:4;31280:31;;:23;31295:7;31280:14;:23::i;:::-;:31;;;31272:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31386:1;31372:16;;:2;:16;;;;31364:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31442:39;31463:4;31469:2;31473:7;31442:20;:39::i;:::-;31546:29;31563:1;31567:7;31546:8;:29::i;:::-;31607:1;31588:9;:15;31598:4;31588:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31636:1;31619:9;:13;31629:2;31619:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31667:2;31648:7;:16;31656:7;31648:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31706:7;31702:2;31687:27;;31696:4;31687:27;;;;;;;;;;;;31727:38;31747:4;31753:2;31757:7;31727:19;:38::i;:::-;31148:625;;;:::o;10166:317::-;10281:6;10256:21;:31;;10248:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10335:12;10353:9;:14;;10375:6;10353:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10334:52;;;10405:7;10397:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10166:317;;;:::o;41329:191::-;41403:16;41422:6;;;;;;;;;;;41403:25;;41448:8;41439:6;;:17;;;;;;;;;;;;;;;;;;41503:8;41472:40;;41493:8;41472:40;;;;;;;;;;;;41329:191;;:::o;32207:315::-;32362:8;32353:17;;:5;:17;;;;32345:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32449:8;32411:18;:25;32430:5;32411:25;;;;;;;;;;;;;;;:35;32437:8;32411:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32495:8;32473:41;;32488:5;32473:41;;;32505:8;32473:41;;;;;;:::i;:::-;;;;;;;;32207:315;;;:::o;37529:190::-;37654:4;37707;37678:25;37691:5;37698:4;37678:12;:25::i;:::-;:33;37671:40;;37529:190;;;;;:::o;27013:352::-;27170:28;27180:4;27186:2;27190:7;27170:9;:28::i;:::-;27231:48;27254:4;27260:2;27264:7;27273:5;27231:22;:48::i;:::-;27209:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;27013:352;;;;:::o;23035:347::-;23108:13;23142:16;23150:7;23142;:16::i;:::-;23134:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23223:21;23247:10;:8;:10::i;:::-;23223:34;;23312:1;23294:7;23288:21;:25;:86;;;;;;;;;;;;;;;;;23340:7;23349:18;:7;:16;:18::i;:::-;23323:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23288:86;23268:106;;;23035:347;;;:::o;29066:321::-;29196:18;29202:2;29206:7;29196:5;:18::i;:::-;29247:54;29278:1;29282:2;29286:7;29295:5;29247:22;:54::i;:::-;29225:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29066:321;;;:::o;34490:126::-;;;;:::o;35001:125::-;;;;:::o;38081:675::-;38164:7;38184:20;38207:4;38184:27;;38227:9;38222:497;38246:5;:12;38242:1;:16;38222:497;;;38280:20;38303:5;38309:1;38303:8;;;;;;;;;;;;;;;;;;;;;;38280:31;;38346:12;38330;:28;38326:382;;38473:42;38488:12;38502;38473:14;:42::i;:::-;38458:57;;38326:382;;;38650:42;38665:12;38679;38650:14;:42::i;:::-;38635:57;;38326:382;38222:497;38260:3;;;;;:::i;:::-;;;;38222:497;;;;38736:12;38729:19;;;38081:675;;;;:::o;33087:831::-;33242:4;33263:15;:2;:13;;;:15::i;:::-;33259:652;;;33315:2;33299:36;;;33336:12;:10;:12::i;:::-;33350:4;33356:7;33365:5;33299:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33295:561;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33590:1;33573:6;:13;:18;33569:272;;;33616:60;;;;;;;;;;:::i;:::-;;;;;;;;33569:272;33791:6;33785:13;33776:6;33772:2;33768:15;33761:38;33295:561;33464:41;;;33454:51;;;:6;:51;;;;33447:58;;;;;33259:652;33895:4;33888:11;;33087:831;;;;;;;:::o;47850:117::-;47910:13;47943:16;47936:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47850:117;:::o;17509:723::-;17565:13;17795:1;17786:5;:10;17782:53;;;17813:10;;;;;;;;;;;;;;;;;;;;;17782:53;17845:12;17860:5;17845:20;;17876:14;17901:78;17916:1;17908:4;:9;17901:78;;17934:8;;;;;:::i;:::-;;;;17965:2;17957:10;;;;;:::i;:::-;;;17901:78;;;17989:19;18021:6;18011:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17989:39;;18039:154;18055:1;18046:5;:10;18039:154;;18083:1;18073:11;;;;;:::i;:::-;;;18150:2;18142:5;:10;;;;:::i;:::-;18129:2;:24;;;;:::i;:::-;18116:39;;18099:6;18106;18099:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18179:2;18170:11;;;;;:::i;:::-;;;18039:154;;;18217:6;18203:21;;;;;17509:723;;;;:::o;29723:439::-;29817:1;29803:16;;:2;:16;;;;29795:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29876:16;29884:7;29876;:16::i;:::-;29875:17;29867:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29938:45;29967:1;29971:2;29975:7;29938:20;:45::i;:::-;30013:1;29996:9;:13;30006:2;29996:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30044:2;30025:7;:16;30033:7;30025:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30089:7;30085:2;30064:33;;30081:1;30064:33;;;;;;;;;;;;30110:44;30138:1;30142:2;30146:7;30110:19;:44::i;:::-;29723:439;;:::o;38764:224::-;38832:13;38895:1;38889:4;38882:15;38924:1;38918:4;38911:15;38965:4;38959;38949:21;38940:30;;38867:114;;;;:::o;8905:326::-;8965:4;9222:1;9200:7;:19;;;:23;9193:30;;8905:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1530:155::-;1584:5;1622:6;1609:20;1600:29;;1638:41;1673:5;1638:41;:::i;:::-;1590:95;;;;:::o;1708:367::-;1781:8;1791:6;1841:3;1834:4;1826:6;1822:17;1818:27;1808:2;;1859:1;1856;1849:12;1808:2;1895:6;1882:20;1872:30;;1925:18;1917:6;1914:30;1911:2;;;1957:1;1954;1947:12;1911:2;1994:4;1986:6;1982:17;1970:29;;2048:3;2040:4;2032:6;2028:17;2018:8;2014:32;2011:41;2008:2;;;2065:1;2062;2055:12;2008:2;1798:277;;;;;:::o;2098:303::-;2169:5;2218:3;2211:4;2203:6;2199:17;2195:27;2185:2;;2236:1;2233;2226:12;2185:2;2276:6;2263:20;2301:94;2391:3;2383:6;2376:4;2368:6;2364:17;2301:94;:::i;:::-;2292:103;;2175:226;;;;;:::o;2407:133::-;2450:5;2488:6;2475:20;2466:29;;2504:30;2528:5;2504:30;:::i;:::-;2456:84;;;;:::o;2546:139::-;2592:5;2630:6;2617:20;2608:29;;2646:33;2673:5;2646:33;:::i;:::-;2598:87;;;;:::o;2691:137::-;2736:5;2774:6;2761:20;2752:29;;2790:32;2816:5;2790:32;:::i;:::-;2742:86;;;;:::o;2834:141::-;2890:5;2921:6;2915:13;2906:22;;2937:32;2963:5;2937:32;:::i;:::-;2896:79;;;;:::o;2994:271::-;3049:5;3098:3;3091:4;3083:6;3079:17;3075:27;3065:2;;3116:1;3113;3106:12;3065:2;3156:6;3143:20;3181:78;3255:3;3247:6;3240:4;3232:6;3228:17;3181:78;:::i;:::-;3172:87;;3055:210;;;;;:::o;3285:273::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:2;;3408:1;3405;3398:12;3357:2;3448:6;3435:20;3473:79;3548:3;3540:6;3533:4;3525:6;3521:17;3473:79;:::i;:::-;3464:88;;3347:211;;;;;:::o;3564:139::-;3610:5;3648:6;3635:20;3626:29;;3664:33;3691:5;3664:33;:::i;:::-;3616:87;;;;:::o;3709:262::-;3768:6;3817:2;3805:9;3796:7;3792:23;3788:32;3785:2;;;3833:1;3830;3823:12;3785:2;3876:1;3901:53;3946:7;3937:6;3926:9;3922:22;3901:53;:::i;:::-;3891:63;;3847:117;3775:196;;;;:::o;3977:278::-;4044:6;4093:2;4081:9;4072:7;4068:23;4064:32;4061:2;;;4109:1;4106;4099:12;4061:2;4152:1;4177:61;4230:7;4221:6;4210:9;4206:22;4177:61;:::i;:::-;4167:71;;4123:125;4051:204;;;;:::o;4261:407::-;4329:6;4337;4386:2;4374:9;4365:7;4361:23;4357:32;4354:2;;;4402:1;4399;4392:12;4354:2;4445:1;4470:53;4515:7;4506:6;4495:9;4491:22;4470:53;:::i;:::-;4460:63;;4416:117;4572:2;4598:53;4643:7;4634:6;4623:9;4619:22;4598:53;:::i;:::-;4588:63;;4543:118;4344:324;;;;;:::o;4674:552::-;4751:6;4759;4767;4816:2;4804:9;4795:7;4791:23;4787:32;4784:2;;;4832:1;4829;4822:12;4784:2;4875:1;4900:53;4945:7;4936:6;4925:9;4921:22;4900:53;:::i;:::-;4890:63;;4846:117;5002:2;5028:53;5073:7;5064:6;5053:9;5049:22;5028:53;:::i;:::-;5018:63;;4973:118;5130:2;5156:53;5201:7;5192:6;5181:9;5177:22;5156:53;:::i;:::-;5146:63;;5101:118;4774:452;;;;;:::o;5232:809::-;5327:6;5335;5343;5351;5400:3;5388:9;5379:7;5375:23;5371:33;5368:2;;;5417:1;5414;5407:12;5368:2;5460:1;5485:53;5530:7;5521:6;5510:9;5506:22;5485:53;:::i;:::-;5475:63;;5431:117;5587:2;5613:53;5658:7;5649:6;5638:9;5634:22;5613:53;:::i;:::-;5603:63;;5558:118;5715:2;5741:53;5786:7;5777:6;5766:9;5762:22;5741:53;:::i;:::-;5731:63;;5686:118;5871:2;5860:9;5856:18;5843:32;5902:18;5894:6;5891:30;5888:2;;;5934:1;5931;5924:12;5888:2;5962:62;6016:7;6007:6;5996:9;5992:22;5962:62;:::i;:::-;5952:72;;5814:220;5358:683;;;;;;;:::o;6047:550::-;6140:6;6148;6197:2;6185:9;6176:7;6172:23;6168:32;6165:2;;;6213:1;6210;6203:12;6165:2;6256:1;6281:53;6326:7;6317:6;6306:9;6302:22;6281:53;:::i;:::-;6271:63;;6227:117;6411:2;6400:9;6396:18;6383:32;6442:18;6434:6;6431:30;6428:2;;;6474:1;6471;6464:12;6428:2;6502:78;6572:7;6563:6;6552:9;6548:22;6502:78;:::i;:::-;6492:88;;6354:236;6155:442;;;;;:::o;6603:401::-;6668:6;6676;6725:2;6713:9;6704:7;6700:23;6696:32;6693:2;;;6741:1;6738;6731:12;6693:2;6784:1;6809:53;6854:7;6845:6;6834:9;6830:22;6809:53;:::i;:::-;6799:63;;6755:117;6911:2;6937:50;6979:7;6970:6;6959:9;6955:22;6937:50;:::i;:::-;6927:60;;6882:115;6683:321;;;;;:::o;7010:407::-;7078:6;7086;7135:2;7123:9;7114:7;7110:23;7106:32;7103:2;;;7151:1;7148;7141:12;7103:2;7194:1;7219:53;7264:7;7255:6;7244:9;7240:22;7219:53;:::i;:::-;7209:63;;7165:117;7321:2;7347:53;7392:7;7383:6;7372:9;7368:22;7347:53;:::i;:::-;7337:63;;7292:118;7093:324;;;;;:::o;7423:425::-;7509:6;7517;7566:2;7554:9;7545:7;7541:23;7537:32;7534:2;;;7582:1;7579;7572:12;7534:2;7653:1;7642:9;7638:17;7625:31;7683:18;7675:6;7672:30;7669:2;;;7715:1;7712;7705:12;7669:2;7751:80;7823:7;7814:6;7803:9;7799:22;7751:80;:::i;:::-;7733:98;;;;7596:245;7524:324;;;;;:::o;7854:256::-;7910:6;7959:2;7947:9;7938:7;7934:23;7930:32;7927:2;;;7975:1;7972;7965:12;7927:2;8018:1;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7989:114;7917:193;;;;:::o;8116:262::-;8175:6;8224:2;8212:9;8203:7;8199:23;8195:32;8192:2;;;8240:1;8237;8230:12;8192:2;8283:1;8308:53;8353:7;8344:6;8333:9;8329:22;8308:53;:::i;:::-;8298:63;;8254:117;8182:196;;;;:::o;8384:260::-;8442:6;8491:2;8479:9;8470:7;8466:23;8462:32;8459:2;;;8507:1;8504;8497:12;8459:2;8550:1;8575:52;8619:7;8610:6;8599:9;8595:22;8575:52;:::i;:::-;8565:62;;8521:116;8449:195;;;;:::o;8650:282::-;8719:6;8768:2;8756:9;8747:7;8743:23;8739:32;8736:2;;;8784:1;8781;8774:12;8736:2;8827:1;8852:63;8907:7;8898:6;8887:9;8883:22;8852:63;:::i;:::-;8842:73;;8798:127;8726:206;;;;:::o;8938:375::-;9007:6;9056:2;9044:9;9035:7;9031:23;9027:32;9024:2;;;9072:1;9069;9062:12;9024:2;9143:1;9132:9;9128:17;9115:31;9173:18;9165:6;9162:30;9159:2;;;9205:1;9202;9195:12;9159:2;9233:63;9288:7;9279:6;9268:9;9264:22;9233:63;:::i;:::-;9223:73;;9086:220;9014:299;;;;:::o;9319:262::-;9378:6;9427:2;9415:9;9406:7;9402:23;9398:32;9395:2;;;9443:1;9440;9433:12;9395:2;9486:1;9511:53;9556:7;9547:6;9536:9;9532:22;9511:53;:::i;:::-;9501:63;;9457:117;9385:196;;;;:::o;9587:118::-;9674:24;9692:5;9674:24;:::i;:::-;9669:3;9662:37;9652:53;;:::o;9711:157::-;9816:45;9836:24;9854:5;9836:24;:::i;:::-;9816:45;:::i;:::-;9811:3;9804:58;9794:74;;:::o;9874:109::-;9955:21;9970:5;9955:21;:::i;:::-;9950:3;9943:34;9933:50;;:::o;9989:118::-;10076:24;10094:5;10076:24;:::i;:::-;10071:3;10064:37;10054:53;;:::o;10113:360::-;10199:3;10227:38;10259:5;10227:38;:::i;:::-;10281:70;10344:6;10339:3;10281:70;:::i;:::-;10274:77;;10360:52;10405:6;10400:3;10393:4;10386:5;10382:16;10360:52;:::i;:::-;10437:29;10459:6;10437:29;:::i;:::-;10432:3;10428:39;10421:46;;10203:270;;;;;:::o;10479:364::-;10567:3;10595:39;10628:5;10595:39;:::i;:::-;10650:71;10714:6;10709:3;10650:71;:::i;:::-;10643:78;;10730:52;10775:6;10770:3;10763:4;10756:5;10752:16;10730:52;:::i;:::-;10807:29;10829:6;10807:29;:::i;:::-;10802:3;10798:39;10791:46;;10571:272;;;;;:::o;10849:377::-;10955:3;10983:39;11016:5;10983:39;:::i;:::-;11038:89;11120:6;11115:3;11038:89;:::i;:::-;11031:96;;11136:52;11181:6;11176:3;11169:4;11162:5;11158:16;11136:52;:::i;:::-;11213:6;11208:3;11204:16;11197:23;;10959:267;;;;;:::o;11232:366::-;11374:3;11395:67;11459:2;11454:3;11395:67;:::i;:::-;11388:74;;11471:93;11560:3;11471:93;:::i;:::-;11589:2;11584:3;11580:12;11573:19;;11378:220;;;:::o;11604:366::-;11746:3;11767:67;11831:2;11826:3;11767:67;:::i;:::-;11760:74;;11843:93;11932:3;11843:93;:::i;:::-;11961:2;11956:3;11952:12;11945:19;;11750:220;;;:::o;11976:366::-;12118:3;12139:67;12203:2;12198:3;12139:67;:::i;:::-;12132:74;;12215:93;12304:3;12215:93;:::i;:::-;12333:2;12328:3;12324:12;12317:19;;12122:220;;;:::o;12348:366::-;12490:3;12511:67;12575:2;12570:3;12511:67;:::i;:::-;12504:74;;12587:93;12676:3;12587:93;:::i;:::-;12705:2;12700:3;12696:12;12689:19;;12494:220;;;:::o;12720:366::-;12862:3;12883:67;12947:2;12942:3;12883:67;:::i;:::-;12876:74;;12959:93;13048:3;12959:93;:::i;:::-;13077:2;13072:3;13068:12;13061:19;;12866:220;;;:::o;13092:366::-;13234:3;13255:67;13319:2;13314:3;13255:67;:::i;:::-;13248:74;;13331:93;13420:3;13331:93;:::i;:::-;13449:2;13444:3;13440:12;13433:19;;13238:220;;;:::o;13464:366::-;13606:3;13627:67;13691:2;13686:3;13627:67;:::i;:::-;13620:74;;13703:93;13792:3;13703:93;:::i;:::-;13821:2;13816:3;13812:12;13805:19;;13610:220;;;:::o;13836:366::-;13978:3;13999:67;14063:2;14058:3;13999:67;:::i;:::-;13992:74;;14075:93;14164:3;14075:93;:::i;:::-;14193:2;14188:3;14184:12;14177:19;;13982:220;;;:::o;14208:366::-;14350:3;14371:67;14435:2;14430:3;14371:67;:::i;:::-;14364:74;;14447:93;14536:3;14447:93;:::i;:::-;14565:2;14560:3;14556:12;14549:19;;14354:220;;;:::o;14580:366::-;14722:3;14743:67;14807:2;14802:3;14743:67;:::i;:::-;14736:74;;14819:93;14908:3;14819:93;:::i;:::-;14937:2;14932:3;14928:12;14921:19;;14726:220;;;:::o;14952:366::-;15094:3;15115:67;15179:2;15174:3;15115:67;:::i;:::-;15108:74;;15191:93;15280:3;15191:93;:::i;:::-;15309:2;15304:3;15300:12;15293:19;;15098:220;;;:::o;15324:366::-;15466:3;15487:67;15551:2;15546:3;15487:67;:::i;:::-;15480:74;;15563:93;15652:3;15563:93;:::i;:::-;15681:2;15676:3;15672:12;15665:19;;15470:220;;;:::o;15696:366::-;15838:3;15859:67;15923:2;15918:3;15859:67;:::i;:::-;15852:74;;15935:93;16024:3;15935:93;:::i;:::-;16053:2;16048:3;16044:12;16037:19;;15842:220;;;:::o;16068:366::-;16210:3;16231:67;16295:2;16290:3;16231:67;:::i;:::-;16224:74;;16307:93;16396:3;16307:93;:::i;:::-;16425:2;16420:3;16416:12;16409:19;;16214:220;;;:::o;16440:366::-;16582:3;16603:67;16667:2;16662:3;16603:67;:::i;:::-;16596:74;;16679:93;16768:3;16679:93;:::i;:::-;16797:2;16792:3;16788:12;16781:19;;16586:220;;;:::o;16812:366::-;16954:3;16975:67;17039:2;17034:3;16975:67;:::i;:::-;16968:74;;17051:93;17140:3;17051:93;:::i;:::-;17169:2;17164:3;17160:12;17153:19;;16958:220;;;:::o;17184:366::-;17326:3;17347:67;17411:2;17406:3;17347:67;:::i;:::-;17340:74;;17423:93;17512:3;17423:93;:::i;:::-;17541:2;17536:3;17532:12;17525:19;;17330:220;;;:::o;17556:366::-;17698:3;17719:67;17783:2;17778:3;17719:67;:::i;:::-;17712:74;;17795:93;17884:3;17795:93;:::i;:::-;17913:2;17908:3;17904:12;17897:19;;17702:220;;;:::o;17928:400::-;18088:3;18109:84;18191:1;18186:3;18109:84;:::i;:::-;18102:91;;18202:93;18291:3;18202:93;:::i;:::-;18320:1;18315:3;18311:11;18304:18;;18092:236;;;:::o;18334:366::-;18476:3;18497:67;18561:2;18556:3;18497:67;:::i;:::-;18490:74;;18573:93;18662:3;18573:93;:::i;:::-;18691:2;18686:3;18682:12;18675:19;;18480:220;;;:::o;18706:366::-;18848:3;18869:67;18933:2;18928:3;18869:67;:::i;:::-;18862:74;;18945:93;19034:3;18945:93;:::i;:::-;19063:2;19058:3;19054:12;19047:19;;18852:220;;;:::o;19078:366::-;19220:3;19241:67;19305:2;19300:3;19241:67;:::i;:::-;19234:74;;19317:93;19406:3;19317:93;:::i;:::-;19435:2;19430:3;19426:12;19419:19;;19224:220;;;:::o;19450:366::-;19592:3;19613:67;19677:2;19672:3;19613:67;:::i;:::-;19606:74;;19689:93;19778:3;19689:93;:::i;:::-;19807:2;19802:3;19798:12;19791:19;;19596:220;;;:::o;19822:398::-;19981:3;20002:83;20083:1;20078:3;20002:83;:::i;:::-;19995:90;;20094:93;20183:3;20094:93;:::i;:::-;20212:1;20207:3;20203:11;20196:18;;19985:235;;;:::o;20226:366::-;20368:3;20389:67;20453:2;20448:3;20389:67;:::i;:::-;20382:74;;20465:93;20554:3;20465:93;:::i;:::-;20583:2;20578:3;20574:12;20567:19;;20372:220;;;:::o;20598:366::-;20740:3;20761:67;20825:2;20820:3;20761:67;:::i;:::-;20754:74;;20837:93;20926:3;20837:93;:::i;:::-;20955:2;20950:3;20946:12;20939:19;;20744:220;;;:::o;20970:366::-;21112:3;21133:67;21197:2;21192:3;21133:67;:::i;:::-;21126:74;;21209:93;21298:3;21209:93;:::i;:::-;21327:2;21322:3;21318:12;21311:19;;21116:220;;;:::o;21342:366::-;21484:3;21505:67;21569:2;21564:3;21505:67;:::i;:::-;21498:74;;21581:93;21670:3;21581:93;:::i;:::-;21699:2;21694:3;21690:12;21683:19;;21488:220;;;:::o;21714:366::-;21856:3;21877:67;21941:2;21936:3;21877:67;:::i;:::-;21870:74;;21953:93;22042:3;21953:93;:::i;:::-;22071:2;22066:3;22062:12;22055:19;;21860:220;;;:::o;22086:118::-;22173:24;22191:5;22173:24;:::i;:::-;22168:3;22161:37;22151:53;;:::o;22210:256::-;22322:3;22337:75;22408:3;22399:6;22337:75;:::i;:::-;22437:2;22432:3;22428:12;22421:19;;22457:3;22450:10;;22326:140;;;;:::o;22472:435::-;22652:3;22674:95;22765:3;22756:6;22674:95;:::i;:::-;22667:102;;22786:95;22877:3;22868:6;22786:95;:::i;:::-;22779:102;;22898:3;22891:10;;22656:251;;;;;:::o;22913:541::-;23146:3;23168:95;23259:3;23250:6;23168:95;:::i;:::-;23161:102;;23280:148;23424:3;23280:148;:::i;:::-;23273:155;;23445:3;23438:10;;23150:304;;;;:::o;23460:379::-;23644:3;23666:147;23809:3;23666:147;:::i;:::-;23659:154;;23830:3;23823:10;;23648:191;;;:::o;23845:222::-;23938:4;23976:2;23965:9;23961:18;23953:26;;23989:71;24057:1;24046:9;24042:17;24033:6;23989:71;:::i;:::-;23943:124;;;;:::o;24073:640::-;24268:4;24306:3;24295:9;24291:19;24283:27;;24320:71;24388:1;24377:9;24373:17;24364:6;24320:71;:::i;:::-;24401:72;24469:2;24458:9;24454:18;24445:6;24401:72;:::i;:::-;24483;24551:2;24540:9;24536:18;24527:6;24483:72;:::i;:::-;24602:9;24596:4;24592:20;24587:2;24576:9;24572:18;24565:48;24630:76;24701:4;24692:6;24630:76;:::i;:::-;24622:84;;24273:440;;;;;;;:::o;24719:210::-;24806:4;24844:2;24833:9;24829:18;24821:26;;24857:65;24919:1;24908:9;24904:17;24895:6;24857:65;:::i;:::-;24811:118;;;;:::o;24935:222::-;25028:4;25066:2;25055:9;25051:18;25043:26;;25079:71;25147:1;25136:9;25132:17;25123:6;25079:71;:::i;:::-;25033:124;;;;:::o;25163:313::-;25276:4;25314:2;25303:9;25299:18;25291:26;;25363:9;25357:4;25353:20;25349:1;25338:9;25334:17;25327:47;25391:78;25464:4;25455:6;25391:78;:::i;:::-;25383:86;;25281:195;;;;:::o;25482:419::-;25648:4;25686:2;25675:9;25671:18;25663:26;;25735:9;25729:4;25725:20;25721:1;25710:9;25706:17;25699:47;25763:131;25889:4;25763:131;:::i;:::-;25755:139;;25653:248;;;:::o;25907:419::-;26073:4;26111:2;26100:9;26096:18;26088:26;;26160:9;26154:4;26150:20;26146:1;26135:9;26131:17;26124:47;26188:131;26314:4;26188:131;:::i;:::-;26180:139;;26078:248;;;:::o;26332:419::-;26498:4;26536:2;26525:9;26521:18;26513:26;;26585:9;26579:4;26575:20;26571:1;26560:9;26556:17;26549:47;26613:131;26739:4;26613:131;:::i;:::-;26605:139;;26503:248;;;:::o;26757:419::-;26923:4;26961:2;26950:9;26946:18;26938:26;;27010:9;27004:4;27000:20;26996:1;26985:9;26981:17;26974:47;27038:131;27164:4;27038:131;:::i;:::-;27030:139;;26928:248;;;:::o;27182:419::-;27348:4;27386:2;27375:9;27371:18;27363:26;;27435:9;27429:4;27425:20;27421:1;27410:9;27406:17;27399:47;27463:131;27589:4;27463:131;:::i;:::-;27455:139;;27353:248;;;:::o;27607:419::-;27773:4;27811:2;27800:9;27796:18;27788:26;;27860:9;27854:4;27850:20;27846:1;27835:9;27831:17;27824:47;27888:131;28014:4;27888:131;:::i;:::-;27880:139;;27778:248;;;:::o;28032:419::-;28198:4;28236:2;28225:9;28221:18;28213:26;;28285:9;28279:4;28275:20;28271:1;28260:9;28256:17;28249:47;28313:131;28439:4;28313:131;:::i;:::-;28305:139;;28203:248;;;:::o;28457:419::-;28623:4;28661:2;28650:9;28646:18;28638:26;;28710:9;28704:4;28700:20;28696:1;28685:9;28681:17;28674:47;28738:131;28864:4;28738:131;:::i;:::-;28730:139;;28628:248;;;:::o;28882:419::-;29048:4;29086:2;29075:9;29071:18;29063:26;;29135:9;29129:4;29125:20;29121:1;29110:9;29106:17;29099:47;29163:131;29289:4;29163:131;:::i;:::-;29155:139;;29053:248;;;:::o;29307:419::-;29473:4;29511:2;29500:9;29496:18;29488:26;;29560:9;29554:4;29550:20;29546:1;29535:9;29531:17;29524:47;29588:131;29714:4;29588:131;:::i;:::-;29580:139;;29478:248;;;:::o;29732:419::-;29898:4;29936:2;29925:9;29921:18;29913:26;;29985:9;29979:4;29975:20;29971:1;29960:9;29956:17;29949:47;30013:131;30139:4;30013:131;:::i;:::-;30005:139;;29903:248;;;:::o;30157:419::-;30323:4;30361:2;30350:9;30346:18;30338:26;;30410:9;30404:4;30400:20;30396:1;30385:9;30381:17;30374:47;30438:131;30564:4;30438:131;:::i;:::-;30430:139;;30328:248;;;:::o;30582:419::-;30748:4;30786:2;30775:9;30771:18;30763:26;;30835:9;30829:4;30825:20;30821:1;30810:9;30806:17;30799:47;30863:131;30989:4;30863:131;:::i;:::-;30855:139;;30753:248;;;:::o;31007:419::-;31173:4;31211:2;31200:9;31196:18;31188:26;;31260:9;31254:4;31250:20;31246:1;31235:9;31231:17;31224:47;31288:131;31414:4;31288:131;:::i;:::-;31280:139;;31178:248;;;:::o;31432:419::-;31598:4;31636:2;31625:9;31621:18;31613:26;;31685:9;31679:4;31675:20;31671:1;31660:9;31656:17;31649:47;31713:131;31839:4;31713:131;:::i;:::-;31705:139;;31603:248;;;:::o;31857:419::-;32023:4;32061:2;32050:9;32046:18;32038:26;;32110:9;32104:4;32100:20;32096:1;32085:9;32081:17;32074:47;32138:131;32264:4;32138:131;:::i;:::-;32130:139;;32028:248;;;:::o;32282:419::-;32448:4;32486:2;32475:9;32471:18;32463:26;;32535:9;32529:4;32525:20;32521:1;32510:9;32506:17;32499:47;32563:131;32689:4;32563:131;:::i;:::-;32555:139;;32453:248;;;:::o;32707:419::-;32873:4;32911:2;32900:9;32896:18;32888:26;;32960:9;32954:4;32950:20;32946:1;32935:9;32931:17;32924:47;32988:131;33114:4;32988:131;:::i;:::-;32980:139;;32878:248;;;:::o;33132:419::-;33298:4;33336:2;33325:9;33321:18;33313:26;;33385:9;33379:4;33375:20;33371:1;33360:9;33356:17;33349:47;33413:131;33539:4;33413:131;:::i;:::-;33405:139;;33303:248;;;:::o;33557:419::-;33723:4;33761:2;33750:9;33746:18;33738:26;;33810:9;33804:4;33800:20;33796:1;33785:9;33781:17;33774:47;33838:131;33964:4;33838:131;:::i;:::-;33830:139;;33728:248;;;:::o;33982:419::-;34148:4;34186:2;34175:9;34171:18;34163:26;;34235:9;34229:4;34225:20;34221:1;34210:9;34206:17;34199:47;34263:131;34389:4;34263:131;:::i;:::-;34255:139;;34153:248;;;:::o;34407:419::-;34573:4;34611:2;34600:9;34596:18;34588:26;;34660:9;34654:4;34650:20;34646:1;34635:9;34631:17;34624:47;34688:131;34814:4;34688:131;:::i;:::-;34680:139;;34578:248;;;:::o;34832:419::-;34998:4;35036:2;35025:9;35021:18;35013:26;;35085:9;35079:4;35075:20;35071:1;35060:9;35056:17;35049:47;35113:131;35239:4;35113:131;:::i;:::-;35105:139;;35003:248;;;:::o;35257:419::-;35423:4;35461:2;35450:9;35446:18;35438:26;;35510:9;35504:4;35500:20;35496:1;35485:9;35481:17;35474:47;35538:131;35664:4;35538:131;:::i;:::-;35530:139;;35428:248;;;:::o;35682:419::-;35848:4;35886:2;35875:9;35871:18;35863:26;;35935:9;35929:4;35925:20;35921:1;35910:9;35906:17;35899:47;35963:131;36089:4;35963:131;:::i;:::-;35955:139;;35853:248;;;:::o;36107:419::-;36273:4;36311:2;36300:9;36296:18;36288:26;;36360:9;36354:4;36350:20;36346:1;36335:9;36331:17;36324:47;36388:131;36514:4;36388:131;:::i;:::-;36380:139;;36278:248;;;:::o;36532:419::-;36698:4;36736:2;36725:9;36721:18;36713:26;;36785:9;36779:4;36775:20;36771:1;36760:9;36756:17;36749:47;36813:131;36939:4;36813:131;:::i;:::-;36805:139;;36703:248;;;:::o;36957:222::-;37050:4;37088:2;37077:9;37073:18;37065:26;;37101:71;37169:1;37158:9;37154:17;37145:6;37101:71;:::i;:::-;37055:124;;;;:::o;37185:129::-;37219:6;37246:20;;:::i;:::-;37236:30;;37275:33;37303:4;37295:6;37275:33;:::i;:::-;37226:88;;;:::o;37320:75::-;37353:6;37386:2;37380:9;37370:19;;37360:35;:::o;37401:311::-;37478:4;37568:18;37560:6;37557:30;37554:2;;;37590:18;;:::i;:::-;37554:2;37640:4;37632:6;37628:17;37620:25;;37700:4;37694;37690:15;37682:23;;37483:229;;;:::o;37718:307::-;37779:4;37869:18;37861:6;37858:30;37855:2;;;37891:18;;:::i;:::-;37855:2;37929:29;37951:6;37929:29;:::i;:::-;37921:37;;38013:4;38007;38003:15;37995:23;;37784:241;;;:::o;38031:308::-;38093:4;38183:18;38175:6;38172:30;38169:2;;;38205:18;;:::i;:::-;38169:2;38243:29;38265:6;38243:29;:::i;:::-;38235:37;;38327:4;38321;38317:15;38309:23;;38098:241;;;:::o;38345:98::-;38396:6;38430:5;38424:12;38414:22;;38403:40;;;:::o;38449:99::-;38501:6;38535:5;38529:12;38519:22;;38508:40;;;:::o;38554:168::-;38637:11;38671:6;38666:3;38659:19;38711:4;38706:3;38702:14;38687:29;;38649:73;;;;:::o;38728:147::-;38829:11;38866:3;38851:18;;38841:34;;;;:::o;38881:169::-;38965:11;38999:6;38994:3;38987:19;39039:4;39034:3;39030:14;39015:29;;38977:73;;;;:::o;39056:148::-;39158:11;39195:3;39180:18;;39170:34;;;;:::o;39210:305::-;39250:3;39269:20;39287:1;39269:20;:::i;:::-;39264:25;;39303:20;39321:1;39303:20;:::i;:::-;39298:25;;39457:1;39389:66;39385:74;39382:1;39379:81;39376:2;;;39463:18;;:::i;:::-;39376:2;39507:1;39504;39500:9;39493:16;;39254:261;;;;:::o;39521:185::-;39561:1;39578:20;39596:1;39578:20;:::i;:::-;39573:25;;39612:20;39630:1;39612:20;:::i;:::-;39607:25;;39651:1;39641:2;;39656:18;;:::i;:::-;39641:2;39698:1;39695;39691:9;39686:14;;39563:143;;;;:::o;39712:348::-;39752:7;39775:20;39793:1;39775:20;:::i;:::-;39770:25;;39809:20;39827:1;39809:20;:::i;:::-;39804:25;;39997:1;39929:66;39925:74;39922:1;39919:81;39914:1;39907:9;39900:17;39896:105;39893:2;;;40004:18;;:::i;:::-;39893:2;40052:1;40049;40045:9;40034:20;;39760:300;;;;:::o;40066:191::-;40106:4;40126:20;40144:1;40126:20;:::i;:::-;40121:25;;40160:20;40178:1;40160:20;:::i;:::-;40155:25;;40199:1;40196;40193:8;40190:2;;;40204:18;;:::i;:::-;40190:2;40249:1;40246;40242:9;40234:17;;40111:146;;;;:::o;40263:96::-;40300:7;40329:24;40347:5;40329:24;:::i;:::-;40318:35;;40308:51;;;:::o;40365:104::-;40410:7;40439:24;40457:5;40439:24;:::i;:::-;40428:35;;40418:51;;;:::o;40475:90::-;40509:7;40552:5;40545:13;40538:21;40527:32;;40517:48;;;:::o;40571:77::-;40608:7;40637:5;40626:16;;40616:32;;;:::o;40654:149::-;40690:7;40730:66;40723:5;40719:78;40708:89;;40698:105;;;:::o;40809:126::-;40846:7;40886:42;40879:5;40875:54;40864:65;;40854:81;;;:::o;40941:77::-;40978:7;41007:5;40996:16;;40986:32;;;:::o;41024:154::-;41108:6;41103:3;41098;41085:30;41170:1;41161:6;41156:3;41152:16;41145:27;41075:103;;;:::o;41184:307::-;41252:1;41262:113;41276:6;41273:1;41270:13;41262:113;;;41361:1;41356:3;41352:11;41346:18;41342:1;41337:3;41333:11;41326:39;41298:2;41295:1;41291:10;41286:15;;41262:113;;;41393:6;41390:1;41387:13;41384:2;;;41473:1;41464:6;41459:3;41455:16;41448:27;41384:2;41233:258;;;;:::o;41497:320::-;41541:6;41578:1;41572:4;41568:12;41558:22;;41625:1;41619:4;41615:12;41646:18;41636:2;;41702:4;41694:6;41690:17;41680:27;;41636:2;41764;41756:6;41753:14;41733:18;41730:38;41727:2;;;41783:18;;:::i;:::-;41727:2;41548:269;;;;:::o;41823:281::-;41906:27;41928:4;41906:27;:::i;:::-;41898:6;41894:40;42036:6;42024:10;42021:22;42000:18;41988:10;41985:34;41982:62;41979:2;;;42047:18;;:::i;:::-;41979:2;42087:10;42083:2;42076:22;41866:238;;;:::o;42110:233::-;42149:3;42172:24;42190:5;42172:24;:::i;:::-;42163:33;;42218:66;42211:5;42208:77;42205:2;;;42288:18;;:::i;:::-;42205:2;42335:1;42328:5;42324:13;42317:20;;42153:190;;;:::o;42349:100::-;42388:7;42417:26;42437:5;42417:26;:::i;:::-;42406:37;;42396:53;;;:::o;42455:94::-;42494:7;42523:20;42537:5;42523:20;:::i;:::-;42512:31;;42502:47;;;:::o;42555:176::-;42587:1;42604:20;42622:1;42604:20;:::i;:::-;42599:25;;42638:20;42656:1;42638:20;:::i;:::-;42633:25;;42677:1;42667:2;;42682:18;;:::i;:::-;42667:2;42723:1;42720;42716:9;42711:14;;42589:142;;;;:::o;42737:180::-;42785:77;42782:1;42775:88;42882:4;42879:1;42872:15;42906:4;42903:1;42896:15;42923:180;42971:77;42968:1;42961:88;43068:4;43065:1;43058:15;43092:4;43089:1;43082:15;43109:180;43157:77;43154:1;43147:88;43254:4;43251:1;43244:15;43278:4;43275:1;43268:15;43295:180;43343:77;43340:1;43333:88;43440:4;43437:1;43430:15;43464:4;43461:1;43454:15;43481:102;43522:6;43573:2;43569:7;43564:2;43557:5;43553:14;43549:28;43539:38;;43529:54;;;:::o;43589:94::-;43622:8;43670:5;43666:2;43662:14;43641:35;;43631:52;;;:::o;43689:237::-;43829:34;43825:1;43817:6;43813:14;43806:58;43898:20;43893:2;43885:6;43881:15;43874:45;43795:131;:::o;43932:225::-;44072:34;44068:1;44060:6;44056:14;44049:58;44141:8;44136:2;44128:6;44124:15;44117:33;44038:119;:::o;44163:182::-;44303:34;44299:1;44291:6;44287:14;44280:58;44269:76;:::o;44351:224::-;44491:34;44487:1;44479:6;44475:14;44468:58;44560:7;44555:2;44547:6;44543:15;44536:32;44457:118;:::o;44581:178::-;44721:30;44717:1;44709:6;44705:14;44698:54;44687:72;:::o;44765:223::-;44905:34;44901:1;44893:6;44889:14;44882:58;44974:6;44969:2;44961:6;44957:15;44950:31;44871:117;:::o;44994:175::-;45134:27;45130:1;45122:6;45118:14;45111:51;45100:69;:::o;45175:181::-;45315:33;45311:1;45303:6;45299:14;45292:57;45281:75;:::o;45362:245::-;45502:34;45498:1;45490:6;45486:14;45479:58;45571:28;45566:2;45558:6;45554:15;45547:53;45468:139;:::o;45613:179::-;45753:31;45749:1;45741:6;45737:14;45730:55;45719:73;:::o;45798:171::-;45938:23;45934:1;45926:6;45922:14;45915:47;45904:65;:::o;45975:231::-;46115:34;46111:1;46103:6;46099:14;46092:58;46184:14;46179:2;46171:6;46167:15;46160:39;46081:125;:::o;46212:177::-;46352:29;46348:1;46340:6;46336:14;46329:53;46318:71;:::o;46395:243::-;46535:34;46531:1;46523:6;46519:14;46512:58;46604:26;46599:2;46591:6;46587:15;46580:51;46501:137;:::o;46644:229::-;46784:34;46780:1;46772:6;46768:14;46761:58;46853:12;46848:2;46840:6;46836:15;46829:37;46750:123;:::o;46879:228::-;47019:34;47015:1;47007:6;47003:14;46996:58;47088:11;47083:2;47075:6;47071:15;47064:36;46985:122;:::o;47113:182::-;47253:34;47249:1;47241:6;47237:14;47230:58;47219:76;:::o;47301:231::-;47441:34;47437:1;47429:6;47425:14;47418:58;47510:14;47505:2;47497:6;47493:15;47486:39;47407:125;:::o;47538:155::-;47678:7;47674:1;47666:6;47662:14;47655:31;47644:49;:::o;47699:182::-;47839:34;47835:1;47827:6;47823:14;47816:58;47805:76;:::o;47887:234::-;48027:34;48023:1;48015:6;48011:14;48004:58;48096:17;48091:2;48083:6;48079:15;48072:42;47993:128;:::o;48127:175::-;48267:27;48263:1;48255:6;48251:14;48244:51;48233:69;:::o;48308:220::-;48448:34;48444:1;48436:6;48432:14;48425:58;48517:3;48512:2;48504:6;48500:15;48493:28;48414:114;:::o;48534:::-;48640:8;:::o;48654:236::-;48794:34;48790:1;48782:6;48778:14;48771:58;48863:19;48858:2;48850:6;48846:15;48839:44;48760:130;:::o;48896:220::-;49036:34;49032:1;49024:6;49020:14;49013:58;49105:3;49100:2;49092:6;49088:15;49081:28;49002:114;:::o;49122:174::-;49262:26;49258:1;49250:6;49246:14;49239:50;49228:68;:::o;49302:173::-;49442:25;49438:1;49430:6;49426:14;49419:49;49408:67;:::o;49481:181::-;49621:33;49617:1;49609:6;49605:14;49598:57;49587:75;:::o;49668:122::-;49741:24;49759:5;49741:24;:::i;:::-;49734:5;49731:35;49721:2;;49780:1;49777;49770:12;49721:2;49711:79;:::o;49796:138::-;49877:32;49903:5;49877:32;:::i;:::-;49870:5;49867:43;49857:2;;49924:1;49921;49914:12;49857:2;49847:87;:::o;49940:116::-;50010:21;50025:5;50010:21;:::i;:::-;50003:5;50000:32;49990:2;;50046:1;50043;50036:12;49990:2;49980:76;:::o;50062:122::-;50135:24;50153:5;50135:24;:::i;:::-;50128:5;50125:35;50115:2;;50174:1;50171;50164:12;50115:2;50105:79;:::o;50190:120::-;50262:23;50279:5;50262:23;:::i;:::-;50255:5;50252:34;50242:2;;50300:1;50297;50290:12;50242:2;50232:78;:::o;50316:122::-;50389:24;50407:5;50389:24;:::i;:::-;50382:5;50379:35;50369:2;;50428:1;50425;50418:12;50369:2;50359:79;:::o

Swarm Source

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