ETH Price: $3,315.35 (+0.19%)

Token

sJUNGLERS (sJunglers)
 

Overview

Max Total Supply

0 sJunglers

Holders

251

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 sJunglers
0x91ae5443d036370e1c8fc6edeb8e04f15c388665
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
StakedJunglers

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.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/IERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * 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;

    /**
     * @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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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


// 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/introspection/ERC165.sol


// 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/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// 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/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.7.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: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

        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 overridden 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 token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        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: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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 an {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 an {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 Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @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 {
                    /// @solidity memory-safe-assembly
                    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/access/IAccessControl.sol


// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)

pragma solidity ^0.8.0;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

// File: @openzeppelin/contracts/access/AccessControl.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/AccessControl.sol)

pragma solidity ^0.8.0;





/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

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

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `_msgSender()` is missing `role`.
     * Overriding this function changes the behavior of the {onlyRole} modifier.
     *
     * Format of the revert message is described in {_checkRole}.
     *
     * _Available since v4.6._
     */
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleGranted} event.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleRevoked} event.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     *
     * May emit a {RoleRevoked} event.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * May emit a {RoleGranted} event.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     *
     * NOTE: This function is deprecated in favor of {_grantRole}.
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleGranted} event.
     */
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleRevoked} event.
     */
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

// File: contracts/StakedJunglers.sol



pragma solidity ^0.8.4;



contract StakedJunglers is ERC721, AccessControl {
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    string private _baseTokenURI = "";

    constructor (address stakingContract) ERC721("sJUNGLERS", "sJunglers") {
        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _setupRole(MINTER_ROLE, stakingContract);
    }

    function mint(address to, uint256 tokenId) public onlyRole(MINTER_ROLE) {
        _safeMint(to, tokenId);
    }

    function batchMint( 
        address[] memory to,
        uint256[] memory tokenIds
    ) 
        public 
        onlyRole(MINTER_ROLE)
    {
        require(to.length == tokenIds.length);
        for (uint256 i = 0; i < tokenIds.length; i++) {
            mint(to[i], tokenIds[i]);
        }
    }

    function burn(uint256 tokenId) public onlyRole(MINTER_ROLE) {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }

    function batchBurn(uint256[] memory tokenIds) public onlyRole(MINTER_ROLE) {
        for (uint256 i = 0; i < tokenIds.length; i++) {
            burn(tokenIds[i]);
        }
    }

    // VIEW FUNCTIONS
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }

    // ADMIN FUNCTIONS
    function setBaseURI(string calldata baseURI) external onlyRole(DEFAULT_ADMIN_ROLE) {
        _baseTokenURI = baseURI;
    }

    function supportsInterface(bytes4 interfaceId) 
        public 
        view 
        virtual 
        override 
        (ERC721, AccessControl) returns (bool) 
    {
        return super.supportsInterface(interfaceId);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal pure override {
        require(from == address(0) || to == address(0), "Staked Beasts can not be transferred!");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"stakingContract","type":"address"}],"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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"tokenIds","type":"uint256[]"}],"name":"batchBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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"}]

608060405260405180602001604052806000815250600790805190602001906200002b929190620002c8565b503480156200003957600080fd5b5060405162003e3938038062003e3983398181016040528101906200005f91906200038f565b6040518060400160405280600981526020017f734a554e474c45525300000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f734a756e676c65727300000000000000000000000000000000000000000000008152508160009080519060200190620000e3929190620002c8565b508060019080519060200190620000fc929190620002c8565b505050620001146000801b336200014d60201b60201c565b620001467f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6826200014d60201b60201c565b5062000479565b6200015f82826200016360201b60201c565b5050565b6200017582826200025560201b60201c565b620002515760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001f6620002c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b828054620002d690620003f5565b90600052602060002090601f016020900481019282620002fa576000855562000346565b82601f106200031557805160ff191683800117855562000346565b8280016001018555821562000346579182015b828111156200034557825182559160200191906001019062000328565b5b50905062000355919062000359565b5090565b5b80821115620003745760008160009055506001016200035a565b5090565b60008151905062000389816200045f565b92915050565b600060208284031215620003a857620003a76200045a565b5b6000620003b88482850162000378565b91505092915050565b6000620003ce82620003d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200040e57607f821691505b602082108114156200042557620004246200042b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200046a81620003c1565b81146200047657600080fd5b50565b6139b080620004896000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636352211e116100de578063a22cb46511610097578063d539139311610071578063d539139314610456578063d547741f14610474578063dc8e92ea14610490578063e985e9c5146104ac57610173565b8063a22cb465146103ee578063b88d4fde1461040a578063c87b56dd1461042657610173565b80636352211e14610306578063685731071461033657806370a082311461035257806391d148541461038257806395d89b41146103b2578063a217fddf146103d057610173565b80632f2ff15d116101305780632f2ff15d1461025e57806336568abe1461027a57806340c10f191461029657806342842e0e146102b257806342966c68146102ce57806355f804b3146102ea57610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f657806323b872dd14610212578063248a9ca31461022e575b600080fd5b610192600480360381019061018d91906128cd565b6104dc565b60405161019f9190612d98565b60405180910390f35b6101b06104ee565b6040516101bd9190612dce565b60405180910390f35b6101e060048036038101906101db9190612974565b610580565b6040516101ed9190612d31565b60405180910390f35b610210600480360381019061020b919061275f565b6105c6565b005b61022c60048036038101906102279190612649565b6106de565b005b61024860048036038101906102439190612860565b61073e565b6040516102559190612db3565b60405180910390f35b6102786004803603810190610273919061288d565b61075e565b005b610294600480360381019061028f919061288d565b61077f565b005b6102b060048036038101906102ab919061275f565b610802565b005b6102cc60048036038101906102c79190612649565b61083b565b005b6102e860048036038101906102e39190612974565b61085b565b005b61030460048036038101906102ff9190612927565b6108e2565b005b610320600480360381019061031b9190612974565b610906565b60405161032d9190612d31565b60405180910390f35b610350600480360381019061034b919061279f565b6109b8565b005b61036c600480360381019061036791906125dc565b610a53565b6040516103799190612fd0565b60405180910390f35b61039c6004803603810190610397919061288d565b610b0b565b6040516103a99190612d98565b60405180910390f35b6103ba610b76565b6040516103c79190612dce565b60405180910390f35b6103d8610c08565b6040516103e59190612db3565b60405180910390f35b6104086004803603810190610403919061271f565b610c0f565b005b610424600480360381019061041f919061269c565b610c25565b005b610440600480360381019061043b9190612974565b610c87565b60405161044d9190612dce565b60405180910390f35b61045e610cef565b60405161046b9190612db3565b60405180910390f35b61048e6004803603810190610489919061288d565b610d13565b005b6104aa60048036038101906104a59190612817565b610d34565b005b6104c660048036038101906104c19190612609565b610da5565b6040516104d39190612d98565b60405180910390f35b60006104e782610e39565b9050919050565b6060600080546104fd906132db565b80601f0160208091040260200160405190810160405280929190818152602001828054610529906132db565b80156105765780601f1061054b57610100808354040283529160200191610576565b820191906000526020600020905b81548152906001019060200180831161055957829003601f168201915b5050505050905090565b600061058b82610eb3565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105d182610906565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063990612f50565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610661610efe565b73ffffffffffffffffffffffffffffffffffffffff161480610690575061068f8161068a610efe565b610da5565b5b6106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690612ed0565b60405180910390fd5b6106d98383610f06565b505050565b6106ef6106e9610efe565b82610fbf565b61072e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072590612f70565b60405180910390fd5b610739838383611054565b505050565b600060066000838152602001908152602001600020600101549050919050565b6107678261073e565b610770816112bb565b61077a83836112cf565b505050565b610787610efe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90612fb0565b60405180910390fd5b6107fe82826113b0565b5050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661082c816112bb565b6108368383611492565b505050565b61085683838360405180602001604052806000815250610c25565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610885816112bb565b610896610890610efe565b83610fbf565b6108d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cc90612f90565b60405180910390fd5b6108de826114b0565b5050565b6000801b6108ef816112bb565b8282600791906109009291906122b9565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690612f10565b60405180910390fd5b80915050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109e2816112bb565b81518351146109f057600080fd5b60005b8251811015610a4d57610a3a848281518110610a1257610a11613445565b5b6020026020010151848381518110610a2d57610a2c613445565b5b6020026020010151610802565b8080610a459061333e565b9150506109f3565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90612eb0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060018054610b85906132db565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb1906132db565b8015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b5050505050905090565b6000801b81565b610c21610c1a610efe565b83836115cd565b5050565b610c36610c30610efe565b83610fbf565b610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90612f70565b60405180910390fd5b610c818484848461173a565b50505050565b6060610c9282610eb3565b6000610c9c611796565b90506000815111610cbc5760405180602001604052806000815250610ce7565b80610cc684611828565b604051602001610cd7929190612cd3565b6040516020818303038152906040525b915050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610d1c8261073e565b610d25816112bb565b610d2f83836113b0565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610d5e816112bb565b60005b8251811015610da057610d8d838281518110610d8057610d7f613445565b5b602002602001015161085b565b8080610d989061333e565b915050610d61565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610eac5750610eab82611989565b5b9050919050565b610ebc81611a6b565b610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef290612f10565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f7983610906565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610fcb83610906565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061100d575061100c8185610da5565b5b8061104b57508373ffffffffffffffffffffffffffffffffffffffff1661103384610580565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661107482610906565b73ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c190612e30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113190612e70565b60405180910390fd5b611145838383611ad7565b611150600082610f06565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111a091906131bd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f791906130dc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46112b6838383611b82565b505050565b6112cc816112c7610efe565b611b87565b50565b6112d98282610b0b565b6113ac5760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611351610efe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6113ba8282610b0b565b1561148e5760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611433610efe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6114ac828260405180602001604052806000815250611c24565b5050565b60006114bb82610906565b90506114c981600084611ad7565b6114d4600083610f06565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461152491906131bd565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115c981600084611b82565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163390612e90565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161172d9190612d98565b60405180910390a3505050565b611745848484611054565b61175184848484611c7f565b611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790612e10565b60405180910390fd5b50505050565b6060600780546117a5906132db565b80601f01602080910402602001604051908101604052809291908181526020018280546117d1906132db565b801561181e5780601f106117f35761010080835404028352916020019161181e565b820191906000526020600020905b81548152906001019060200180831161180157829003601f168201915b5050505050905090565b60606000821415611870576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611984565b600082905060005b600082146118a257808061188b9061333e565b915050600a8261189b9190613132565b9150611878565b60008167ffffffffffffffff8111156118be576118bd613474565b5b6040519080825280601f01601f1916602001820160405280156118f05781602001600182028036833780820191505090505b5090505b6000851461197d5760018261190991906131bd565b9150600a856119189190613387565b603061192491906130dc565b60f81b81838151811061193a57611939613445565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856119769190613132565b94506118f4565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a5457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a645750611a6382611e16565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611b3e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7490612f30565b60405180910390fd5b505050565b505050565b611b918282610b0b565b611c2057611bb68173ffffffffffffffffffffffffffffffffffffffff166014611e80565b611bc48360001c6020611e80565b604051602001611bd5929190612cf7565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c179190612dce565b60405180910390fd5b5050565b611c2e83836120bc565b611c3b6000848484611c7f565b611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190612e10565b60405180910390fd5b505050565b6000611ca08473ffffffffffffffffffffffffffffffffffffffff16612296565b15611e09578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611cc9610efe565b8786866040518563ffffffff1660e01b8152600401611ceb9493929190612d4c565b602060405180830381600087803b158015611d0557600080fd5b505af1925050508015611d3657506040513d601f19601f82011682018060405250810190611d3391906128fa565b60015b611db9573d8060008114611d66576040519150601f19603f3d011682016040523d82523d6000602084013e611d6b565b606091505b50600081511415611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da890612e10565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611e0e565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060006002836002611e939190613163565b611e9d91906130dc565b67ffffffffffffffff811115611eb657611eb5613474565b5b6040519080825280601f01601f191660200182016040528015611ee85781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611f2057611f1f613445565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611f8457611f83613445565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611fc49190613163565b611fce91906130dc565b90505b600181111561206e577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106120105761200f613445565b5b1a60f81b82828151811061202757612026613445565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612067906132b1565b9050611fd1565b50600084146120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990612df0565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561212c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212390612ef0565b60405180910390fd5b61213581611a6b565b15612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90612e50565b60405180910390fd5b61218160008383611ad7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d191906130dc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461229260008383611b82565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546122c5906132db565b90600052602060002090601f0160209004810192826122e7576000855561232e565b82601f1061230057803560ff191683800117855561232e565b8280016001018555821561232e579182015b8281111561232d578235825591602001919060010190612312565b5b50905061233b919061233f565b5090565b5b80821115612358576000816000905550600101612340565b5090565b600061236f61236a84613010565b612feb565b90508083825260208201905082856020860282011115612392576123916134ad565b5b60005b858110156123c257816123a8888261247e565b845260208401935060208301925050600181019050612395565b5050509392505050565b60006123df6123da8461303c565b612feb565b90508083825260208201905082856020860282011115612402576124016134ad565b5b60005b85811015612432578161241888826125c7565b845260208401935060208301925050600181019050612405565b5050509392505050565b600061244f61244a84613068565b612feb565b90508281526020810184848401111561246b5761246a6134b2565b5b61247684828561326f565b509392505050565b60008135905061248d81613907565b92915050565b600082601f8301126124a8576124a76134a8565b5b81356124b884826020860161235c565b91505092915050565b600082601f8301126124d6576124d56134a8565b5b81356124e68482602086016123cc565b91505092915050565b6000813590506124fe8161391e565b92915050565b60008135905061251381613935565b92915050565b6000813590506125288161394c565b92915050565b60008151905061253d8161394c565b92915050565b600082601f830112612558576125576134a8565b5b813561256884826020860161243c565b91505092915050565b60008083601f840112612587576125866134a8565b5b8235905067ffffffffffffffff8111156125a4576125a36134a3565b5b6020830191508360018202830111156125c0576125bf6134ad565b5b9250929050565b6000813590506125d681613963565b92915050565b6000602082840312156125f2576125f16134bc565b5b60006126008482850161247e565b91505092915050565b600080604083850312156126205761261f6134bc565b5b600061262e8582860161247e565b925050602061263f8582860161247e565b9150509250929050565b600080600060608486031215612662576126616134bc565b5b60006126708682870161247e565b93505060206126818682870161247e565b9250506040612692868287016125c7565b9150509250925092565b600080600080608085870312156126b6576126b56134bc565b5b60006126c48782880161247e565b94505060206126d58782880161247e565b93505060406126e6878288016125c7565b925050606085013567ffffffffffffffff811115612707576127066134b7565b5b61271387828801612543565b91505092959194509250565b60008060408385031215612736576127356134bc565b5b60006127448582860161247e565b9250506020612755858286016124ef565b9150509250929050565b60008060408385031215612776576127756134bc565b5b60006127848582860161247e565b9250506020612795858286016125c7565b9150509250929050565b600080604083850312156127b6576127b56134bc565b5b600083013567ffffffffffffffff8111156127d4576127d36134b7565b5b6127e085828601612493565b925050602083013567ffffffffffffffff811115612801576128006134b7565b5b61280d858286016124c1565b9150509250929050565b60006020828403121561282d5761282c6134bc565b5b600082013567ffffffffffffffff81111561284b5761284a6134b7565b5b612857848285016124c1565b91505092915050565b600060208284031215612876576128756134bc565b5b600061288484828501612504565b91505092915050565b600080604083850312156128a4576128a36134bc565b5b60006128b285828601612504565b92505060206128c38582860161247e565b9150509250929050565b6000602082840312156128e3576128e26134bc565b5b60006128f184828501612519565b91505092915050565b6000602082840312156129105761290f6134bc565b5b600061291e8482850161252e565b91505092915050565b6000806020838503121561293e5761293d6134bc565b5b600083013567ffffffffffffffff81111561295c5761295b6134b7565b5b61296885828601612571565b92509250509250929050565b60006020828403121561298a576129896134bc565b5b6000612998848285016125c7565b91505092915050565b6129aa816131f1565b82525050565b6129b981613203565b82525050565b6129c88161320f565b82525050565b60006129d982613099565b6129e381856130af565b93506129f381856020860161327e565b6129fc816134c1565b840191505092915050565b6000612a12826130a4565b612a1c81856130c0565b9350612a2c81856020860161327e565b612a35816134c1565b840191505092915050565b6000612a4b826130a4565b612a5581856130d1565b9350612a6581856020860161327e565b80840191505092915050565b6000612a7e6020836130c0565b9150612a89826134d2565b602082019050919050565b6000612aa16032836130c0565b9150612aac826134fb565b604082019050919050565b6000612ac46025836130c0565b9150612acf8261354a565b604082019050919050565b6000612ae7601c836130c0565b9150612af282613599565b602082019050919050565b6000612b0a6024836130c0565b9150612b15826135c2565b604082019050919050565b6000612b2d6019836130c0565b9150612b3882613611565b602082019050919050565b6000612b506029836130c0565b9150612b5b8261363a565b604082019050919050565b6000612b73603e836130c0565b9150612b7e82613689565b604082019050919050565b6000612b966020836130c0565b9150612ba1826136d8565b602082019050919050565b6000612bb96018836130c0565b9150612bc482613701565b602082019050919050565b6000612bdc6025836130c0565b9150612be78261372a565b604082019050919050565b6000612bff6021836130c0565b9150612c0a82613779565b604082019050919050565b6000612c226017836130d1565b9150612c2d826137c8565b601782019050919050565b6000612c45602e836130c0565b9150612c50826137f1565b604082019050919050565b6000612c686030836130c0565b9150612c7382613840565b604082019050919050565b6000612c8b6011836130d1565b9150612c968261388f565b601182019050919050565b6000612cae602f836130c0565b9150612cb9826138b8565b604082019050919050565b612ccd81613265565b82525050565b6000612cdf8285612a40565b9150612ceb8284612a40565b91508190509392505050565b6000612d0282612c15565b9150612d0e8285612a40565b9150612d1982612c7e565b9150612d258284612a40565b91508190509392505050565b6000602082019050612d4660008301846129a1565b92915050565b6000608082019050612d6160008301876129a1565b612d6e60208301866129a1565b612d7b6040830185612cc4565b8181036060830152612d8d81846129ce565b905095945050505050565b6000602082019050612dad60008301846129b0565b92915050565b6000602082019050612dc860008301846129bf565b92915050565b60006020820190508181036000830152612de88184612a07565b905092915050565b60006020820190508181036000830152612e0981612a71565b9050919050565b60006020820190508181036000830152612e2981612a94565b9050919050565b60006020820190508181036000830152612e4981612ab7565b9050919050565b60006020820190508181036000830152612e6981612ada565b9050919050565b60006020820190508181036000830152612e8981612afd565b9050919050565b60006020820190508181036000830152612ea981612b20565b9050919050565b60006020820190508181036000830152612ec981612b43565b9050919050565b60006020820190508181036000830152612ee981612b66565b9050919050565b60006020820190508181036000830152612f0981612b89565b9050919050565b60006020820190508181036000830152612f2981612bac565b9050919050565b60006020820190508181036000830152612f4981612bcf565b9050919050565b60006020820190508181036000830152612f6981612bf2565b9050919050565b60006020820190508181036000830152612f8981612c38565b9050919050565b60006020820190508181036000830152612fa981612c5b565b9050919050565b60006020820190508181036000830152612fc981612ca1565b9050919050565b6000602082019050612fe56000830184612cc4565b92915050565b6000612ff5613006565b9050613001828261330d565b919050565b6000604051905090565b600067ffffffffffffffff82111561302b5761302a613474565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561305757613056613474565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561308357613082613474565b5b61308c826134c1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006130e782613265565b91506130f283613265565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613127576131266133b8565b5b828201905092915050565b600061313d82613265565b915061314883613265565b925082613158576131576133e7565b5b828204905092915050565b600061316e82613265565b915061317983613265565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131b2576131b16133b8565b5b828202905092915050565b60006131c882613265565b91506131d383613265565b9250828210156131e6576131e56133b8565b5b828203905092915050565b60006131fc82613245565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561329c578082015181840152602081019050613281565b838111156132ab576000848401525b50505050565b60006132bc82613265565b915060008214156132d0576132cf6133b8565b5b600182039050919050565b600060028204905060018216806132f357607f821691505b6020821081141561330757613306613416565b5b50919050565b613316826134c1565b810181811067ffffffffffffffff8211171561333557613334613474565b5b80604052505050565b600061334982613265565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561337c5761337b6133b8565b5b600182019050919050565b600061339282613265565b915061339d83613265565b9250826133ad576133ac6133e7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f5374616b6564204265617374732063616e206e6f74206265207472616e73666560008201527f7272656421000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b613910816131f1565b811461391b57600080fd5b50565b61392781613203565b811461393257600080fd5b50565b61393e8161320f565b811461394957600080fd5b50565b61395581613219565b811461396057600080fd5b50565b61396c81613265565b811461397757600080fd5b5056fea264697066735822122092610f3491f14e9ef92d28d672a03dee266a1a67a88030c4cdbaf5a7edda490a64736f6c63430008070033000000000000000000000000d930c1c055c96ad8f58c9d6761ab4cbb71e176f4

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c80636352211e116100de578063a22cb46511610097578063d539139311610071578063d539139314610456578063d547741f14610474578063dc8e92ea14610490578063e985e9c5146104ac57610173565b8063a22cb465146103ee578063b88d4fde1461040a578063c87b56dd1461042657610173565b80636352211e14610306578063685731071461033657806370a082311461035257806391d148541461038257806395d89b41146103b2578063a217fddf146103d057610173565b80632f2ff15d116101305780632f2ff15d1461025e57806336568abe1461027a57806340c10f191461029657806342842e0e146102b257806342966c68146102ce57806355f804b3146102ea57610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f657806323b872dd14610212578063248a9ca31461022e575b600080fd5b610192600480360381019061018d91906128cd565b6104dc565b60405161019f9190612d98565b60405180910390f35b6101b06104ee565b6040516101bd9190612dce565b60405180910390f35b6101e060048036038101906101db9190612974565b610580565b6040516101ed9190612d31565b60405180910390f35b610210600480360381019061020b919061275f565b6105c6565b005b61022c60048036038101906102279190612649565b6106de565b005b61024860048036038101906102439190612860565b61073e565b6040516102559190612db3565b60405180910390f35b6102786004803603810190610273919061288d565b61075e565b005b610294600480360381019061028f919061288d565b61077f565b005b6102b060048036038101906102ab919061275f565b610802565b005b6102cc60048036038101906102c79190612649565b61083b565b005b6102e860048036038101906102e39190612974565b61085b565b005b61030460048036038101906102ff9190612927565b6108e2565b005b610320600480360381019061031b9190612974565b610906565b60405161032d9190612d31565b60405180910390f35b610350600480360381019061034b919061279f565b6109b8565b005b61036c600480360381019061036791906125dc565b610a53565b6040516103799190612fd0565b60405180910390f35b61039c6004803603810190610397919061288d565b610b0b565b6040516103a99190612d98565b60405180910390f35b6103ba610b76565b6040516103c79190612dce565b60405180910390f35b6103d8610c08565b6040516103e59190612db3565b60405180910390f35b6104086004803603810190610403919061271f565b610c0f565b005b610424600480360381019061041f919061269c565b610c25565b005b610440600480360381019061043b9190612974565b610c87565b60405161044d9190612dce565b60405180910390f35b61045e610cef565b60405161046b9190612db3565b60405180910390f35b61048e6004803603810190610489919061288d565b610d13565b005b6104aa60048036038101906104a59190612817565b610d34565b005b6104c660048036038101906104c19190612609565b610da5565b6040516104d39190612d98565b60405180910390f35b60006104e782610e39565b9050919050565b6060600080546104fd906132db565b80601f0160208091040260200160405190810160405280929190818152602001828054610529906132db565b80156105765780601f1061054b57610100808354040283529160200191610576565b820191906000526020600020905b81548152906001019060200180831161055957829003601f168201915b5050505050905090565b600061058b82610eb3565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105d182610906565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063990612f50565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610661610efe565b73ffffffffffffffffffffffffffffffffffffffff161480610690575061068f8161068a610efe565b610da5565b5b6106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690612ed0565b60405180910390fd5b6106d98383610f06565b505050565b6106ef6106e9610efe565b82610fbf565b61072e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072590612f70565b60405180910390fd5b610739838383611054565b505050565b600060066000838152602001908152602001600020600101549050919050565b6107678261073e565b610770816112bb565b61077a83836112cf565b505050565b610787610efe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90612fb0565b60405180910390fd5b6107fe82826113b0565b5050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661082c816112bb565b6108368383611492565b505050565b61085683838360405180602001604052806000815250610c25565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610885816112bb565b610896610890610efe565b83610fbf565b6108d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cc90612f90565b60405180910390fd5b6108de826114b0565b5050565b6000801b6108ef816112bb565b8282600791906109009291906122b9565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690612f10565b60405180910390fd5b80915050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109e2816112bb565b81518351146109f057600080fd5b60005b8251811015610a4d57610a3a848281518110610a1257610a11613445565b5b6020026020010151848381518110610a2d57610a2c613445565b5b6020026020010151610802565b8080610a459061333e565b9150506109f3565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90612eb0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060018054610b85906132db565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb1906132db565b8015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b5050505050905090565b6000801b81565b610c21610c1a610efe565b83836115cd565b5050565b610c36610c30610efe565b83610fbf565b610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90612f70565b60405180910390fd5b610c818484848461173a565b50505050565b6060610c9282610eb3565b6000610c9c611796565b90506000815111610cbc5760405180602001604052806000815250610ce7565b80610cc684611828565b604051602001610cd7929190612cd3565b6040516020818303038152906040525b915050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610d1c8261073e565b610d25816112bb565b610d2f83836113b0565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610d5e816112bb565b60005b8251811015610da057610d8d838281518110610d8057610d7f613445565b5b602002602001015161085b565b8080610d989061333e565b915050610d61565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610eac5750610eab82611989565b5b9050919050565b610ebc81611a6b565b610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef290612f10565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f7983610906565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610fcb83610906565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061100d575061100c8185610da5565b5b8061104b57508373ffffffffffffffffffffffffffffffffffffffff1661103384610580565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661107482610906565b73ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c190612e30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113190612e70565b60405180910390fd5b611145838383611ad7565b611150600082610f06565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111a091906131bd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f791906130dc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46112b6838383611b82565b505050565b6112cc816112c7610efe565b611b87565b50565b6112d98282610b0b565b6113ac5760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611351610efe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6113ba8282610b0b565b1561148e5760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611433610efe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6114ac828260405180602001604052806000815250611c24565b5050565b60006114bb82610906565b90506114c981600084611ad7565b6114d4600083610f06565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461152491906131bd565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115c981600084611b82565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163390612e90565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161172d9190612d98565b60405180910390a3505050565b611745848484611054565b61175184848484611c7f565b611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790612e10565b60405180910390fd5b50505050565b6060600780546117a5906132db565b80601f01602080910402602001604051908101604052809291908181526020018280546117d1906132db565b801561181e5780601f106117f35761010080835404028352916020019161181e565b820191906000526020600020905b81548152906001019060200180831161180157829003601f168201915b5050505050905090565b60606000821415611870576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611984565b600082905060005b600082146118a257808061188b9061333e565b915050600a8261189b9190613132565b9150611878565b60008167ffffffffffffffff8111156118be576118bd613474565b5b6040519080825280601f01601f1916602001820160405280156118f05781602001600182028036833780820191505090505b5090505b6000851461197d5760018261190991906131bd565b9150600a856119189190613387565b603061192491906130dc565b60f81b81838151811061193a57611939613445565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856119769190613132565b94506118f4565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a5457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a645750611a6382611e16565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611b3e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7490612f30565b60405180910390fd5b505050565b505050565b611b918282610b0b565b611c2057611bb68173ffffffffffffffffffffffffffffffffffffffff166014611e80565b611bc48360001c6020611e80565b604051602001611bd5929190612cf7565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c179190612dce565b60405180910390fd5b5050565b611c2e83836120bc565b611c3b6000848484611c7f565b611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190612e10565b60405180910390fd5b505050565b6000611ca08473ffffffffffffffffffffffffffffffffffffffff16612296565b15611e09578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611cc9610efe565b8786866040518563ffffffff1660e01b8152600401611ceb9493929190612d4c565b602060405180830381600087803b158015611d0557600080fd5b505af1925050508015611d3657506040513d601f19601f82011682018060405250810190611d3391906128fa565b60015b611db9573d8060008114611d66576040519150601f19603f3d011682016040523d82523d6000602084013e611d6b565b606091505b50600081511415611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da890612e10565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611e0e565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060006002836002611e939190613163565b611e9d91906130dc565b67ffffffffffffffff811115611eb657611eb5613474565b5b6040519080825280601f01601f191660200182016040528015611ee85781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611f2057611f1f613445565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611f8457611f83613445565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611fc49190613163565b611fce91906130dc565b90505b600181111561206e577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106120105761200f613445565b5b1a60f81b82828151811061202757612026613445565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612067906132b1565b9050611fd1565b50600084146120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990612df0565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561212c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212390612ef0565b60405180910390fd5b61213581611a6b565b15612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90612e50565b60405180910390fd5b61218160008383611ad7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d191906130dc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461229260008383611b82565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546122c5906132db565b90600052602060002090601f0160209004810192826122e7576000855561232e565b82601f1061230057803560ff191683800117855561232e565b8280016001018555821561232e579182015b8281111561232d578235825591602001919060010190612312565b5b50905061233b919061233f565b5090565b5b80821115612358576000816000905550600101612340565b5090565b600061236f61236a84613010565b612feb565b90508083825260208201905082856020860282011115612392576123916134ad565b5b60005b858110156123c257816123a8888261247e565b845260208401935060208301925050600181019050612395565b5050509392505050565b60006123df6123da8461303c565b612feb565b90508083825260208201905082856020860282011115612402576124016134ad565b5b60005b85811015612432578161241888826125c7565b845260208401935060208301925050600181019050612405565b5050509392505050565b600061244f61244a84613068565b612feb565b90508281526020810184848401111561246b5761246a6134b2565b5b61247684828561326f565b509392505050565b60008135905061248d81613907565b92915050565b600082601f8301126124a8576124a76134a8565b5b81356124b884826020860161235c565b91505092915050565b600082601f8301126124d6576124d56134a8565b5b81356124e68482602086016123cc565b91505092915050565b6000813590506124fe8161391e565b92915050565b60008135905061251381613935565b92915050565b6000813590506125288161394c565b92915050565b60008151905061253d8161394c565b92915050565b600082601f830112612558576125576134a8565b5b813561256884826020860161243c565b91505092915050565b60008083601f840112612587576125866134a8565b5b8235905067ffffffffffffffff8111156125a4576125a36134a3565b5b6020830191508360018202830111156125c0576125bf6134ad565b5b9250929050565b6000813590506125d681613963565b92915050565b6000602082840312156125f2576125f16134bc565b5b60006126008482850161247e565b91505092915050565b600080604083850312156126205761261f6134bc565b5b600061262e8582860161247e565b925050602061263f8582860161247e565b9150509250929050565b600080600060608486031215612662576126616134bc565b5b60006126708682870161247e565b93505060206126818682870161247e565b9250506040612692868287016125c7565b9150509250925092565b600080600080608085870312156126b6576126b56134bc565b5b60006126c48782880161247e565b94505060206126d58782880161247e565b93505060406126e6878288016125c7565b925050606085013567ffffffffffffffff811115612707576127066134b7565b5b61271387828801612543565b91505092959194509250565b60008060408385031215612736576127356134bc565b5b60006127448582860161247e565b9250506020612755858286016124ef565b9150509250929050565b60008060408385031215612776576127756134bc565b5b60006127848582860161247e565b9250506020612795858286016125c7565b9150509250929050565b600080604083850312156127b6576127b56134bc565b5b600083013567ffffffffffffffff8111156127d4576127d36134b7565b5b6127e085828601612493565b925050602083013567ffffffffffffffff811115612801576128006134b7565b5b61280d858286016124c1565b9150509250929050565b60006020828403121561282d5761282c6134bc565b5b600082013567ffffffffffffffff81111561284b5761284a6134b7565b5b612857848285016124c1565b91505092915050565b600060208284031215612876576128756134bc565b5b600061288484828501612504565b91505092915050565b600080604083850312156128a4576128a36134bc565b5b60006128b285828601612504565b92505060206128c38582860161247e565b9150509250929050565b6000602082840312156128e3576128e26134bc565b5b60006128f184828501612519565b91505092915050565b6000602082840312156129105761290f6134bc565b5b600061291e8482850161252e565b91505092915050565b6000806020838503121561293e5761293d6134bc565b5b600083013567ffffffffffffffff81111561295c5761295b6134b7565b5b61296885828601612571565b92509250509250929050565b60006020828403121561298a576129896134bc565b5b6000612998848285016125c7565b91505092915050565b6129aa816131f1565b82525050565b6129b981613203565b82525050565b6129c88161320f565b82525050565b60006129d982613099565b6129e381856130af565b93506129f381856020860161327e565b6129fc816134c1565b840191505092915050565b6000612a12826130a4565b612a1c81856130c0565b9350612a2c81856020860161327e565b612a35816134c1565b840191505092915050565b6000612a4b826130a4565b612a5581856130d1565b9350612a6581856020860161327e565b80840191505092915050565b6000612a7e6020836130c0565b9150612a89826134d2565b602082019050919050565b6000612aa16032836130c0565b9150612aac826134fb565b604082019050919050565b6000612ac46025836130c0565b9150612acf8261354a565b604082019050919050565b6000612ae7601c836130c0565b9150612af282613599565b602082019050919050565b6000612b0a6024836130c0565b9150612b15826135c2565b604082019050919050565b6000612b2d6019836130c0565b9150612b3882613611565b602082019050919050565b6000612b506029836130c0565b9150612b5b8261363a565b604082019050919050565b6000612b73603e836130c0565b9150612b7e82613689565b604082019050919050565b6000612b966020836130c0565b9150612ba1826136d8565b602082019050919050565b6000612bb96018836130c0565b9150612bc482613701565b602082019050919050565b6000612bdc6025836130c0565b9150612be78261372a565b604082019050919050565b6000612bff6021836130c0565b9150612c0a82613779565b604082019050919050565b6000612c226017836130d1565b9150612c2d826137c8565b601782019050919050565b6000612c45602e836130c0565b9150612c50826137f1565b604082019050919050565b6000612c686030836130c0565b9150612c7382613840565b604082019050919050565b6000612c8b6011836130d1565b9150612c968261388f565b601182019050919050565b6000612cae602f836130c0565b9150612cb9826138b8565b604082019050919050565b612ccd81613265565b82525050565b6000612cdf8285612a40565b9150612ceb8284612a40565b91508190509392505050565b6000612d0282612c15565b9150612d0e8285612a40565b9150612d1982612c7e565b9150612d258284612a40565b91508190509392505050565b6000602082019050612d4660008301846129a1565b92915050565b6000608082019050612d6160008301876129a1565b612d6e60208301866129a1565b612d7b6040830185612cc4565b8181036060830152612d8d81846129ce565b905095945050505050565b6000602082019050612dad60008301846129b0565b92915050565b6000602082019050612dc860008301846129bf565b92915050565b60006020820190508181036000830152612de88184612a07565b905092915050565b60006020820190508181036000830152612e0981612a71565b9050919050565b60006020820190508181036000830152612e2981612a94565b9050919050565b60006020820190508181036000830152612e4981612ab7565b9050919050565b60006020820190508181036000830152612e6981612ada565b9050919050565b60006020820190508181036000830152612e8981612afd565b9050919050565b60006020820190508181036000830152612ea981612b20565b9050919050565b60006020820190508181036000830152612ec981612b43565b9050919050565b60006020820190508181036000830152612ee981612b66565b9050919050565b60006020820190508181036000830152612f0981612b89565b9050919050565b60006020820190508181036000830152612f2981612bac565b9050919050565b60006020820190508181036000830152612f4981612bcf565b9050919050565b60006020820190508181036000830152612f6981612bf2565b9050919050565b60006020820190508181036000830152612f8981612c38565b9050919050565b60006020820190508181036000830152612fa981612c5b565b9050919050565b60006020820190508181036000830152612fc981612ca1565b9050919050565b6000602082019050612fe56000830184612cc4565b92915050565b6000612ff5613006565b9050613001828261330d565b919050565b6000604051905090565b600067ffffffffffffffff82111561302b5761302a613474565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561305757613056613474565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561308357613082613474565b5b61308c826134c1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006130e782613265565b91506130f283613265565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613127576131266133b8565b5b828201905092915050565b600061313d82613265565b915061314883613265565b925082613158576131576133e7565b5b828204905092915050565b600061316e82613265565b915061317983613265565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131b2576131b16133b8565b5b828202905092915050565b60006131c882613265565b91506131d383613265565b9250828210156131e6576131e56133b8565b5b828203905092915050565b60006131fc82613245565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561329c578082015181840152602081019050613281565b838111156132ab576000848401525b50505050565b60006132bc82613265565b915060008214156132d0576132cf6133b8565b5b600182039050919050565b600060028204905060018216806132f357607f821691505b6020821081141561330757613306613416565b5b50919050565b613316826134c1565b810181811067ffffffffffffffff8211171561333557613334613474565b5b80604052505050565b600061334982613265565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561337c5761337b6133b8565b5b600182019050919050565b600061339282613265565b915061339d83613265565b9250826133ad576133ac6133e7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f5374616b6564204265617374732063616e206e6f74206265207472616e73666560008201527f7272656421000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b613910816131f1565b811461391b57600080fd5b50565b61392781613203565b811461393257600080fd5b50565b61393e8161320f565b811461394957600080fd5b50565b61395581613219565b811461396057600080fd5b50565b61396c81613265565b811461397757600080fd5b5056fea264697066735822122092610f3491f14e9ef92d28d672a03dee266a1a67a88030c4cdbaf5a7edda490a64736f6c63430008070033

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

000000000000000000000000d930c1c055c96ad8f58c9d6761ab4cbb71e176f4

-----Decoded View---------------
Arg [0] : stakingContract (address): 0xD930c1C055C96aD8f58c9d6761Ab4Cbb71E176F4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d930c1c055c96ad8f58c9d6761ab4cbb71e176f4


Deployed Bytecode Sourcemap

46595:1985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48099:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22964:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24477:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23994:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25177:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42673:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43114:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44258:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46953:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25584:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47392:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47966:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22675:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47074:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22406:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41133:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23133:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40238:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24720:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25840:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23308:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46651:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43554:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47606:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24946:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48099:233;48258:4;48288:36;48312:11;48288:23;:36::i;:::-;48281:43;;48099:233;;;:::o;22964:100::-;23018:13;23051:5;23044:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22964:100;:::o;24477:171::-;24553:7;24573:23;24588:7;24573:14;:23::i;:::-;24616:15;:24;24632:7;24616:24;;;;;;;;;;;;;;;;;;;;;24609:31;;24477:171;;;:::o;23994:417::-;24075:13;24091:23;24106:7;24091:14;:23::i;:::-;24075:39;;24139:5;24133:11;;:2;:11;;;;24125:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24233:5;24217:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24242:37;24259:5;24266:12;:10;:12::i;:::-;24242:16;:37::i;:::-;24217:62;24195:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;24382:21;24391:2;24395:7;24382:8;:21::i;:::-;24064:347;23994:417;;:::o;25177:336::-;25372:41;25391:12;:10;:12::i;:::-;25405:7;25372:18;:41::i;:::-;25364:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25477:28;25487:4;25493:2;25497:7;25477:9;:28::i;:::-;25177:336;;;:::o;42673:131::-;42747:7;42774:6;:12;42781:4;42774:12;;;;;;;;;;;:22;;;42767:29;;42673:131;;;:::o;43114:147::-;43197:18;43210:4;43197:12;:18::i;:::-;40729:16;40740:4;40729:10;:16::i;:::-;43228:25:::1;43239:4;43245:7;43228:10;:25::i;:::-;43114:147:::0;;;:::o;44258:218::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:23;;;44346:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;44442:26;44454:4;44460:7;44442:11;:26::i;:::-;44258:218;;:::o;46953:113::-;46689:24;40729:16;40740:4;40729:10;:16::i;:::-;47036:22:::1;47046:2;47050:7;47036:9;:22::i;:::-;46953:113:::0;;;:::o;25584:185::-;25722:39;25739:4;25745:2;25749:7;25722:39;;;;;;;;;;;;:16;:39::i;:::-;25584:185;;;:::o;47392:206::-;46689:24;40729:16;40740:4;40729:10;:16::i;:::-;47471:41:::1;47490:12;:10;:12::i;:::-;47504:7;47471:18;:41::i;:::-;47463:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;47576:14;47582:7;47576:5;:14::i;:::-;47392:206:::0;;:::o;47966:125::-;40283:4;48029:18;;40729:16;40740:4;40729:10;:16::i;:::-;48076:7:::1;;48060:13;:23;;;;;;;:::i;:::-;;47966:125:::0;;;:::o;22675:222::-;22747:7;22767:13;22783:7;:16;22791:7;22783:16;;;;;;;;;;;;;;;;;;;;;22767:32;;22835:1;22818:19;;:5;:19;;;;22810:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22884:5;22877:12;;;22675:222;;;:::o;47074:310::-;46689:24;40729:16;40740:4;40729:10;:16::i;:::-;47253:8:::1;:15;47240:2;:9;:28;47232:37;;;::::0;::::1;;47285:9;47280:97;47304:8;:15;47300:1;:19;47280:97;;;47341:24;47346:2;47349:1;47346:5;;;;;;;;:::i;:::-;;;;;;;;47353:8;47362:1;47353:11;;;;;;;;:::i;:::-;;;;;;;;47341:4;:24::i;:::-;47321:3;;;;;:::i;:::-;;;;47280:97;;;;47074:310:::0;;;:::o;22406:207::-;22478:7;22523:1;22506:19;;:5;:19;;;;22498:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22589:9;:16;22599:5;22589:16;;;;;;;;;;;;;;;;22582:23;;22406:207;;;:::o;41133:147::-;41219:4;41243:6;:12;41250:4;41243:12;;;;;;;;;;;:20;;:29;41264:7;41243:29;;;;;;;;;;;;;;;;;;;;;;;;;41236:36;;41133:147;;;;:::o;23133:104::-;23189:13;23222:7;23215:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23133:104;:::o;40238:49::-;40283:4;40238:49;;;:::o;24720:155::-;24815:52;24834:12;:10;:12::i;:::-;24848:8;24858;24815:18;:52::i;:::-;24720:155;;:::o;25840:323::-;26014:41;26033:12;:10;:12::i;:::-;26047:7;26014:18;:41::i;:::-;26006:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;26117:38;26131:4;26137:2;26141:7;26150:4;26117:13;:38::i;:::-;25840:323;;;;:::o;23308:281::-;23381:13;23407:23;23422:7;23407:14;:23::i;:::-;23443:21;23467:10;:8;:10::i;:::-;23443:34;;23519:1;23501:7;23495:21;:25;:86;;;;;;;;;;;;;;;;;23547:7;23556:18;:7;:16;:18::i;:::-;23530:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23495:86;23488:93;;;23308:281;;;:::o;46651:62::-;46689:24;46651:62;:::o;43554:149::-;43638:18;43651:4;43638:12;:18::i;:::-;40729:16;40740:4;40729:10;:16::i;:::-;43669:26:::1;43681:4;43687:7;43669:11;:26::i;:::-;43554:149:::0;;;:::o;47606:183::-;46689:24;40729:16;40740:4;40729:10;:16::i;:::-;47697:9:::1;47692:90;47716:8;:15;47712:1;:19;47692:90;;;47753:17;47758:8;47767:1;47758:11;;;;;;;;:::i;:::-;;;;;;;;47753:4;:17::i;:::-;47733:3;;;;;:::i;:::-;;;;47692:90;;;;47606:183:::0;;:::o;24946:164::-;25043:4;25067:18;:25;25086:5;25067:25;;;;;;;;;;;;;;;:35;25093:8;25067:35;;;;;;;;;;;;;;;;;;;;;;;;;25060:42;;24946:164;;;;:::o;40837:204::-;40922:4;40961:32;40946:47;;;:11;:47;;;;:87;;;;40997:36;41021:11;40997:23;:36::i;:::-;40946:87;40939:94;;40837:204;;;:::o;32452:135::-;32534:16;32542:7;32534;:16::i;:::-;32526:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32452:135;:::o;20416:98::-;20469:7;20496:10;20489:17;;20416:98;:::o;31731:174::-;31833:2;31806:15;:24;31822:7;31806:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31889:7;31885:2;31851:46;;31860:23;31875:7;31860:14;:23::i;:::-;31851:46;;;;;;;;;;;;31731:174;;:::o;27964:264::-;28057:4;28074:13;28090:23;28105:7;28090:14;:23::i;:::-;28074:39;;28143:5;28132:16;;:7;:16;;;:52;;;;28152:32;28169:5;28176:7;28152:16;:32::i;:::-;28132:52;:87;;;;28212:7;28188:31;;:20;28200:7;28188:11;:20::i;:::-;:31;;;28132:87;28124:96;;;27964:264;;;;:::o;30987:625::-;31146:4;31119:31;;:23;31134:7;31119:14;:23::i;:::-;:31;;;31111:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31225:1;31211:16;;:2;:16;;;;31203:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31281:39;31302:4;31308:2;31312:7;31281:20;:39::i;:::-;31385:29;31402:1;31406:7;31385:8;:29::i;:::-;31446:1;31427:9;:15;31437:4;31427:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31475:1;31458:9;:13;31468:2;31458:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31506:2;31487:7;:16;31495:7;31487:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31545:7;31541:2;31526:27;;31535:4;31526:27;;;;;;;;;;;;31566:38;31586:4;31592:2;31596:7;31566:19;:38::i;:::-;30987:625;;;:::o;41584:105::-;41651:30;41662:4;41668:12;:10;:12::i;:::-;41651:10;:30::i;:::-;41584:105;:::o;45855:238::-;45939:22;45947:4;45953:7;45939;:22::i;:::-;45934:152;;46010:4;45978:6;:12;45985:4;45978:12;;;;;;;;;;;:20;;:29;45999:7;45978:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;46061:12;:10;:12::i;:::-;46034:40;;46052:7;46034:40;;46046:4;46034:40;;;;;;;;;;45934:152;45855:238;;:::o;46273:239::-;46357:22;46365:4;46371:7;46357;:22::i;:::-;46353:152;;;46428:5;46396:6;:12;46403:4;46396:12;;;;;;;;;;;:20;;:29;46417:7;46396:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;46480:12;:10;:12::i;:::-;46453:40;;46471:7;46453:40;;46465:4;46453:40;;;;;;;;;;46353:152;46273:239;;:::o;28570:110::-;28646:26;28656:2;28660:7;28646:26;;;;;;;;;;;;:9;:26::i;:::-;28570:110;;:::o;30230:420::-;30290:13;30306:23;30321:7;30306:14;:23::i;:::-;30290:39;;30342:48;30363:5;30378:1;30382:7;30342:20;:48::i;:::-;30431:29;30448:1;30452:7;30431:8;:29::i;:::-;30493:1;30473:9;:16;30483:5;30473:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;30512:7;:16;30520:7;30512:16;;;;;;;;;;;;30505:23;;;;;;;;;;;30574:7;30570:1;30546:36;;30555:5;30546:36;;;;;;;;;;;;30595:47;30615:5;30630:1;30634:7;30595:19;:47::i;:::-;30279:371;30230:420;:::o;32048:315::-;32203:8;32194:17;;:5;:17;;;;32186:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32290:8;32252:18;:25;32271:5;32252:25;;;;;;;;;;;;;;;:35;32278:8;32252:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32336:8;32314:41;;32329:5;32314:41;;;32346:8;32314:41;;;;;;:::i;:::-;;;;;;;;32048:315;;;:::o;27044:313::-;27200:28;27210:4;27216:2;27220:7;27200:9;:28::i;:::-;27247:47;27270:4;27276:2;27280:7;27289:4;27247:22;:47::i;:::-;27239:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27044:313;;;;:::o;47820:114::-;47880:13;47913;47906:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47820:114;:::o;17670:723::-;17726:13;17956:1;17947:5;:10;17943:53;;;17974:10;;;;;;;;;;;;;;;;;;;;;17943:53;18006:12;18021:5;18006:20;;18037:14;18062:78;18077:1;18069:4;:9;18062:78;;18095:8;;;;;:::i;:::-;;;;18126:2;18118:10;;;;;:::i;:::-;;;18062:78;;;18150:19;18182:6;18172:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18150:39;;18200:154;18216:1;18207:5;:10;18200:154;;18244:1;18234:11;;;;;:::i;:::-;;;18311:2;18303:5;:10;;;;:::i;:::-;18290:2;:24;;;;:::i;:::-;18277:39;;18260:6;18267;18260:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18340:2;18331:11;;;;;:::i;:::-;;;18200:154;;;18378:6;18364:21;;;;;17670:723;;;;:::o;22037:305::-;22139:4;22191:25;22176:40;;;:11;:40;;;;:105;;;;22248:33;22233:48;;;:11;:48;;;;22176:105;:158;;;;22298:36;22322:11;22298:23;:36::i;:::-;22176:158;22156:178;;22037:305;;;:::o;27670:127::-;27735:4;27787:1;27759:30;;:7;:16;27767:7;27759:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27752:37;;27670:127;;;:::o;48340:237::-;48505:1;48489:18;;:4;:18;;;:38;;;;48525:1;48511:16;;:2;:16;;;48489:38;48481:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;48340:237;;;:::o;35087:125::-;;;;:::o;41979:505::-;42068:22;42076:4;42082:7;42068;:22::i;:::-;42063:414;;42256:41;42284:7;42256:41;;42294:2;42256:19;:41::i;:::-;42370:38;42398:4;42390:13;;42405:2;42370:19;:38::i;:::-;42161:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42107:358;;;;;;;;;;;:::i;:::-;;;;;;;;42063:414;41979:505;;:::o;28907:319::-;29036:18;29042:2;29046:7;29036:5;:18::i;:::-;29087:53;29118:1;29122:2;29126:7;29135:4;29087:22;:53::i;:::-;29065:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;28907:319;;;:::o;33151:853::-;33305:4;33326:15;:2;:13;;;:15::i;:::-;33322:675;;;33378:2;33362:36;;;33399:12;:10;:12::i;:::-;33413:4;33419:7;33428:4;33362:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33358:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33620:1;33603:6;:13;:18;33599:328;;;33646:60;;;;;;;;;;:::i;:::-;;;;;;;;33599:328;33877:6;33871:13;33862:6;33858:2;33854:15;33847:38;33358:584;33494:41;;;33484:51;;;:6;:51;;;;33477:58;;;;;33322:675;33981:4;33974:11;;33151:853;;;;;;;:::o;17076:157::-;17161:4;17200:25;17185:40;;;:11;:40;;;;17178:47;;17076:157;;;:::o;18971:451::-;19046:13;19072:19;19117:1;19108:6;19104:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;19094:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19072:47;;19130:15;:6;19137:1;19130:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;19156;:6;19163:1;19156:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;19187:9;19212:1;19203:6;19199:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;19187:26;;19182:135;19219:1;19215;:5;19182:135;;;19254:12;19275:3;19267:5;:11;19254:25;;;;;;;:::i;:::-;;;;;19242:6;19249:1;19242:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;19304:1;19294:11;;;;;19222:3;;;;:::i;:::-;;;19182:135;;;;19344:1;19335:5;:10;19327:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;19407:6;19393:21;;;18971:451;;;;:::o;29562:439::-;29656:1;29642:16;;:2;:16;;;;29634:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29715:16;29723:7;29715;:16::i;:::-;29714:17;29706:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29777:45;29806:1;29810:2;29814:7;29777:20;:45::i;:::-;29852:1;29835:9;:13;29845:2;29835:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29883:2;29864:7;:16;29872:7;29864:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29928:7;29924:2;29903:33;;29920:1;29903:33;;;;;;;;;;;;29949:44;29977:1;29981:2;29985:7;29949:19;:44::i;:::-;29562:439;;:::o;1233:326::-;1293:4;1550:1;1528:7;:19;;;:23;1521:30;;1233:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722: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:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:139::-;3029:5;3067:6;3054:20;3045:29;;3083:33;3110:5;3083:33;:::i;:::-;2983:139;;;;:::o;3128:137::-;3173:5;3211:6;3198:20;3189:29;;3227:32;3253:5;3227:32;:::i;:::-;3128:137;;;;:::o;3271:141::-;3327:5;3358:6;3352:13;3343:22;;3374:32;3400:5;3374:32;:::i;:::-;3271:141;;;;:::o;3431:338::-;3486:5;3535:3;3528:4;3520:6;3516:17;3512:27;3502:122;;3543:79;;:::i;:::-;3502:122;3660:6;3647:20;3685:78;3759:3;3751:6;3744:4;3736:6;3732:17;3685:78;:::i;:::-;3676:87;;3492:277;3431:338;;;;:::o;3789:553::-;3847:8;3857:6;3907:3;3900:4;3892:6;3888:17;3884:27;3874:122;;3915:79;;:::i;:::-;3874:122;4028:6;4015:20;4005:30;;4058:18;4050:6;4047:30;4044:117;;;4080:79;;:::i;:::-;4044:117;4194:4;4186:6;4182:17;4170:29;;4248:3;4240:4;4232:6;4228:17;4218:8;4214:32;4211:41;4208:128;;;4255:79;;:::i;:::-;4208:128;3789:553;;;;;:::o;4348:139::-;4394:5;4432:6;4419:20;4410:29;;4448:33;4475:5;4448:33;:::i;:::-;4348:139;;;;:::o;4493:329::-;4552:6;4601:2;4589:9;4580:7;4576:23;4572:32;4569:119;;;4607:79;;:::i;:::-;4569:119;4727:1;4752:53;4797:7;4788:6;4777:9;4773:22;4752:53;:::i;:::-;4742:63;;4698:117;4493:329;;;;:::o;4828:474::-;4896:6;4904;4953:2;4941:9;4932:7;4928:23;4924:32;4921:119;;;4959:79;;:::i;:::-;4921:119;5079:1;5104:53;5149:7;5140:6;5129:9;5125:22;5104:53;:::i;:::-;5094:63;;5050:117;5206:2;5232:53;5277:7;5268:6;5257:9;5253:22;5232:53;:::i;:::-;5222:63;;5177:118;4828:474;;;;;:::o;5308:619::-;5385:6;5393;5401;5450:2;5438:9;5429:7;5425:23;5421:32;5418:119;;;5456:79;;:::i;:::-;5418:119;5576:1;5601:53;5646:7;5637:6;5626:9;5622:22;5601:53;:::i;:::-;5591:63;;5547:117;5703:2;5729:53;5774:7;5765:6;5754:9;5750:22;5729:53;:::i;:::-;5719:63;;5674:118;5831:2;5857:53;5902:7;5893:6;5882:9;5878:22;5857:53;:::i;:::-;5847:63;;5802:118;5308:619;;;;;:::o;5933:943::-;6028:6;6036;6044;6052;6101:3;6089:9;6080:7;6076:23;6072:33;6069:120;;;6108:79;;:::i;:::-;6069:120;6228:1;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6199:117;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;6483:2;6509:53;6554:7;6545:6;6534:9;6530:22;6509:53;:::i;:::-;6499:63;;6454:118;6639:2;6628:9;6624:18;6611:32;6670:18;6662:6;6659:30;6656:117;;;6692:79;;:::i;:::-;6656:117;6797:62;6851:7;6842:6;6831:9;6827:22;6797:62;:::i;:::-;6787:72;;6582:287;5933:943;;;;;;;:::o;6882:468::-;6947:6;6955;7004:2;6992:9;6983:7;6979:23;6975:32;6972:119;;;7010:79;;:::i;:::-;6972:119;7130:1;7155:53;7200:7;7191:6;7180:9;7176:22;7155:53;:::i;:::-;7145:63;;7101:117;7257:2;7283:50;7325:7;7316:6;7305:9;7301:22;7283:50;:::i;:::-;7273:60;;7228:115;6882:468;;;;;:::o;7356:474::-;7424:6;7432;7481:2;7469:9;7460:7;7456:23;7452:32;7449:119;;;7487:79;;:::i;:::-;7449:119;7607:1;7632:53;7677:7;7668:6;7657:9;7653:22;7632:53;:::i;:::-;7622:63;;7578:117;7734:2;7760:53;7805:7;7796:6;7785:9;7781:22;7760:53;:::i;:::-;7750:63;;7705:118;7356:474;;;;;:::o;7836:894::-;7954:6;7962;8011:2;7999:9;7990:7;7986:23;7982:32;7979:119;;;8017:79;;:::i;:::-;7979:119;8165:1;8154:9;8150:17;8137:31;8195:18;8187:6;8184:30;8181:117;;;8217:79;;:::i;:::-;8181:117;8322:78;8392:7;8383:6;8372:9;8368:22;8322:78;:::i;:::-;8312:88;;8108:302;8477:2;8466:9;8462:18;8449:32;8508:18;8500:6;8497:30;8494:117;;;8530:79;;:::i;:::-;8494:117;8635:78;8705:7;8696:6;8685:9;8681:22;8635:78;:::i;:::-;8625:88;;8420:303;7836:894;;;;;:::o;8736:539::-;8820:6;8869:2;8857:9;8848:7;8844:23;8840:32;8837:119;;;8875:79;;:::i;:::-;8837:119;9023:1;9012:9;9008:17;8995:31;9053:18;9045:6;9042:30;9039:117;;;9075:79;;:::i;:::-;9039:117;9180:78;9250:7;9241:6;9230:9;9226:22;9180:78;:::i;:::-;9170:88;;8966:302;8736:539;;;;:::o;9281:329::-;9340:6;9389:2;9377:9;9368:7;9364:23;9360:32;9357:119;;;9395:79;;:::i;:::-;9357:119;9515:1;9540:53;9585:7;9576:6;9565:9;9561:22;9540:53;:::i;:::-;9530:63;;9486:117;9281:329;;;;:::o;9616:474::-;9684:6;9692;9741:2;9729:9;9720:7;9716:23;9712:32;9709:119;;;9747:79;;:::i;:::-;9709:119;9867:1;9892:53;9937:7;9928:6;9917:9;9913:22;9892:53;:::i;:::-;9882:63;;9838:117;9994:2;10020:53;10065:7;10056:6;10045:9;10041:22;10020:53;:::i;:::-;10010:63;;9965:118;9616:474;;;;;:::o;10096:327::-;10154:6;10203:2;10191:9;10182:7;10178:23;10174:32;10171:119;;;10209:79;;:::i;:::-;10171:119;10329:1;10354:52;10398:7;10389:6;10378:9;10374:22;10354:52;:::i;:::-;10344:62;;10300:116;10096:327;;;;:::o;10429:349::-;10498:6;10547:2;10535:9;10526:7;10522:23;10518:32;10515:119;;;10553:79;;:::i;:::-;10515:119;10673:1;10698:63;10753:7;10744:6;10733:9;10729:22;10698:63;:::i;:::-;10688:73;;10644:127;10429:349;;;;:::o;10784:529::-;10855:6;10863;10912:2;10900:9;10891:7;10887:23;10883:32;10880:119;;;10918:79;;:::i;:::-;10880:119;11066:1;11055:9;11051:17;11038:31;11096:18;11088:6;11085:30;11082:117;;;11118:79;;:::i;:::-;11082:117;11231:65;11288:7;11279:6;11268:9;11264:22;11231:65;:::i;:::-;11213:83;;;;11009:297;10784:529;;;;;:::o;11319:329::-;11378:6;11427:2;11415:9;11406:7;11402:23;11398:32;11395:119;;;11433:79;;:::i;:::-;11395:119;11553:1;11578:53;11623:7;11614:6;11603:9;11599:22;11578:53;:::i;:::-;11568:63;;11524:117;11319:329;;;;:::o;11654:118::-;11741:24;11759:5;11741:24;:::i;:::-;11736:3;11729:37;11654:118;;:::o;11778:109::-;11859:21;11874:5;11859:21;:::i;:::-;11854:3;11847:34;11778:109;;:::o;11893:118::-;11980:24;11998:5;11980:24;:::i;:::-;11975:3;11968:37;11893:118;;:::o;12017:360::-;12103:3;12131:38;12163:5;12131:38;:::i;:::-;12185:70;12248:6;12243:3;12185:70;:::i;:::-;12178:77;;12264:52;12309:6;12304:3;12297:4;12290:5;12286:16;12264:52;:::i;:::-;12341:29;12363:6;12341:29;:::i;:::-;12336:3;12332:39;12325:46;;12107:270;12017:360;;;;:::o;12383:364::-;12471:3;12499:39;12532:5;12499:39;:::i;:::-;12554:71;12618:6;12613:3;12554:71;:::i;:::-;12547:78;;12634:52;12679:6;12674:3;12667:4;12660:5;12656:16;12634:52;:::i;:::-;12711:29;12733:6;12711:29;:::i;:::-;12706:3;12702:39;12695:46;;12475:272;12383:364;;;;:::o;12753:377::-;12859:3;12887:39;12920:5;12887:39;:::i;:::-;12942:89;13024:6;13019:3;12942:89;:::i;:::-;12935:96;;13040:52;13085:6;13080:3;13073:4;13066:5;13062:16;13040:52;:::i;:::-;13117:6;13112:3;13108:16;13101:23;;12863:267;12753:377;;;;:::o;13136:366::-;13278:3;13299:67;13363:2;13358:3;13299:67;:::i;:::-;13292:74;;13375:93;13464:3;13375:93;:::i;:::-;13493:2;13488:3;13484:12;13477:19;;13136:366;;;:::o;13508:::-;13650:3;13671:67;13735:2;13730:3;13671:67;:::i;:::-;13664:74;;13747:93;13836:3;13747:93;:::i;:::-;13865:2;13860:3;13856:12;13849:19;;13508:366;;;:::o;13880:::-;14022:3;14043:67;14107:2;14102:3;14043:67;:::i;:::-;14036:74;;14119:93;14208:3;14119:93;:::i;:::-;14237:2;14232:3;14228:12;14221:19;;13880:366;;;:::o;14252:::-;14394:3;14415:67;14479:2;14474:3;14415:67;:::i;:::-;14408:74;;14491:93;14580:3;14491:93;:::i;:::-;14609:2;14604:3;14600:12;14593:19;;14252:366;;;:::o;14624:::-;14766:3;14787:67;14851:2;14846:3;14787:67;:::i;:::-;14780:74;;14863:93;14952:3;14863:93;:::i;:::-;14981:2;14976:3;14972:12;14965:19;;14624:366;;;:::o;14996:::-;15138:3;15159:67;15223:2;15218:3;15159:67;:::i;:::-;15152:74;;15235:93;15324:3;15235:93;:::i;:::-;15353:2;15348:3;15344:12;15337:19;;14996:366;;;:::o;15368:::-;15510:3;15531:67;15595:2;15590:3;15531:67;:::i;:::-;15524:74;;15607:93;15696:3;15607:93;:::i;:::-;15725:2;15720:3;15716:12;15709:19;;15368:366;;;:::o;15740:::-;15882:3;15903:67;15967:2;15962:3;15903:67;:::i;:::-;15896:74;;15979:93;16068:3;15979:93;:::i;:::-;16097:2;16092:3;16088:12;16081:19;;15740:366;;;:::o;16112:::-;16254:3;16275:67;16339:2;16334:3;16275:67;:::i;:::-;16268:74;;16351:93;16440:3;16351:93;:::i;:::-;16469:2;16464:3;16460:12;16453:19;;16112:366;;;:::o;16484:::-;16626:3;16647:67;16711:2;16706:3;16647:67;:::i;:::-;16640:74;;16723:93;16812:3;16723:93;:::i;:::-;16841:2;16836:3;16832:12;16825:19;;16484:366;;;:::o;16856:::-;16998:3;17019:67;17083:2;17078:3;17019:67;:::i;:::-;17012:74;;17095:93;17184:3;17095:93;:::i;:::-;17213:2;17208:3;17204:12;17197:19;;16856:366;;;:::o;17228:::-;17370:3;17391:67;17455:2;17450:3;17391:67;:::i;:::-;17384:74;;17467:93;17556:3;17467:93;:::i;:::-;17585:2;17580:3;17576:12;17569:19;;17228:366;;;:::o;17600:402::-;17760:3;17781:85;17863:2;17858:3;17781:85;:::i;:::-;17774:92;;17875:93;17964:3;17875:93;:::i;:::-;17993:2;17988:3;17984:12;17977:19;;17600:402;;;:::o;18008:366::-;18150:3;18171:67;18235:2;18230:3;18171:67;:::i;:::-;18164:74;;18247:93;18336:3;18247:93;:::i;:::-;18365:2;18360:3;18356:12;18349:19;;18008:366;;;:::o;18380:::-;18522:3;18543:67;18607:2;18602:3;18543:67;:::i;:::-;18536:74;;18619:93;18708:3;18619:93;:::i;:::-;18737:2;18732:3;18728:12;18721:19;;18380:366;;;:::o;18752:402::-;18912:3;18933:85;19015:2;19010:3;18933:85;:::i;:::-;18926:92;;19027:93;19116:3;19027:93;:::i;:::-;19145:2;19140:3;19136:12;19129:19;;18752:402;;;:::o;19160:366::-;19302:3;19323:67;19387:2;19382:3;19323:67;:::i;:::-;19316:74;;19399:93;19488:3;19399:93;:::i;:::-;19517:2;19512:3;19508:12;19501:19;;19160:366;;;:::o;19532:118::-;19619:24;19637:5;19619:24;:::i;:::-;19614:3;19607:37;19532:118;;:::o;19656:435::-;19836:3;19858:95;19949:3;19940:6;19858:95;:::i;:::-;19851:102;;19970:95;20061:3;20052:6;19970:95;:::i;:::-;19963:102;;20082:3;20075:10;;19656:435;;;;;:::o;20097:967::-;20479:3;20501:148;20645:3;20501:148;:::i;:::-;20494:155;;20666:95;20757:3;20748:6;20666:95;:::i;:::-;20659:102;;20778:148;20922:3;20778:148;:::i;:::-;20771:155;;20943:95;21034:3;21025:6;20943:95;:::i;:::-;20936:102;;21055:3;21048:10;;20097:967;;;;;:::o;21070:222::-;21163:4;21201:2;21190:9;21186:18;21178:26;;21214:71;21282:1;21271:9;21267:17;21258:6;21214:71;:::i;:::-;21070:222;;;;:::o;21298:640::-;21493:4;21531:3;21520:9;21516:19;21508:27;;21545:71;21613:1;21602:9;21598:17;21589:6;21545:71;:::i;:::-;21626:72;21694:2;21683:9;21679:18;21670:6;21626:72;:::i;:::-;21708;21776:2;21765:9;21761:18;21752:6;21708:72;:::i;:::-;21827:9;21821:4;21817:20;21812:2;21801:9;21797:18;21790:48;21855:76;21926:4;21917:6;21855:76;:::i;:::-;21847:84;;21298:640;;;;;;;:::o;21944:210::-;22031:4;22069:2;22058:9;22054:18;22046:26;;22082:65;22144:1;22133:9;22129:17;22120:6;22082:65;:::i;:::-;21944:210;;;;:::o;22160:222::-;22253:4;22291:2;22280:9;22276:18;22268:26;;22304:71;22372:1;22361:9;22357:17;22348:6;22304:71;:::i;:::-;22160:222;;;;:::o;22388:313::-;22501:4;22539:2;22528:9;22524:18;22516:26;;22588:9;22582:4;22578:20;22574:1;22563:9;22559:17;22552:47;22616:78;22689:4;22680:6;22616:78;:::i;:::-;22608:86;;22388:313;;;;:::o;22707:419::-;22873:4;22911:2;22900:9;22896:18;22888:26;;22960:9;22954:4;22950:20;22946:1;22935:9;22931:17;22924:47;22988:131;23114:4;22988:131;:::i;:::-;22980:139;;22707:419;;;:::o;23132:::-;23298:4;23336:2;23325:9;23321:18;23313:26;;23385:9;23379:4;23375:20;23371:1;23360:9;23356:17;23349:47;23413:131;23539:4;23413:131;:::i;:::-;23405:139;;23132:419;;;:::o;23557:::-;23723:4;23761:2;23750:9;23746:18;23738:26;;23810:9;23804:4;23800:20;23796:1;23785:9;23781:17;23774:47;23838:131;23964:4;23838:131;:::i;:::-;23830:139;;23557:419;;;:::o;23982:::-;24148:4;24186:2;24175:9;24171:18;24163:26;;24235:9;24229:4;24225:20;24221:1;24210:9;24206:17;24199:47;24263:131;24389:4;24263:131;:::i;:::-;24255:139;;23982:419;;;:::o;24407:::-;24573:4;24611:2;24600:9;24596:18;24588:26;;24660:9;24654:4;24650:20;24646:1;24635:9;24631:17;24624:47;24688:131;24814:4;24688:131;:::i;:::-;24680:139;;24407:419;;;:::o;24832:::-;24998:4;25036:2;25025:9;25021:18;25013:26;;25085:9;25079:4;25075:20;25071:1;25060:9;25056:17;25049:47;25113:131;25239:4;25113:131;:::i;:::-;25105:139;;24832:419;;;:::o;25257:::-;25423:4;25461:2;25450:9;25446:18;25438:26;;25510:9;25504:4;25500:20;25496:1;25485:9;25481:17;25474:47;25538:131;25664:4;25538:131;:::i;:::-;25530:139;;25257:419;;;:::o;25682:::-;25848:4;25886:2;25875:9;25871:18;25863:26;;25935:9;25929:4;25925:20;25921:1;25910:9;25906:17;25899:47;25963:131;26089:4;25963:131;:::i;:::-;25955:139;;25682:419;;;:::o;26107:::-;26273:4;26311:2;26300:9;26296:18;26288:26;;26360:9;26354:4;26350:20;26346:1;26335:9;26331:17;26324:47;26388:131;26514:4;26388:131;:::i;:::-;26380:139;;26107:419;;;:::o;26532:::-;26698:4;26736:2;26725:9;26721:18;26713:26;;26785:9;26779:4;26775:20;26771:1;26760:9;26756:17;26749:47;26813:131;26939:4;26813:131;:::i;:::-;26805:139;;26532:419;;;:::o;26957:::-;27123:4;27161:2;27150:9;27146:18;27138:26;;27210:9;27204:4;27200:20;27196:1;27185:9;27181:17;27174:47;27238:131;27364:4;27238:131;:::i;:::-;27230:139;;26957:419;;;:::o;27382:::-;27548:4;27586:2;27575:9;27571:18;27563:26;;27635:9;27629:4;27625:20;27621:1;27610:9;27606:17;27599:47;27663:131;27789:4;27663:131;:::i;:::-;27655:139;;27382:419;;;:::o;27807:::-;27973:4;28011:2;28000:9;27996:18;27988:26;;28060:9;28054:4;28050:20;28046:1;28035:9;28031:17;28024:47;28088:131;28214:4;28088:131;:::i;:::-;28080:139;;27807:419;;;:::o;28232:::-;28398:4;28436:2;28425:9;28421:18;28413:26;;28485:9;28479:4;28475:20;28471:1;28460:9;28456:17;28449:47;28513:131;28639:4;28513:131;:::i;:::-;28505:139;;28232:419;;;:::o;28657:::-;28823:4;28861:2;28850:9;28846:18;28838:26;;28910:9;28904:4;28900:20;28896:1;28885:9;28881:17;28874:47;28938:131;29064:4;28938:131;:::i;:::-;28930:139;;28657:419;;;:::o;29082:222::-;29175:4;29213:2;29202:9;29198:18;29190:26;;29226:71;29294:1;29283:9;29279:17;29270:6;29226:71;:::i;:::-;29082:222;;;;:::o;29310:129::-;29344:6;29371:20;;:::i;:::-;29361:30;;29400:33;29428:4;29420:6;29400:33;:::i;:::-;29310:129;;;:::o;29445:75::-;29478:6;29511:2;29505:9;29495:19;;29445:75;:::o;29526:311::-;29603:4;29693:18;29685:6;29682:30;29679:56;;;29715:18;;:::i;:::-;29679:56;29765:4;29757:6;29753:17;29745:25;;29825:4;29819;29815:15;29807:23;;29526:311;;;:::o;29843:::-;29920:4;30010:18;30002:6;29999:30;29996:56;;;30032:18;;:::i;:::-;29996:56;30082:4;30074:6;30070:17;30062:25;;30142:4;30136;30132:15;30124:23;;29843:311;;;:::o;30160:307::-;30221:4;30311:18;30303:6;30300:30;30297:56;;;30333:18;;:::i;:::-;30297:56;30371:29;30393:6;30371:29;:::i;:::-;30363:37;;30455:4;30449;30445:15;30437:23;;30160:307;;;:::o;30473:98::-;30524:6;30558:5;30552:12;30542:22;;30473:98;;;:::o;30577:99::-;30629:6;30663:5;30657:12;30647:22;;30577:99;;;:::o;30682:168::-;30765:11;30799:6;30794:3;30787:19;30839:4;30834:3;30830:14;30815:29;;30682:168;;;;:::o;30856:169::-;30940:11;30974:6;30969:3;30962:19;31014:4;31009:3;31005:14;30990:29;;30856:169;;;;:::o;31031:148::-;31133:11;31170:3;31155:18;;31031:148;;;;:::o;31185:305::-;31225:3;31244:20;31262:1;31244:20;:::i;:::-;31239:25;;31278:20;31296:1;31278:20;:::i;:::-;31273:25;;31432:1;31364:66;31360:74;31357:1;31354:81;31351:107;;;31438:18;;:::i;:::-;31351:107;31482:1;31479;31475:9;31468:16;;31185:305;;;;:::o;31496:185::-;31536:1;31553:20;31571:1;31553:20;:::i;:::-;31548:25;;31587:20;31605:1;31587:20;:::i;:::-;31582:25;;31626:1;31616:35;;31631:18;;:::i;:::-;31616:35;31673:1;31670;31666:9;31661:14;;31496:185;;;;:::o;31687:348::-;31727:7;31750:20;31768:1;31750:20;:::i;:::-;31745:25;;31784:20;31802:1;31784:20;:::i;:::-;31779:25;;31972:1;31904:66;31900:74;31897:1;31894:81;31889:1;31882:9;31875:17;31871:105;31868:131;;;31979:18;;:::i;:::-;31868:131;32027:1;32024;32020:9;32009:20;;31687:348;;;;:::o;32041:191::-;32081:4;32101:20;32119:1;32101:20;:::i;:::-;32096:25;;32135:20;32153:1;32135:20;:::i;:::-;32130:25;;32174:1;32171;32168:8;32165:34;;;32179:18;;:::i;:::-;32165:34;32224:1;32221;32217:9;32209:17;;32041:191;;;;:::o;32238:96::-;32275:7;32304:24;32322:5;32304:24;:::i;:::-;32293:35;;32238:96;;;:::o;32340:90::-;32374:7;32417:5;32410:13;32403:21;32392:32;;32340:90;;;:::o;32436:77::-;32473:7;32502:5;32491:16;;32436:77;;;:::o;32519:149::-;32555:7;32595:66;32588:5;32584:78;32573:89;;32519:149;;;:::o;32674:126::-;32711:7;32751:42;32744:5;32740:54;32729:65;;32674:126;;;:::o;32806:77::-;32843:7;32872:5;32861:16;;32806:77;;;:::o;32889:154::-;32973:6;32968:3;32963;32950:30;33035:1;33026:6;33021:3;33017:16;33010:27;32889:154;;;:::o;33049:307::-;33117:1;33127:113;33141:6;33138:1;33135:13;33127:113;;;33226:1;33221:3;33217:11;33211:18;33207:1;33202:3;33198:11;33191:39;33163:2;33160:1;33156:10;33151:15;;33127:113;;;33258:6;33255:1;33252:13;33249:101;;;33338:1;33329:6;33324:3;33320:16;33313:27;33249:101;33098:258;33049:307;;;:::o;33362:171::-;33401:3;33424:24;33442:5;33424:24;:::i;:::-;33415:33;;33470:4;33463:5;33460:15;33457:41;;;33478:18;;:::i;:::-;33457:41;33525:1;33518:5;33514:13;33507:20;;33362:171;;;:::o;33539:320::-;33583:6;33620:1;33614:4;33610:12;33600:22;;33667:1;33661:4;33657:12;33688:18;33678:81;;33744:4;33736:6;33732:17;33722:27;;33678:81;33806:2;33798:6;33795:14;33775:18;33772:38;33769:84;;;33825:18;;:::i;:::-;33769:84;33590:269;33539:320;;;:::o;33865:281::-;33948:27;33970:4;33948:27;:::i;:::-;33940:6;33936:40;34078:6;34066:10;34063:22;34042:18;34030:10;34027:34;34024:62;34021:88;;;34089:18;;:::i;:::-;34021:88;34129:10;34125:2;34118:22;33908:238;33865:281;;:::o;34152:233::-;34191:3;34214:24;34232:5;34214:24;:::i;:::-;34205:33;;34260:66;34253:5;34250:77;34247:103;;;34330:18;;:::i;:::-;34247:103;34377:1;34370:5;34366:13;34359:20;;34152:233;;;:::o;34391:176::-;34423:1;34440:20;34458:1;34440:20;:::i;:::-;34435:25;;34474:20;34492:1;34474:20;:::i;:::-;34469:25;;34513:1;34503:35;;34518:18;;:::i;:::-;34503:35;34559:1;34556;34552:9;34547:14;;34391:176;;;;:::o;34573:180::-;34621:77;34618:1;34611:88;34718:4;34715:1;34708:15;34742:4;34739:1;34732:15;34759:180;34807:77;34804:1;34797:88;34904:4;34901:1;34894:15;34928:4;34925:1;34918:15;34945:180;34993:77;34990:1;34983:88;35090:4;35087:1;35080:15;35114:4;35111:1;35104:15;35131:180;35179:77;35176:1;35169:88;35276:4;35273:1;35266:15;35300:4;35297:1;35290:15;35317:180;35365:77;35362:1;35355:88;35462:4;35459:1;35452:15;35486:4;35483:1;35476:15;35503:117;35612:1;35609;35602:12;35626:117;35735:1;35732;35725:12;35749:117;35858:1;35855;35848:12;35872:117;35981:1;35978;35971:12;35995:117;36104:1;36101;36094:12;36118:117;36227:1;36224;36217:12;36241:102;36282:6;36333:2;36329:7;36324:2;36317:5;36313:14;36309:28;36299:38;;36241:102;;;:::o;36349:182::-;36489:34;36485:1;36477:6;36473:14;36466:58;36349:182;:::o;36537:237::-;36677:34;36673:1;36665:6;36661:14;36654:58;36746:20;36741:2;36733:6;36729:15;36722:45;36537:237;:::o;36780:224::-;36920:34;36916:1;36908:6;36904:14;36897:58;36989:7;36984:2;36976:6;36972:15;36965:32;36780:224;:::o;37010:178::-;37150:30;37146:1;37138:6;37134:14;37127:54;37010:178;:::o;37194:223::-;37334:34;37330:1;37322:6;37318:14;37311:58;37403:6;37398:2;37390:6;37386:15;37379:31;37194:223;:::o;37423:175::-;37563:27;37559:1;37551:6;37547:14;37540:51;37423:175;:::o;37604:228::-;37744:34;37740:1;37732:6;37728:14;37721:58;37813:11;37808:2;37800:6;37796:15;37789:36;37604:228;:::o;37838:249::-;37978:34;37974:1;37966:6;37962:14;37955:58;38047:32;38042:2;38034:6;38030:15;38023:57;37838:249;:::o;38093:182::-;38233:34;38229:1;38221:6;38217:14;38210:58;38093:182;:::o;38281:174::-;38421:26;38417:1;38409:6;38405:14;38398:50;38281:174;:::o;38461:224::-;38601:34;38597:1;38589:6;38585:14;38578:58;38670:7;38665:2;38657:6;38653:15;38646:32;38461:224;:::o;38691:220::-;38831:34;38827:1;38819:6;38815:14;38808:58;38900:3;38895:2;38887:6;38883:15;38876:28;38691:220;:::o;38917:173::-;39057:25;39053:1;39045:6;39041:14;39034:49;38917:173;:::o;39096:233::-;39236:34;39232:1;39224:6;39220:14;39213:58;39305:16;39300:2;39292:6;39288:15;39281:41;39096:233;:::o;39335:235::-;39475:34;39471:1;39463:6;39459:14;39452:58;39544:18;39539:2;39531:6;39527:15;39520:43;39335:235;:::o;39576:167::-;39716:19;39712:1;39704:6;39700:14;39693:43;39576:167;:::o;39749:234::-;39889:34;39885:1;39877:6;39873:14;39866:58;39958:17;39953:2;39945:6;39941:15;39934:42;39749:234;:::o;39989:122::-;40062:24;40080:5;40062:24;:::i;:::-;40055:5;40052:35;40042:63;;40101:1;40098;40091:12;40042:63;39989:122;:::o;40117:116::-;40187:21;40202:5;40187:21;:::i;:::-;40180:5;40177:32;40167:60;;40223:1;40220;40213:12;40167:60;40117:116;:::o;40239:122::-;40312:24;40330:5;40312:24;:::i;:::-;40305:5;40302:35;40292:63;;40351:1;40348;40341:12;40292:63;40239:122;:::o;40367:120::-;40439:23;40456:5;40439:23;:::i;:::-;40432:5;40429:34;40419:62;;40477:1;40474;40467:12;40419:62;40367:120;:::o;40493:122::-;40566:24;40584:5;40566:24;:::i;:::-;40559:5;40556:35;40546:63;;40605:1;40602;40595:12;40546:63;40493:122;:::o

Swarm Source

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