APE Price: $0.18 (-3.03%)

Contract

0xd8A83c74f45aCdf354331B085e1B8F1cde5c7166

Overview

APE Balance

Apechain LogoApechain LogoApechain Logo5.9 APE

APE Value

$1.06 (@ $0.18/APE)

Token Holdings

More Info

Private Name Tags

Multichain Info

N/A
Transaction Hash
Block
From
To
Withdraw Native328370662026-01-26 0:47:054 hrs ago1769388425IN
0xd8A83c74...cde5c7166
0 APE0.00320361101.68276
Spin326690262026-01-22 3:52:134 days ago1769053933IN
0xd8A83c74...cde5c7166
0.25 APE0.01942933101.68276
Spin326689902026-01-22 3:51:124 days ago1769053872IN
0xd8A83c74...cde5c7166
0.25 APE0.01997537101.68276
Spin326689772026-01-22 3:50:544 days ago1769053854IN
0xd8A83c74...cde5c7166
0.25 APE0.01942933101.68276
Spin326120172026-01-20 16:19:505 days ago1768925990IN
0xd8A83c74...cde5c7166
0.25 APE0.03645093101.68276
Spin326120092026-01-20 16:19:315 days ago1768925971IN
0xd8A83c74...cde5c7166
0.25 APE0.01942933101.68276
Spin326120052026-01-20 16:19:125 days ago1768925952IN
0xd8A83c74...cde5c7166
0.25 APE0.02290688101.68276
Spin325137822026-01-18 2:45:368 days ago1768704336IN
0xd8A83c74...cde5c7166
0.25 APE0.03471215101.68276
Spin325137552026-01-18 2:44:478 days ago1768704287IN
0xd8A83c74...cde5c7166
0.25 APE0.03822234101.68276
Spin324961982026-01-17 16:50:238 days ago1768668623IN
0xd8A83c74...cde5c7166
0.25 APE0.01999011101.68276
Spin324951482026-01-17 16:07:318 days ago1768666051IN
0xd8A83c74...cde5c7166
0.25 APE0.03297338101.68276
Spin324951412026-01-17 16:07:158 days ago1768666035IN
0xd8A83c74...cde5c7166
0.25 APE0.01942933101.68276
Spin324951292026-01-17 16:06:598 days ago1768666019IN
0xd8A83c74...cde5c7166
0.25 APE0.02042369101.68276
Spin324950072026-01-17 16:02:588 days ago1768665778IN
0xd8A83c74...cde5c7166
0.25 APE0.02290688101.68276
Spin323933912026-01-15 1:48:3311 days ago1768441713IN
0xd8A83c74...cde5c7166
0.25 APE0.03979151101.68276
Spin323933812026-01-15 1:48:1711 days ago1768441697IN
0xd8A83c74...cde5c7166
0.25 APE0.02881831101.68276
Spin323933712026-01-15 1:48:0211 days ago1768441682IN
0xd8A83c74...cde5c7166
0.25 APE0.01942933101.68276
Spin323933622026-01-15 1:47:4711 days ago1768441667IN
0xd8A83c74...cde5c7166
0.25 APE0.03297338101.68276
Spin323933512026-01-15 1:47:3211 days ago1768441652IN
0xd8A83c74...cde5c7166
0.25 APE0.01999011101.68276
Spin323933432026-01-15 1:47:1211 days ago1768441632IN
0xd8A83c74...cde5c7166
0.25 APE0.02889854101.68276
Spin323933272026-01-15 1:46:5511 days ago1768441615IN
0xd8A83c74...cde5c7166
0.25 APE0.03353426101.68276
Spin323932872026-01-15 1:45:4611 days ago1768441546IN
0xd8A83c74...cde5c7166
0.25 APE0.02730375101.68276
Spin323932652026-01-15 1:45:1211 days ago1768441512IN
0xd8A83c74...cde5c7166
0.25 APE0.02881831101.68276
Spin323932502026-01-15 1:44:5611 days ago1768441496IN
0xd8A83c74...cde5c7166
0.25 APE0.03353426101.68276
Spin323932412026-01-15 1:44:3911 days ago1768441479IN
0xd8A83c74...cde5c7166
0.25 APE0.01942933101.68276
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
328370662026-01-26 0:47:054 hrs ago1769388425
0xd8A83c74...cde5c7166
70 APE
323933912026-01-15 1:48:3311 days ago1768441713
0xd8A83c74...cde5c7166
1.2 APE
323932872026-01-15 1:45:4611 days ago1768441546
0xd8A83c74...cde5c7166
1.8 APE
323585502026-01-14 4:58:0711 days ago1768366687
0xd8A83c74...cde5c7166
0.6 APE
323417522026-01-13 18:35:2612 days ago1768329326
0xd8A83c74...cde5c7166
0.9 APE
323414562026-01-13 18:28:1912 days ago1768328899
0xd8A83c74...cde5c7166
3 APE
317887602025-12-30 18:59:2526 days ago1767121165
0xd8A83c74...cde5c7166
0.6 APE
316725782025-12-27 23:30:5929 days ago1766878259
0xd8A83c74...cde5c7166
0.6 APE
316724862025-12-27 23:27:3029 days ago1766878050
0xd8A83c74...cde5c7166
0.6 APE
315682932025-12-25 14:50:1831 days ago1766674218
0xd8A83c74...cde5c7166
0.6 APE
315308612025-12-24 19:07:2032 days ago1766603240
0xd8A83c74...cde5c7166
1.8 APE
315165482025-12-24 12:28:4732 days ago1766579327
0xd8A83c74...cde5c7166
0.6 APE
314904272025-12-24 0:21:0333 days ago1766535663
0xd8A83c74...cde5c7166
1.8 APE
313055182025-12-20 21:19:2036 days ago1766265560
0xd8A83c74...cde5c7166
30 APE
312449092025-12-20 4:59:0036 days ago1766206740
0xd8A83c74...cde5c7166
0.6 APE
312417182025-12-20 4:08:4437 days ago1766203724
0xd8A83c74...cde5c7166
0.6 APE
312332212025-12-20 1:56:1837 days ago1766195778
0xd8A83c74...cde5c7166
0.6 APE
312325202025-12-20 1:38:4737 days ago1766194727
0xd8A83c74...cde5c7166
6 APE
312324992025-12-20 1:38:2037 days ago1766194700
0xd8A83c74...cde5c7166
1.8 APE
312324282025-12-20 1:36:4137 days ago1766194601
0xd8A83c74...cde5c7166
0.6 APE
312286262025-12-19 23:59:3137 days ago1766188771
0xd8A83c74...cde5c7166
3 APE
312285672025-12-19 23:58:0337 days ago1766188683
0xd8A83c74...cde5c7166
0.6 APE
312251652025-12-19 22:05:1037 days ago1766181910
0xd8A83c74...cde5c7166
1.8 APE
312250282025-12-19 21:59:2037 days ago1766181560
0xd8A83c74...cde5c7166
0.9 APE
312232842025-12-19 20:28:3037 days ago1766176110
0xd8A83c74...cde5c7166
0.9 APE
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SatoSlotMachine

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at apescan.io on 2025-12-17
*/

/// @author OutlawDevs

//  .----------------.  .----------------.  .----------------.  .----------------. 
// | .--------------. || .--------------. || .--------------. || .--------------. |
// | |    _______   | || |      __      | || |  _________   | || |     ____     | |
// | |   /  ___  |  | || |     /  \     | || | |  _   _  |  | || |   .'    `.   | |
// | |  |  (__ \_|  | || |    / /\ \    | || | |_/ | | \_|  | || |  /  .--.  \  | |
// | |   '.___`-.   | || |   / ____ \   | || |     | |      | || |  | |    | |  | |
// | |  |`\____) |  | || | _/ /    \ \_ | || |    _| |_     | || |  \  `--'  /  | |
// | |  |_______.'  | || ||____|  |____|| || |   |_____|    | || |   `.____.'   | |
// | |              | || |              | || |              | || |              | |
// | '--------------' || '--------------' || '--------------' || '--------------' |
//  '----------------'  '----------------'  '----------------'  '----------------' 


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


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

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


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


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

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

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

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)

pragma solidity >=0.4.16;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

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


// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)

pragma solidity >=0.4.16;

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * 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[ERC 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 v5.4.0) (token/ERC721/IERC721.sol)

pragma solidity >=0.6.2;


/**
 * @dev Required interface of an ERC-721 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 ERC-721 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * 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 address zero.
     *
     * 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/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity >=0.5.0;

/**
 * @title ERC-721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC-721 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: GSAWheel.sol


pragma solidity ^0.8.19;






contract SatoSlotMachine is Ownable, ReentrancyGuard, IERC721Receiver {
    uint256 public spinCost = 0.25 ether;

    uint256 public totalSpins;
    uint256 public totalPayouts;

    uint256 public totalNativePayouts;
    uint256 public totalERCPayouts;
    uint256 public totalNFTPayouts;

    mapping(address => uint256) public playerSpins;
    mapping(address => uint256) public playerWinnings;

    uint256 public constant EVERY_3_SPINS_REWARD = 1000 * (10**18);
    uint256 public constant SPINS_INTERVAL_FOR_REWARD = 3;

    IERC20 public erc20Token;
    IERC721 public nftCollection;
    uint256[] public availableNFTIds;

    struct PlayerSpin {
        uint256 timestamp;
        string prizeType;
        uint256 prizeAmount;
        bool freeSpinUsed;
    }

    mapping(address => PlayerSpin[]) public playerSpinHistory;

    struct SpinResult {
        address player;
        string prizeType;
        uint256 prizeAmount;
        uint256 random;
        uint256 timestamp;
        bool wasFreeSpin;
    }

    mapping(uint256 => SpinResult) public spins;

    event Every3SpinsReward(address indexed player, uint256 amount, uint256 spinCount);
    event AutomaticRewardRecorded(address indexed player, uint256 amount, uint256 spinCount);

    event SpinExecuted(
        address indexed player,
        uint256 indexed spinId,
        string prizeType,
        uint256 prizeAmount,
        uint256 random,
        bool wasFreeSpin
    );

    event NativePrizeSent(address indexed to, uint256 amount);
    event ERC20PrizeSent(address indexed to, uint256 amount);
    event NFTPrizeSent(address indexed to, uint256 tokenId);

    event EmergencyNativeWithdrawn(address indexed to, uint256 amount);
    event EmergencyERC20Withdrawn(address indexed to, uint256 amount);
    event EmergencyNFTsWithdrawn(address indexed to, uint256 count);
    event NFTsDeposited(address indexed from, uint256 count);

    constructor(address _erc20, address _nft) Ownable(msg.sender) {
        erc20Token = IERC20(_erc20);
        nftCollection = IERC721(_nft);
    }

    function setSpinCost(uint256 _newCost) external onlyOwner {
        require(_newCost > 0, "Invalid cost");
        spinCost = _newCost;
    }

    function setERC20Token(address _token) external onlyOwner {
        erc20Token = IERC20(_token);
    }

    function setNFTCollection(address _nft) external onlyOwner {
        nftCollection = IERC721(_nft);
    }

    function depositNFTs(uint256 amount) external onlyOwner {
        require(amount > 0, "Amount must be greater than 0");
        require(address(nftCollection) != address(0), "NFT collection not set");
        
        uint256 depositedCount = 0;
        
        for (uint256 i = 0; i < amount; i++) {
            try nftCollection.transferFrom(msg.sender, address(this), i) {
                availableNFTIds.push(i);
                depositedCount++;
            } catch {
                continue;
            }
        }
        
        require(depositedCount > 0, "No NFTs were deposited");
        emit NFTsDeposited(msg.sender, depositedCount);
    }

    function depositSpecificNFTs(uint256[] calldata tokenIds) external onlyOwner {
        require(tokenIds.length > 0, "No token IDs provided");
        require(address(nftCollection) != address(0), "NFT collection not set");
        
        for (uint256 i = 0; i < tokenIds.length; i++) {
            nftCollection.transferFrom(msg.sender, address(this), tokenIds[i]);
            availableNFTIds.push(tokenIds[i]);
        }
        
        emit NFTsDeposited(msg.sender, tokenIds.length);
    }

    function _getAndRemoveNFTPrize() internal returns (uint256 tokenId) {
        require(availableNFTIds.length > 0, "No NFTs available");
        
        tokenId = availableNFTIds[0];
        
        availableNFTIds[0] = availableNFTIds[availableNFTIds.length - 1];
        availableNFTIds.pop();
    }

    function _checkAndAwardEvery3Spins(address player) internal {
        uint256 playerSpinCount = playerSpins[player];
        
        if (playerSpinCount % SPINS_INTERVAL_FOR_REWARD == 0 && playerSpinCount > 0) {
            if (address(erc20Token) != address(0) && 
                erc20Token.balanceOf(address(this)) >= EVERY_3_SPINS_REWARD) {
                
                bool success = erc20Token.transfer(player, EVERY_3_SPINS_REWARD);
                if (success) {
                    totalERCPayouts += EVERY_3_SPINS_REWARD;
                    totalPayouts += EVERY_3_SPINS_REWARD;
                    playerWinnings[player] += EVERY_3_SPINS_REWARD;
                    
                    playerSpinHistory[player].push(
                        PlayerSpin({
                            timestamp: block.timestamp,
                            prizeType: "ERC20",
                            prizeAmount: EVERY_3_SPINS_REWARD,
                            freeSpinUsed: false
                        })
                    );
                    
                    spins[totalSpins] = SpinResult({
                        player: player,
                        prizeType: "ERC20",
                        prizeAmount: EVERY_3_SPINS_REWARD,
                        random: uint256(keccak256(abi.encodePacked(block.timestamp, player, "AUTO_REWARD"))),
                        timestamp: block.timestamp,
                        wasFreeSpin: false
                    });

                    emit ERC20PrizeSent(player, EVERY_3_SPINS_REWARD);
                    emit Every3SpinsReward(player, EVERY_3_SPINS_REWARD, playerSpinCount);
                    emit AutomaticRewardRecorded(player, EVERY_3_SPINS_REWARD, playerSpinCount);
                    
                    emit SpinExecuted(
                        player, 
                        totalSpins, 
                        "ERC20", 
                        EVERY_3_SPINS_REWARD, 
                        uint256(keccak256(abi.encodePacked(block.timestamp, player, "AUTO_REWARD"))), 
                        false
                    );
                }
            }
        }
    }

    uint256[] private nativeAmounts = [
        0,
        0.6 ether,
        0.9 ether,
        1.2 ether,
        1.8 ether,
        3 ether,
        6 ether,
        12 ether,
        30 ether,
        120 ether,
        600 ether
    ];

    uint32[] private nativePpm = [
        470000,
        170000,
        120000,
        80000,
        60000,
        40000,
        30000,
        13000,
        7000,
        5000,
        5000
    ];

    uint256[] private erc20Amounts = [
        0,
        6000 * (10**18),
        9000 * (10**18),
        12000 * (10**18),
        18000 * (10**18),
        30000 * (10**18),
        60000 * (10**18),
        120000 * (10**18),
        300000 * (10**18),
        1200000 * (10**18),
        6000000 * (10**18)
    ];
    
    uint32[] private erc20Ppm = [
        440000,
        200000,
        120000,
        80000,
        60000,
        40000,
        30000,
        13000,
        7000,
        5000,
        5000
    ];

    uint32[] private nftPpm = [600000, 400000];

    function spin() external payable nonReentrant returns (string memory prizeType, uint256 prizeAmount) {
        require(msg.value == spinCost, "Incorrect spin cost");

        uint256 entropy = uint256(
            keccak256(abi.encodePacked(block.timestamp, msg.sender, block.prevrandao, totalSpins))
        );
        uint256 primary = entropy % 10000;

        totalSpins++;
        playerSpins[msg.sender]++;

        _checkAndAwardEvery3Spins(msg.sender);

        // 🔥 DISTRIBUCIÓN ACTUALIZADA CON NFT REDUCIDO 15% TOTAL
        if (primary < 5650) { // 56.5% - NONE (aumentado de 56%)
            prizeType = "NONE";
            prizeAmount = 0;
            _recordAndEmit(msg.sender, prizeType, prizeAmount, entropy, false);
            return (prizeType, prizeAmount);
        }

        if (primary <= 6982) { // 13.32% - NATIVE (6982 - 5650 = 1332)
            (prizeType, prizeAmount) = _selectNative(entropy);
        } else if (primary <= 8315) { // 13.33% - ERC20 (8315 - 6982 = 1333)
            (prizeType, prizeAmount) = _selectERC20(entropy);
        } else { // 🔥 16.85% - NFT (10000 - 8315 = 1685) - REDUCIDO 15% TOTAL
            (prizeType, prizeAmount) = _selectNFT(entropy);
        }

        _recordAndEmit(msg.sender, prizeType, prizeAmount, entropy, false);
        return (prizeType, prizeAmount);
    }

    function _selectNative(uint256 entropy) internal returns (string memory prizeType, uint256 prizeAmount) {
        uint256 r = uint256(keccak256(abi.encodePacked(entropy, "NATIVE"))) % 1_000_000;
        uint256 cum = 0;
        for (uint256 i = 0; i < nativePpm.length; i++) {
            cum += nativePpm[i];
            if (r < cum) {
                if (nativeAmounts[i] == 0) {
                    return ("NONE", 0);
                }
                uint256 amount = nativeAmounts[i];
                if (address(this).balance >= amount) {
                    (bool sent, ) = payable(msg.sender).call{value: amount}("");
                    if (sent) {
                        totalPayouts += amount;
                        totalNativePayouts += amount;
                        playerWinnings[msg.sender] += amount;
                        emit NativePrizeSent(msg.sender, amount);
                        return ("NATIVE", amount);
                    } else {
                        return ("NONE", 0);
                    }
                } else {
                    return ("NONE", 0);
                }
            }
        }
        return ("NONE", 0);
    }

    function _selectERC20(uint256 entropy) internal returns (string memory prizeType, uint256 prizeAmount) {
        uint256 r = uint256(keccak256(abi.encodePacked(entropy, "ERC20"))) % 1_000_000;
        uint256 cum = 0;
        for (uint256 i = 0; i < erc20Ppm.length; i++) {
            cum += erc20Ppm[i];
            if (r < cum) {
                if (erc20Amounts[i] == 0) {
                    return ("NONE", 0);
                }
                uint256 amount = erc20Amounts[i];
                if (address(erc20Token) == address(0)) return ("NONE", 0);
                if (erc20Token.balanceOf(address(this)) >= amount) {
                    bool ok = erc20Token.transfer(msg.sender, amount);
                    if (ok) {
                        totalERCPayouts += amount;
                        emit ERC20PrizeSent(msg.sender, amount);
                        return ("ERC20", amount);
                    } else {
                        return ("NONE", 0);
                    }
                } else {
                    return ("NONE", 0);
                }
            }
        }
        return ("NONE", 0);
    }

    function _selectNFT(uint256 entropy) internal returns (string memory prizeType, uint256 prizeAmount) {
        uint256 r = uint256(keccak256(abi.encodePacked(entropy, "NFT"))) % 1_000_000;
        uint256 cum = 0;
        for (uint256 i = 0; i < nftPpm.length; i++) {
            cum += nftPpm[i];
            if (r < cum) {
                if (i == 0) {
                    return ("NONE", 0);
                } else {
                    if (availableNFTIds.length == 0) return ("NONE", 0);
                    uint256 tokenId = _getAndRemoveNFTPrize();
                    
                    require(
                        nftCollection.ownerOf(tokenId) == address(this),
                        "Contract doesn't own this NFT"
                    );
                    
                    nftCollection.safeTransferFrom(address(this), msg.sender, tokenId);
                    totalNFTPayouts += 1;
                    emit NFTPrizeSent(msg.sender, tokenId);
                    return ("NFT", tokenId);
                }
            }
        }
        return ("NONE", 0);
    }

    function _recordAndEmit(address player, string memory prizeType, uint256 prizeAmount, uint256 entropy, bool freeSpin) internal {
        playerSpinHistory[player].push(
            PlayerSpin({
                timestamp: block.timestamp,
                prizeType: prizeType,
                prizeAmount: prizeAmount,
                freeSpinUsed: freeSpin
            })
        );

        spins[totalSpins] = SpinResult({
            player: player,
            prizeType: prizeType,
            prizeAmount: prizeAmount,
            random: entropy,
            timestamp: block.timestamp,
            wasFreeSpin: freeSpin
        });

        emit SpinExecuted(player, totalSpins, prizeType, prizeAmount, entropy, freeSpin);
    }

    function emergencyWithdrawNative(address payable to) external onlyOwner nonReentrant {
        require(to != address(0), "Invalid address");
        uint256 balance = address(this).balance;
        require(balance > 0, "No native balance to withdraw");
        
        to.transfer(balance);
        emit EmergencyNativeWithdrawn(to, balance);
    }

    function emergencyWithdrawERC20(address to) external onlyOwner nonReentrant {
        require(to != address(0), "Invalid address");
        require(address(erc20Token) != address(0), "ERC20 not set");
        
        uint256 balance = erc20Token.balanceOf(address(this));
        require(balance > 0, "No ERC20 balance to withdraw");
        
        erc20Token.transfer(to, balance);
        emit EmergencyERC20Withdrawn(to, balance);
    }

    function emergencyWithdrawNFT(address to) external onlyOwner nonReentrant {
        require(to != address(0), "Invalid address");
        require(address(nftCollection) != address(0), "NFT collection not set");
        require(availableNFTIds.length > 0, "No NFTs to withdraw");
        
        uint256 nftCount = availableNFTIds.length;
        
        for (uint256 i = 0; i < nftCount; i++) {
            uint256 tokenId = availableNFTIds[i];
            if (nftCollection.ownerOf(tokenId) == address(this)) {
                nftCollection.safeTransferFrom(address(this), to, tokenId);
                emit NFTPrizeSent(to, tokenId);
            }
        }
        
        delete availableNFTIds;
        
        emit EmergencyNFTsWithdrawn(to, nftCount);
    }

    function withdrawNative(address payable to, uint256 amount) external onlyOwner {
        require(address(this).balance >= amount, "Insufficient balance");
        to.transfer(amount);
    }

    function withdrawERC20(address to, uint256 amount) external onlyOwner {
        require(address(erc20Token) != address(0), "ERC20 not set");
        require(erc20Token.balanceOf(address(this)) >= amount, "Insufficient ERC20");
        erc20Token.transfer(to, amount);
    }

    function withdrawNFT(address to, uint256 tokenId) external onlyOwner nonReentrant {
        require(to != address(0), "Invalid address");
        require(address(nftCollection) != address(0), "NFT collection not set");

        bool found = false;
        for (uint256 i = 0; i < availableNFTIds.length; i++) {
            if (availableNFTIds[i] == tokenId) {
                found = true;
                availableNFTIds[i] = availableNFTIds[availableNFTIds.length - 1];
                availableNFTIds.pop();
                break;
            }
        }

        require(nftCollection.ownerOf(tokenId) == address(this), "Contract does not own this NFT");
        nftCollection.safeTransferFrom(address(this), to, tokenId);
        emit NFTPrizeSent(to, tokenId);
    }

    function getCompletePlayerHistory(address player) external view returns (PlayerSpin[] memory) {
        return playerSpinHistory[player];
    }

    function getNext3SpinsReward(address player) external view returns (uint256 spinsUntilReward, uint256 nextRewardAmount) {
        uint256 playerSpinCount = playerSpins[player];
        uint256 nextRewardSpin = ((playerSpinCount / SPINS_INTERVAL_FOR_REWARD) + 1) * SPINS_INTERVAL_FOR_REWARD;
        spinsUntilReward = nextRewardSpin - playerSpinCount;
        nextRewardAmount = EVERY_3_SPINS_REWARD;
    }

    function getPlayerSpinHistory(address player) external view returns (PlayerSpin[] memory) {
        return playerSpinHistory[player];
    }

    function getContractBalances()
        external
        view
        returns (uint256 nativeBalance, uint256 erc20Balance, uint256 nftCount)
    {
        nativeBalance = address(this).balance;
        erc20Balance = address(erc20Token) == address(0) ? 0 : erc20Token.balanceOf(address(this));
        nftCount = availableNFTIds.length;
    }

    function getTotalPayoutsByType()
        external
        view
        returns (uint256 nativePayouts, uint256 erc20Payouts, uint256 nftPayouts)
    {
        nativePayouts = totalNativePayouts;
        erc20Payouts = totalERCPayouts;
        nftPayouts = totalNFTPayouts;
    }

    function onERC721Received(
        address /*operator*/,
        address /*from*/,
        uint256 /*tokenId*/,
        bytes calldata /*data*/
    ) external override pure returns (bytes4) {
        return this.onERC721Received.selector;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_erc20","type":"address"},{"internalType":"address","name":"_nft","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"spinCount","type":"uint256"}],"name":"AutomaticRewardRecorded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PrizeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyERC20Withdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"EmergencyNFTsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyNativeWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"spinCount","type":"uint256"}],"name":"Every3SpinsReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTPrizeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"NFTsDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativePrizeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"spinId","type":"uint256"},{"indexed":false,"internalType":"string","name":"prizeType","type":"string"},{"indexed":false,"internalType":"uint256","name":"prizeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"random","type":"uint256"},{"indexed":false,"internalType":"bool","name":"wasFreeSpin","type":"bool"}],"name":"SpinExecuted","type":"event"},{"inputs":[],"name":"EVERY_3_SPINS_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SPINS_INTERVAL_FOR_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"availableNFTIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"depositSpecificNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdrawNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"emergencyWithdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"erc20Token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getCompletePlayerHistory","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"prizeType","type":"string"},{"internalType":"uint256","name":"prizeAmount","type":"uint256"},{"internalType":"bool","name":"freeSpinUsed","type":"bool"}],"internalType":"struct SatoSlotMachine.PlayerSpin[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalances","outputs":[{"internalType":"uint256","name":"nativeBalance","type":"uint256"},{"internalType":"uint256","name":"erc20Balance","type":"uint256"},{"internalType":"uint256","name":"nftCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getNext3SpinsReward","outputs":[{"internalType":"uint256","name":"spinsUntilReward","type":"uint256"},{"internalType":"uint256","name":"nextRewardAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getPlayerSpinHistory","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"prizeType","type":"string"},{"internalType":"uint256","name":"prizeAmount","type":"uint256"},{"internalType":"bool","name":"freeSpinUsed","type":"bool"}],"internalType":"struct SatoSlotMachine.PlayerSpin[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPayoutsByType","outputs":[{"internalType":"uint256","name":"nativePayouts","type":"uint256"},{"internalType":"uint256","name":"erc20Payouts","type":"uint256"},{"internalType":"uint256","name":"nftPayouts","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftCollection","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerSpinHistory","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"prizeType","type":"string"},{"internalType":"uint256","name":"prizeAmount","type":"uint256"},{"internalType":"bool","name":"freeSpinUsed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerSpins","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerWinnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nft","type":"address"}],"name":"setNFTCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setSpinCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spin","outputs":[{"internalType":"string","name":"prizeType","type":"string"},{"internalType":"uint256","name":"prizeAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"spinCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"spins","outputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"string","name":"prizeType","type":"string"},{"internalType":"uint256","name":"prizeAmount","type":"uint256"},{"internalType":"uint256","name":"random","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"wasFreeSpin","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalERCPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNFTPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNativePayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSpins","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"withdrawNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526703782dace9d900006002556040518061016001604052805f68ffffffffffffffffff168152602001670853a0d2313c000068ffffffffffffffffff168152602001670c7d713b49da000068ffffffffffffffffff1681526020016710a741a46278000068ffffffffffffffffff1681526020016718fae27693b4000068ffffffffffffffffff1681526020016729a2241af62c000068ffffffffffffffffff1681526020016753444835ec58000068ffffffffffffffffff16815260200167a688906bd8b0000068ffffffffffffffffff1681526020016801a055690d9db8000068ffffffffffffffffff16815260200168068155a43676e0000068ffffffffffffffffff168152602001682086ac35105260000068ffffffffffffffffff16815250600f90600b610138929190610619565b5060405180610160016040528062072bf062ffffff1681526020016202981062ffffff1681526020016201d4c062ffffff1681526020016201388062ffffff16815260200161ea6062ffffff168152602001619c4062ffffff16815260200161753062ffffff1681526020016132c862ffffff168152602001611b5862ffffff16815260200161138862ffffff16815260200161138862ffffff16815250601090600b6101e6929190610671565b506040518061016001604052805f6affffffffffffffffffffff16815260200169014542ba12a337c000006affffffffffffffffffffff1681526020016901e7e4171bf4d3a000006affffffffffffffffffffff16815260200169028a857425466f8000006affffffffffffffffffffff1681526020016903cfc82e37e9a74000006affffffffffffffffffffff16815260200169065a4da25d3016c000006affffffffffffffffffffff168152602001690cb49b44ba602d8000006affffffffffffffffffffff168152602001691969368974c05b0000006affffffffffffffffffffff168152602001693f870857a3e0e38000006affffffffffffffffffffff16815260200169fe1c215e8f838e0000006affffffffffffffffffffff1681526020016a04f68ca6d8cd91c60000006affffffffffffffffffffff16815250601190600b61033792919061071d565b506040518061016001604052806206b6c062ffffff16815260200162030d4062ffffff1681526020016201d4c062ffffff1681526020016201388062ffffff16815260200161ea6062ffffff168152602001619c4062ffffff16815260200161753062ffffff1681526020016132c862ffffff168152602001611b5862ffffff16815260200161138862ffffff16815260200161138862ffffff16815250601290600b6103e5929190610671565b506040518060400160405280620927c062ffffff16815260200162061a8062ffffff16815250601390600261041b929190610777565b50348015610427575f5ffd5b50604051615f13380380615f138339818101604052810190610449919061089c565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036104ba575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016104b191906108e9565b60405180910390fd5b6104c98161055860201b60201c565b506001808190555081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610902565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054828255905f5260205f20908101928215610660579160200282015b8281111561065f578251829068ffffffffffffffffff16905591602001919060010190610637565b5b50905061066d9190610823565b5090565b828054828255905f5260205f209060070160089004810192821561070c579160200282015f5b838211156106da57835183826101000a81548163ffffffff021916908362ffffff1602179055509260200192600401602081600301049283019260010302610697565b801561070a5782816101000a81549063ffffffff02191690556004016020816003010492830192600103026106da565b505b5090506107199190610823565b5090565b828054828255905f5260205f20908101928215610766579160200282015b8281111561076557825182906affffffffffffffffffffff1690559160200191906001019061073b565b5b5090506107739190610823565b5090565b828054828255905f5260205f2090600701600890048101928215610812579160200282015f5b838211156107e057835183826101000a81548163ffffffff021916908362ffffff160217905550926020019260040160208160030104928301926001030261079d565b80156108105782816101000a81549063ffffffff02191690556004016020816003010492830192600103026107e0565b505b50905061081f9190610823565b5090565b5b8082111561083a575f815f905550600101610824565b5090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61086b82610842565b9050919050565b61087b81610861565b8114610885575f5ffd5b50565b5f8151905061089681610872565b92915050565b5f5f604083850312156108b2576108b161083e565b5b5f6108bf85828601610888565b92505060206108d085828601610888565b9150509250929050565b6108e381610861565b82525050565b5f6020820190506108fc5f8301846108da565b92915050565b6156048061090f5f395ff3fe608060405260043610610212575f3560e01c806386593a9d11610117578063c10bba9e1161009f578063f0b31f0e1161006e578063f0b31f0e14610787578063f2fde38b146107c3578063fa3e24cf146107eb578063fd3c55f414610827578063ffd2a7d31461085157610219565b8063c10bba9e146106d8578063de56248714610714578063ee0610181461073c578063f0acd7d51461076857610219565b8063969a9b05116100e6578063969a9b051461060c578063a1db978214610636578063afa1c0191461065e578063b160ec8314610686578063b90f7cbb146106b057610219565b806386593a9d146105645780638a13eea71461058e5780638da5cb5b146105b8578063901b2036146105e257610219565b80634089b1701161019a5780636088e93a116101695780636088e93a146104915780636588103b146104b957806370d2d3d7146104e3578063715018a61461050d5780638315c2641461052357610219565b80634089b170146103d857806340c442de1461040257806342e998811461042a578063518a88e71461045257610219565b8063252f4d81116101e1578063252f4d81146102e55780632b4fd779146103215780632c928e1e146103495780632f765eb114610386578063384763cc146103b057610219565b806307b18bde1461021d578063150b7a02146102455780631f161ab4146102815780631fc9cee8146102a957610219565b3661021957005b5f5ffd5b348015610228575f5ffd5b50610243600480360381019061023e9190613dd5565b61087d565b005b348015610250575f5ffd5b5061026b60048036038101906102669190613eaf565b610910565b6040516102789190613f6d565b60405180910390f35b34801561028c575f5ffd5b506102a760048036038101906102a29190613f86565b610924565b005b3480156102b4575f5ffd5b506102cf60048036038101906102ca9190613f86565b610cc9565b6040516102dc9190613fc0565b60405180910390f35b3480156102f0575f5ffd5b5061030b60048036038101906103069190613f86565b610cde565b6040516103189190613fc0565b60405180910390f35b34801561032c575f5ffd5b5061034760048036038101906103429190613f86565b610cf3565b005b348015610354575f5ffd5b5061036f600480360381019061036a9190613f86565b610d3e565b60405161037d929190613fd9565b60405180910390f35b348015610391575f5ffd5b5061039a610dca565b6040516103a79190613fc0565b60405180910390f35b3480156103bb575f5ffd5b506103d660048036038101906103d19190614055565b610dd0565b005b3480156103e3575f5ffd5b506103ec611002565b6040516103f99190613fc0565b60405180910390f35b34801561040d575f5ffd5b5061042860048036038101906104239190613f86565b611008565b005b348015610435575f5ffd5b50610450600480360381019061044b91906140a0565b6112ea565b005b34801561045d575f5ffd5b50610478600480360381019061047391906140cb565b61144c565b6040516104889493929190614193565b60405180910390f35b34801561049c575f5ffd5b506104b760048036038101906104b291906140cb565b611524565b005b3480156104c4575f5ffd5b506104cd6118e0565b6040516104da9190614238565b60405180910390f35b3480156104ee575f5ffd5b506104f7611905565b6040516105049190613fc0565b60405180910390f35b348015610518575f5ffd5b5061052161190a565b005b34801561052e575f5ffd5b5061054960048036038101906105449190614251565b61191d565b60405161055b9695949392919061428b565b60405180910390f35b34801561056f575f5ffd5b50610578611a06565b6040516105859190613fc0565b60405180910390f35b348015610599575f5ffd5b506105a2611a0c565b6040516105af9190614311565b60405180910390f35b3480156105c3575f5ffd5b506105cc611a31565b6040516105d9919061432a565b60405180910390f35b3480156105ed575f5ffd5b506105f6611a58565b6040516106039190613fc0565b60405180910390f35b348015610617575f5ffd5b50610620611a5e565b60405161062d9190613fc0565b60405180910390f35b348015610641575f5ffd5b5061065c600480360381019061065791906140cb565b611a64565b005b348015610669575f5ffd5b50610684600480360381019061067f9190614251565b611c77565b005b348015610691575f5ffd5b5061069a611ccb565b6040516106a79190613fc0565b60405180910390f35b3480156106bb575f5ffd5b506106d660048036038101906106d19190614251565b611cd1565b005b3480156106e3575f5ffd5b506106fe60048036038101906106f99190614251565b611f1d565b60405161070b9190613fc0565b60405180910390f35b34801561071f575f5ffd5b5061073a60048036038101906107359190613f86565b611f3d565b005b348015610747575f5ffd5b50610750611f88565b60405161075f93929190614343565b60405180910390f35b610770611f9f565b60405161077e929190614378565b60405180910390f35b348015610792575f5ffd5b506107ad60048036038101906107a89190613f86565b61216b565b6040516107ba9190614527565b60405180910390f35b3480156107ce575f5ffd5b506107e960048036038101906107e49190613f86565b6122c1565b005b3480156107f6575f5ffd5b50610811600480360381019061080c9190613f86565b612345565b60405161081e9190614527565b60405180910390f35b348015610832575f5ffd5b5061083b61249b565b6040516108489190613fc0565b60405180910390f35b34801561085c575f5ffd5b506108656124a8565b60405161087493929190614343565b60405180910390f35b6108856125b1565b804710156108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90614591565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561090b573d5f5f3e3d5ffd5b505050565b5f63150b7a0260e01b905095945050505050565b61092c6125b1565b610934612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610999906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2890614661565b60405180910390fd5b5f600c8054905011610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f906146c9565b60405180910390fd5b5f600c8054905090505f5f90505b81811015610c61575f600c8281548110610aa357610aa26146e7565b5b905f5260205f20015490503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610b1f9190613fc0565b602060405180830381865afa158015610b3a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5e9190614728565b73ffffffffffffffffffffffffffffffffffffffff1603610c5357600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3086846040518463ffffffff1660e01b8152600401610bd793929190614753565b5f604051808303815f87803b158015610bee575f5ffd5b505af1158015610c00573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b82604051610c4a9190613fc0565b60405180910390a25b508080600101915050610a86565b50600c5f610c6f9190613d07565b8173ffffffffffffffffffffffffffffffffffffffff167f33791e8b42f2588755f7a687e5c7b194580157f8f23db8602b278c4ebecf2a7a82604051610cb59190613fc0565b60405180910390a250610cc6612687565b50565b6008602052805f5260405f205f915090505481565b6009602052805f5260405f205f915090505481565b610cfb6125b1565b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60036001600384610d9391906147e2565b610d9d9190614812565b610da79190614845565b90508181610db59190614886565b9350683635c9adc5dea0000092505050915091565b60055481565b610dd86125b1565b5f8282905011610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490614903565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390614661565b60405180910390fd5b5f5f90505b82829050811015610fac57600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330868686818110610f0e57610f0d6146e7565b5b905060200201356040518463ffffffff1660e01b8152600401610f3393929190614753565b5f604051808303815f87803b158015610f4a575f5ffd5b505af1158015610f5c573d5f5f3e3d5ffd5b50505050600c838383818110610f7557610f746146e7565b5b90506020020135908060018154018082558091505060019003905f5260205f20015f90919091909150558080600101915050610eb1565b503373ffffffffffffffffffffffffffffffffffffffff167f68f8240e0b8951631ab25257a8c9839034bb0159154f157bd48f300f3c6f284f83839050604051610ff69190613fc0565b60405180910390a25050565b60045481565b6110106125b1565b611018612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c9061496b565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611170919061432a565b602060405180830381865afa15801561118b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111af919061499d565b90505f81116111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90614a12565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161124f929190614a30565b6020604051808303815f875af115801561126b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128f9190614a81565b508173ffffffffffffffffffffffffffffffffffffffff167f92e39f7df2c623ce2e69bbf1af49ba0fb2749b5855aab707652065d349118ccf826040516112d69190613fc0565b60405180910390a2506112e7612687565b50565b6112f26125b1565b6112fa612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906145f9565b60405180910390fd5b5f4790505f81116113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590614af6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156113f1573d5f5f3e3d5ffd5b508173ffffffffffffffffffffffffffffffffffffffff167f667063edc301be4bbbe0123ca445e0ded1511a46a4cba624ae39dfcda8eddbc1826040516114389190613fc0565b60405180910390a250611449612687565b50565b600d602052815f5260405f208181548110611465575f80fd5b905f5260205f2090600402015f9150915050805f01549080600101805461148b90614b41565b80601f01602080910402602001604051908101604052809291908181526020018280546114b790614b41565b80156115025780601f106114d957610100808354040283529160200191611502565b820191905f5260205f20905b8154815290600101906020018083116114e557829003601f168201915b505050505090806002015490806003015f9054906101000a900460ff16905084565b61152c6125b1565b611534612638565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611599906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890614661565b60405180910390fd5b5f5f90505f5f90505b600c805490508110156116f35782600c828154811061165c5761165b6146e7565b5b905f5260205f200154036116e65760019150600c6001600c805490506116829190614886565b81548110611693576116926146e7565b5b905f5260205f200154600c82815481106116b0576116af6146e7565b5b905f5260205f200181905550600c8054806116ce576116cd614b71565b5b600190038181905f5260205f20015f905590556116f3565b808060010191505061163a565b503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016117659190613fc0565b602060405180830381865afa158015611780573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a49190614728565b73ffffffffffffffffffffffffffffffffffffffff16146117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190614be8565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3085856040518463ffffffff1660e01b815260040161185893929190614753565b5f604051808303815f87803b15801561186f575f5ffd5b505af1158015611881573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b836040516118cb9190613fc0565b60405180910390a2506118dc612687565b5050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600381565b6119126125b1565b61191b5f612690565b565b600e602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461196190614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461198d90614b41565b80156119d85780601f106119af576101008083540402835291602001916119d8565b820191905f5260205f20905b8154815290600101906020018083116119bb57829003601f168201915b505050505090806002015490806003015490806004015490806005015f9054906101000a900460ff16905086565b60065481565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60025481565b611a6c6125b1565b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af29061496b565b60405180910390fd5b80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b56919061432a565b602060405180830381865afa158015611b71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b95919061499d565b1015611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd90614c50565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611c32929190614a30565b6020604051808303815f875af1158015611c4e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c729190614a81565b505050565b611c7f6125b1565b5f8111611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890614cb8565b60405180910390fd5b8060028190555050565b60075481565b611cd96125b1565b5f8111611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1290614d20565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614661565b60405180910390fd5b5f5f90505f5f90505b82811015611e8857600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611e1993929190614753565b5f604051808303815f87803b158015611e30575f5ffd5b505af1925050508015611e41575060015b15611e7b57600c81908060018154018082558091505060019003905f5260205f20015f90919091909150558180611e7790614d3e565b9250505b8080600101915050611db3565b505f8111611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614dcf565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f68f8240e0b8951631ab25257a8c9839034bb0159154f157bd48f300f3c6f284f82604051611f119190613fc0565b60405180910390a25050565b600c8181548110611f2c575f80fd5b905f5260205f20015f915090505481565b611f456125b1565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f600554925060065491506007549050909192565b60605f611faa612638565b6002543414611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590614e37565b60405180910390fd5b5f4233446003546040516020016120089493929190614eba565b604051602081830303815290604052805190602001205f1c90505f612710826120319190614f07565b905060035f81548092919061204590614d3e565b919050555060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061209790614d3e565b91905055506120a533612751565b6116128110156120fe576040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525093505f92506120f7338585855f612e00565b505061215f565b611b46811161211d576121108261301f565b809450819550505061214f565b61207b811161213c5761212f826133b5565b809450819550505061214e565b61214582613848565b80945081955050505b5b61215c338585855f612e00565b50505b612167612687565b9091565b6060600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b828210156122b6578382905f5260205f2090600402016040518060800160405290815f820154815260200160018201805461220390614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461222f90614b41565b801561227a5780601f106122515761010080835404028352916020019161227a565b820191905f5260205f20905b81548152906001019060200180831161225d57829003601f168201915b5050505050815260200160028201548152602001600382015f9054906101000a900460ff161515151581525050815260200190600101906121c9565b505050509050919050565b6122c96125b1565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612339575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612330919061432a565b60405180910390fd5b61234281612690565b50565b6060600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015612490578382905f5260205f2090600402016040518060800160405290815f82015481526020016001820180546123dd90614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461240990614b41565b80156124545780601f1061242b57610100808354040283529160200191612454565b820191905f5260205f20905b81548152906001019060200180831161243757829003601f168201915b5050505050815260200160028201548152602001600382015f9054906101000a900460ff161515151581525050815260200190600101906123a3565b505050509050919050565b683635c9adc5dea0000081565b5f5f5f4792505f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125a057600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161255c919061432a565b602060405180830381865afa158015612577573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259b919061499d565b6125a2565b5f5b9150600c805490509050909192565b6125b9613c23565b73ffffffffffffffffffffffffffffffffffffffff166125d7611a31565b73ffffffffffffffffffffffffffffffffffffffff1614612636576125fa613c23565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161262d919061432a565b60405180910390fd5b565b60026001540361267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490614f81565b60405180910390fd5b6002600181905550565b60018081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f6003826127a09190614f07565b1480156127ac57505f81115b15612dfc575f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156128af5750683635c9adc5dea00000600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161286d919061432a565b602060405180830381865afa158015612888573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ac919061499d565b10155b15612dfb575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84683635c9adc5dea000006040518363ffffffff1660e01b815260040161291a929190614a30565b6020604051808303815f875af1158015612936573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061295a9190614a81565b90508015612df957683635c9adc5dea0000060065f82825461297c9190614812565b92505081905550683635c9adc5dea0000060045f82825461299d9190614812565b92505081905550683635c9adc5dea0000060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546129f99190614812565b92505081905550600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180608001604052804281526020016040518060400160405280600581526020017f45524332300000000000000000000000000000000000000000000000000000008152508152602001683635c9adc5dea0000081526020015f1515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f01556020820151816001019081612ae19190615163565b50604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555050506040518060c001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280600581526020017f45524332300000000000000000000000000000000000000000000000000000008152508152602001683635c9adc5dea0000081526020014285604051602001612b91929190615286565b604051602081830303815290604052805190602001205f1c81526020014281526020015f1515815250600e5f60035481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612c269190615163565b5060408201518160020155606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff0219169083151502179055509050508273ffffffffffffffffffffffffffffffffffffffff167fb11ca078ff9d9ef1c2c26ecfb507b717695344ea2e8bac9b0f2ee3b91c40d4b4683635c9adc5dea00000604051612cb69190613fc0565b60405180910390a28273ffffffffffffffffffffffffffffffffffffffff167fb41e1687f8cee7f3272379325c6cdd7343cad8bb7c4d437184660a7512411c61683635c9adc5dea0000084604051612d0f929190613fd9565b60405180910390a28273ffffffffffffffffffffffffffffffffffffffff167f142b19bc5c09690e61e7772c7972afe162e35d0432fc85b31dc6827fe1915bab683635c9adc5dea0000084604051612d68929190613fd9565b60405180910390a26003548373ffffffffffffffffffffffffffffffffffffffff167f66d7e32beaa0bf057724beb1d1928489fbe623e34e10f46aa960b25a8c0f6997683635c9adc5dea000004287604051602001612dc8929190615286565b604051602081830303815290604052805190602001205f1c5f604051612df093929190615306565b60405180910390a35b505b5b5050565b600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060800160405280428152602001868152602001858152602001831515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f01556020820151816001019081612ea39190615163565b50604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555050506040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001838152602001428152602001821515815250600e5f60035481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612f809190615163565b5060408201518160020155606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff0219169083151502179055509050506003548573ffffffffffffffffffffffffffffffffffffffff167f66d7e32beaa0bf057724beb1d1928489fbe623e34e10f46aa960b25a8c0f699786868686604051613010949392919061534e565b60405180910390a35050505050565b60605f5f620f42408460405160200161303891906153e2565b604051602081830303815290604052805190602001205f1c61305a9190614f07565b90505f5f90505f5f90505b6010805490508110156133705760108181548110613086576130856146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826130bb9190614812565b915081831015613363575f600f82815481106130da576130d96146e7565b5b905f5260205f2001540361312c575f6040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525090945094505050506133b0565b5f600f8281548110613141576131406146e7565b5b905f5260205f200154905080471061331e575f3373ffffffffffffffffffffffffffffffffffffffff168260405161317890615434565b5f6040518083038185875af1925050503d805f81146131b2576040519150601f19603f3d011682016040523d82523d5f602084013e6131b7565b606091505b5050905080156132d8578160045f8282546131d29190614812565b925050819055508160055f8282546131ea9190614812565b925050819055508160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461323d9190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f22638f6df852ff9ebbf1ed678c817164d21ece093e03d1395be093bede06959a8360405161328a9190613fc0565b60405180910390a2816040518060400160405280600681526020017f4e41544956450000000000000000000000000000000000000000000000000000815250909650965050505050506133b0565b5f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909650965050505050506133b0565b5f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509095509550505050506133b0565b8080600101915050613065565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b60605f5f620f4240846040516020016133ce919061546a565b604051602081830303815290604052805190602001205f1c6133f09190614f07565b90505f5f90505f5f90505b601280549050811015613803576012818154811061341c5761341b6146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826134519190614812565b9150818310156137f6575f601182815481106134705761346f6146e7565b5b905f5260205f200154036134c2575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613843565b5f601182815481106134d7576134d66146e7565b5b905f5260205f20015490505f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361357b575f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909550955050505050613843565b80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135d6919061432a565b602060405180830381865afa1580156135f1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613615919061499d565b106137b1575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401613677929190614a30565b6020604051808303815f875af1158015613693573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136b79190614a81565b9050801561376b578160065f8282546136d09190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fb11ca078ff9d9ef1c2c26ecfb507b717695344ea2e8bac9b0f2ee3b91c40d4b48360405161371d9190613fc0565b60405180910390a2816040518060400160405280600581526020017f455243323000000000000000000000000000000000000000000000000000000081525090965096505050505050613843565b5f6040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525090965096505050505050613843565b5f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909550955050505050613843565b80806001019150506133fb565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b60605f5f620f42408460405160200161386191906154d9565b604051602081830303815290604052805190602001205f1c6138839190614f07565b90505f5f90505f5f90505b601380549050811015613bde57601381815481106138af576138ae6146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826138e49190614812565b915081831015613bd1575f8103613939575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613c1e565b5f600c8054905003613989575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613c1e565b5f613992613c2a565b90503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401613a059190613fc0565b602060405180830381865afa158015613a20573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a449190614728565b73ffffffffffffffffffffffffffffffffffffffff1614613a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9190615548565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b8152600401613af893929190614753565b5f604051808303815f87803b158015613b0f575f5ffd5b505af1158015613b21573d5f5f3e3d5ffd5b50505050600160075f828254613b379190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b82604051613b849190613fc0565b60405180910390a2806040518060400160405280600381526020017f4e46540000000000000000000000000000000000000000000000000000000000815250909550955050505050613c1e565b808060010191505061388e565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b5f33905090565b5f5f600c8054905011613c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c69906155b0565b60405180910390fd5b600c5f81548110613c8657613c856146e7565b5b905f5260205f2001549050600c6001600c80549050613ca59190614886565b81548110613cb657613cb56146e7565b5b905f5260205f200154600c5f81548110613cd357613cd26146e7565b5b905f5260205f200181905550600c805480613cf157613cf0614b71565b5b600190038181905f5260205f20015f9055905590565b5080545f8255905f5260205f2090810190613d229190613d25565b50565b5b80821115613d3c575f815f905550600101613d26565b5090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d7182613d48565b9050919050565b613d8181613d67565b8114613d8b575f5ffd5b50565b5f81359050613d9c81613d78565b92915050565b5f819050919050565b613db481613da2565b8114613dbe575f5ffd5b50565b5f81359050613dcf81613dab565b92915050565b5f5f60408385031215613deb57613dea613d40565b5b5f613df885828601613d8e565b9250506020613e0985828601613dc1565b9150509250929050565b5f613e1d82613d48565b9050919050565b613e2d81613e13565b8114613e37575f5ffd5b50565b5f81359050613e4881613e24565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112613e6f57613e6e613e4e565b5b8235905067ffffffffffffffff811115613e8c57613e8b613e52565b5b602083019150836001820283011115613ea857613ea7613e56565b5b9250929050565b5f5f5f5f5f60808688031215613ec857613ec7613d40565b5b5f613ed588828901613e3a565b9550506020613ee688828901613e3a565b9450506040613ef788828901613dc1565b935050606086013567ffffffffffffffff811115613f1857613f17613d44565b5b613f2488828901613e5a565b92509250509295509295909350565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f6781613f33565b82525050565b5f602082019050613f805f830184613f5e565b92915050565b5f60208284031215613f9b57613f9a613d40565b5b5f613fa884828501613e3a565b91505092915050565b613fba81613da2565b82525050565b5f602082019050613fd35f830184613fb1565b92915050565b5f604082019050613fec5f830185613fb1565b613ff96020830184613fb1565b9392505050565b5f5f83601f84011261401557614014613e4e565b5b8235905067ffffffffffffffff81111561403257614031613e52565b5b60208301915083602082028301111561404e5761404d613e56565b5b9250929050565b5f5f6020838503121561406b5761406a613d40565b5b5f83013567ffffffffffffffff81111561408857614087613d44565b5b61409485828601614000565b92509250509250929050565b5f602082840312156140b5576140b4613d40565b5b5f6140c284828501613d8e565b91505092915050565b5f5f604083850312156140e1576140e0613d40565b5b5f6140ee85828601613e3a565b92505060206140ff85828601613dc1565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61414b82614109565b6141558185614113565b9350614165818560208601614123565b61416e81614131565b840191505092915050565b5f8115159050919050565b61418d81614179565b82525050565b5f6080820190506141a65f830187613fb1565b81810360208301526141b88186614141565b90506141c76040830185613fb1565b6141d46060830184614184565b95945050505050565b5f819050919050565b5f6142006141fb6141f684613d48565b6141dd565b613d48565b9050919050565b5f614211826141e6565b9050919050565b5f61422282614207565b9050919050565b61423281614218565b82525050565b5f60208201905061424b5f830184614229565b92915050565b5f6020828403121561426657614265613d40565b5b5f61427384828501613dc1565b91505092915050565b61428581613e13565b82525050565b5f60c08201905061429e5f83018961427c565b81810360208301526142b08188614141565b90506142bf6040830187613fb1565b6142cc6060830186613fb1565b6142d96080830185613fb1565b6142e660a0830184614184565b979650505050505050565b5f6142fb82614207565b9050919050565b61430b816142f1565b82525050565b5f6020820190506143245f830184614302565b92915050565b5f60208201905061433d5f83018461427c565b92915050565b5f6060820190506143565f830186613fb1565b6143636020830185613fb1565b6143706040830184613fb1565b949350505050565b5f6040820190508181035f8301526143908185614141565b905061439f6020830184613fb1565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143d881613da2565b82525050565b5f82825260208201905092915050565b5f6143f882614109565b61440281856143de565b9350614412818560208601614123565b61441b81614131565b840191505092915050565b61442f81614179565b82525050565b5f608083015f83015161444a5f8601826143cf565b506020830151848203602086015261446282826143ee565b915050604083015161447760408601826143cf565b50606083015161448a6060860182614426565b508091505092915050565b5f6144a08383614435565b905092915050565b5f602082019050919050565b5f6144be826143a6565b6144c881856143b0565b9350836020820285016144da856143c0565b805f5b8581101561451557848403895281516144f68582614495565b9450614501836144a8565b925060208a019950506001810190506144dd565b50829750879550505050505092915050565b5f6020820190508181035f83015261453f81846144b4565b905092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61457b601483614113565b915061458682614547565b602082019050919050565b5f6020820190508181035f8301526145a88161456f565b9050919050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f6145e3600f83614113565b91506145ee826145af565b602082019050919050565b5f6020820190508181035f830152614610816145d7565b9050919050565b7f4e465420636f6c6c656374696f6e206e6f7420736574000000000000000000005f82015250565b5f61464b601683614113565b915061465682614617565b602082019050919050565b5f6020820190508181035f8301526146788161463f565b9050919050565b7f4e6f204e46547320746f207769746864726177000000000000000000000000005f82015250565b5f6146b3601383614113565b91506146be8261467f565b602082019050919050565b5f6020820190508181035f8301526146e0816146a7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061472281613e24565b92915050565b5f6020828403121561473d5761473c613d40565b5b5f61474a84828501614714565b91505092915050565b5f6060820190506147665f83018661427c565b614773602083018561427c565b6147806040830184613fb1565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6147ec82613da2565b91506147f783613da2565b92508261480757614806614788565b5b828204905092915050565b5f61481c82613da2565b915061482783613da2565b925082820190508082111561483f5761483e6147b5565b5b92915050565b5f61484f82613da2565b915061485a83613da2565b925082820261486881613da2565b9150828204841483151761487f5761487e6147b5565b5b5092915050565b5f61489082613da2565b915061489b83613da2565b92508282039050818111156148b3576148b26147b5565b5b92915050565b7f4e6f20746f6b656e204944732070726f766964656400000000000000000000005f82015250565b5f6148ed601583614113565b91506148f8826148b9565b602082019050919050565b5f6020820190508181035f83015261491a816148e1565b9050919050565b7f4552433230206e6f7420736574000000000000000000000000000000000000005f82015250565b5f614955600d83614113565b915061496082614921565b602082019050919050565b5f6020820190508181035f83015261498281614949565b9050919050565b5f8151905061499781613dab565b92915050565b5f602082840312156149b2576149b1613d40565b5b5f6149bf84828501614989565b91505092915050565b7f4e6f2045524332302062616c616e636520746f207769746864726177000000005f82015250565b5f6149fc601c83614113565b9150614a07826149c8565b602082019050919050565b5f6020820190508181035f830152614a29816149f0565b9050919050565b5f604082019050614a435f83018561427c565b614a506020830184613fb1565b9392505050565b614a6081614179565b8114614a6a575f5ffd5b50565b5f81519050614a7b81614a57565b92915050565b5f60208284031215614a9657614a95613d40565b5b5f614aa384828501614a6d565b91505092915050565b7f4e6f206e61746976652062616c616e636520746f2077697468647261770000005f82015250565b5f614ae0601d83614113565b9150614aeb82614aac565b602082019050919050565b5f6020820190508181035f830152614b0d81614ad4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614b5857607f821691505b602082108103614b6b57614b6a614b14565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f436f6e747261637420646f6573206e6f74206f776e2074686973204e465400005f82015250565b5f614bd2601e83614113565b9150614bdd82614b9e565b602082019050919050565b5f6020820190508181035f830152614bff81614bc6565b9050919050565b7f496e73756666696369656e7420455243323000000000000000000000000000005f82015250565b5f614c3a601283614113565b9150614c4582614c06565b602082019050919050565b5f6020820190508181035f830152614c6781614c2e565b9050919050565b7f496e76616c696420636f737400000000000000000000000000000000000000005f82015250565b5f614ca2600c83614113565b9150614cad82614c6e565b602082019050919050565b5f6020820190508181035f830152614ccf81614c96565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f614d0a601d83614113565b9150614d1582614cd6565b602082019050919050565b5f6020820190508181035f830152614d3781614cfe565b9050919050565b5f614d4882613da2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d7a57614d796147b5565b5b600182019050919050565b7f4e6f204e4654732077657265206465706f7369746564000000000000000000005f82015250565b5f614db9601683614113565b9150614dc482614d85565b602082019050919050565b5f6020820190508181035f830152614de681614dad565b9050919050565b7f496e636f7272656374207370696e20636f7374000000000000000000000000005f82015250565b5f614e21601383614113565b9150614e2c82614ded565b602082019050919050565b5f6020820190508181035f830152614e4e81614e15565b9050919050565b5f819050919050565b614e6f614e6a82613da2565b614e55565b82525050565b5f8160601b9050919050565b5f614e8b82614e75565b9050919050565b5f614e9c82614e81565b9050919050565b614eb4614eaf82613e13565b614e92565b82525050565b5f614ec58287614e5e565b602082019150614ed58286614ea3565b601482019150614ee58285614e5e565b602082019150614ef58284614e5e565b60208201915081905095945050505050565b5f614f1182613da2565b9150614f1c83613da2565b925082614f2c57614f2b614788565b5b828206905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614f6b601f83614113565b9150614f7682614f37565b602082019050919050565b5f6020820190508181035f830152614f9881614f5f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026150287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614fed565b6150328683614fed565b95508019841693508086168417925050509392505050565b5f61506461505f61505a84613da2565b6141dd565b613da2565b9050919050565b5f819050919050565b61507d8361504a565b6150916150898261506b565b848454614ff9565b825550505050565b5f5f905090565b6150a8615099565b6150b3818484615074565b505050565b5b818110156150d6576150cb5f826150a0565b6001810190506150b9565b5050565b601f82111561511b576150ec81614fcc565b6150f584614fde565b81016020851015615104578190505b61511861511085614fde565b8301826150b8565b50505b505050565b5f82821c905092915050565b5f61513b5f1984600802615120565b1980831691505092915050565b5f615153838361512c565b9150826002028217905092915050565b61516c82614109565b67ffffffffffffffff81111561518557615184614f9f565b5b61518f8254614b41565b61519a8282856150da565b5f60209050601f8311600181146151cb575f84156151b9578287015190505b6151c38582615148565b86555061522a565b601f1984166151d986614fcc565b5f5b82811015615200578489015182556001820191506020850194506020810190506151db565b8683101561521d5784890151615219601f89168261512c565b8355505b6001600288020188555050505b505050505050565b5f81905092915050565b7f4155544f5f5245574152440000000000000000000000000000000000000000005f82015250565b5f615270600b83615232565b915061527b8261523c565b600b82019050919050565b5f6152918285614e5e565b6020820191506152a18284614ea3565b6014820191506152b082615264565b91508190509392505050565b7f45524332300000000000000000000000000000000000000000000000000000005f82015250565b5f6152f0600583614113565b91506152fb826152bc565b602082019050919050565b5f6080820190508181035f83015261531d816152e4565b905061532c6020830186613fb1565b6153396040830185613fb1565b6153466060830184614184565b949350505050565b5f6080820190508181035f8301526153668187614141565b90506153756020830186613fb1565b6153826040830185613fb1565b61538f6060830184614184565b95945050505050565b7f4e415449564500000000000000000000000000000000000000000000000000005f82015250565b5f6153cc600683615232565b91506153d782615398565b600682019050919050565b5f6153ed8284614e5e565b6020820191506153fc826153c0565b915081905092915050565b5f81905092915050565b50565b5f61541f5f83615407565b915061542a82615411565b5f82019050919050565b5f61543e82615414565b9150819050919050565b5f615454600583615232565b915061545f826152bc565b600582019050919050565b5f6154758284614e5e565b60208201915061548482615448565b915081905092915050565b7f4e465400000000000000000000000000000000000000000000000000000000005f82015250565b5f6154c3600383615232565b91506154ce8261548f565b600382019050919050565b5f6154e48284614e5e565b6020820191506154f3826154b7565b915081905092915050565b7f436f6e747261637420646f65736e2774206f776e2074686973204e46540000005f82015250565b5f615532601d83614113565b915061553d826154fe565b602082019050919050565b5f6020820190508181035f83015261555f81615526565b9050919050565b7f4e6f204e46547320617661696c61626c650000000000000000000000000000005f82015250565b5f61559a601183614113565b91506155a582615566565b602082019050919050565b5f6020820190508181035f8301526155c78161558e565b905091905056fea26469706673582212205ec08efc6d4016e44868447e6dc31ab159fdb7f6586c02246e678c415bc17a5c64736f6c634300081e0033000000000000000000000000bbbe30b1259a27e016a957e46fe182089330bf990000000000000000000000002d04e5ca7f73debb68b21b3ebe79e644e2479b29

Deployed Bytecode

0x608060405260043610610212575f3560e01c806386593a9d11610117578063c10bba9e1161009f578063f0b31f0e1161006e578063f0b31f0e14610787578063f2fde38b146107c3578063fa3e24cf146107eb578063fd3c55f414610827578063ffd2a7d31461085157610219565b8063c10bba9e146106d8578063de56248714610714578063ee0610181461073c578063f0acd7d51461076857610219565b8063969a9b05116100e6578063969a9b051461060c578063a1db978214610636578063afa1c0191461065e578063b160ec8314610686578063b90f7cbb146106b057610219565b806386593a9d146105645780638a13eea71461058e5780638da5cb5b146105b8578063901b2036146105e257610219565b80634089b1701161019a5780636088e93a116101695780636088e93a146104915780636588103b146104b957806370d2d3d7146104e3578063715018a61461050d5780638315c2641461052357610219565b80634089b170146103d857806340c442de1461040257806342e998811461042a578063518a88e71461045257610219565b8063252f4d81116101e1578063252f4d81146102e55780632b4fd779146103215780632c928e1e146103495780632f765eb114610386578063384763cc146103b057610219565b806307b18bde1461021d578063150b7a02146102455780631f161ab4146102815780631fc9cee8146102a957610219565b3661021957005b5f5ffd5b348015610228575f5ffd5b50610243600480360381019061023e9190613dd5565b61087d565b005b348015610250575f5ffd5b5061026b60048036038101906102669190613eaf565b610910565b6040516102789190613f6d565b60405180910390f35b34801561028c575f5ffd5b506102a760048036038101906102a29190613f86565b610924565b005b3480156102b4575f5ffd5b506102cf60048036038101906102ca9190613f86565b610cc9565b6040516102dc9190613fc0565b60405180910390f35b3480156102f0575f5ffd5b5061030b60048036038101906103069190613f86565b610cde565b6040516103189190613fc0565b60405180910390f35b34801561032c575f5ffd5b5061034760048036038101906103429190613f86565b610cf3565b005b348015610354575f5ffd5b5061036f600480360381019061036a9190613f86565b610d3e565b60405161037d929190613fd9565b60405180910390f35b348015610391575f5ffd5b5061039a610dca565b6040516103a79190613fc0565b60405180910390f35b3480156103bb575f5ffd5b506103d660048036038101906103d19190614055565b610dd0565b005b3480156103e3575f5ffd5b506103ec611002565b6040516103f99190613fc0565b60405180910390f35b34801561040d575f5ffd5b5061042860048036038101906104239190613f86565b611008565b005b348015610435575f5ffd5b50610450600480360381019061044b91906140a0565b6112ea565b005b34801561045d575f5ffd5b50610478600480360381019061047391906140cb565b61144c565b6040516104889493929190614193565b60405180910390f35b34801561049c575f5ffd5b506104b760048036038101906104b291906140cb565b611524565b005b3480156104c4575f5ffd5b506104cd6118e0565b6040516104da9190614238565b60405180910390f35b3480156104ee575f5ffd5b506104f7611905565b6040516105049190613fc0565b60405180910390f35b348015610518575f5ffd5b5061052161190a565b005b34801561052e575f5ffd5b5061054960048036038101906105449190614251565b61191d565b60405161055b9695949392919061428b565b60405180910390f35b34801561056f575f5ffd5b50610578611a06565b6040516105859190613fc0565b60405180910390f35b348015610599575f5ffd5b506105a2611a0c565b6040516105af9190614311565b60405180910390f35b3480156105c3575f5ffd5b506105cc611a31565b6040516105d9919061432a565b60405180910390f35b3480156105ed575f5ffd5b506105f6611a58565b6040516106039190613fc0565b60405180910390f35b348015610617575f5ffd5b50610620611a5e565b60405161062d9190613fc0565b60405180910390f35b348015610641575f5ffd5b5061065c600480360381019061065791906140cb565b611a64565b005b348015610669575f5ffd5b50610684600480360381019061067f9190614251565b611c77565b005b348015610691575f5ffd5b5061069a611ccb565b6040516106a79190613fc0565b60405180910390f35b3480156106bb575f5ffd5b506106d660048036038101906106d19190614251565b611cd1565b005b3480156106e3575f5ffd5b506106fe60048036038101906106f99190614251565b611f1d565b60405161070b9190613fc0565b60405180910390f35b34801561071f575f5ffd5b5061073a60048036038101906107359190613f86565b611f3d565b005b348015610747575f5ffd5b50610750611f88565b60405161075f93929190614343565b60405180910390f35b610770611f9f565b60405161077e929190614378565b60405180910390f35b348015610792575f5ffd5b506107ad60048036038101906107a89190613f86565b61216b565b6040516107ba9190614527565b60405180910390f35b3480156107ce575f5ffd5b506107e960048036038101906107e49190613f86565b6122c1565b005b3480156107f6575f5ffd5b50610811600480360381019061080c9190613f86565b612345565b60405161081e9190614527565b60405180910390f35b348015610832575f5ffd5b5061083b61249b565b6040516108489190613fc0565b60405180910390f35b34801561085c575f5ffd5b506108656124a8565b60405161087493929190614343565b60405180910390f35b6108856125b1565b804710156108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90614591565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561090b573d5f5f3e3d5ffd5b505050565b5f63150b7a0260e01b905095945050505050565b61092c6125b1565b610934612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610999906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2890614661565b60405180910390fd5b5f600c8054905011610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f906146c9565b60405180910390fd5b5f600c8054905090505f5f90505b81811015610c61575f600c8281548110610aa357610aa26146e7565b5b905f5260205f20015490503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610b1f9190613fc0565b602060405180830381865afa158015610b3a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5e9190614728565b73ffffffffffffffffffffffffffffffffffffffff1603610c5357600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3086846040518463ffffffff1660e01b8152600401610bd793929190614753565b5f604051808303815f87803b158015610bee575f5ffd5b505af1158015610c00573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b82604051610c4a9190613fc0565b60405180910390a25b508080600101915050610a86565b50600c5f610c6f9190613d07565b8173ffffffffffffffffffffffffffffffffffffffff167f33791e8b42f2588755f7a687e5c7b194580157f8f23db8602b278c4ebecf2a7a82604051610cb59190613fc0565b60405180910390a250610cc6612687565b50565b6008602052805f5260405f205f915090505481565b6009602052805f5260405f205f915090505481565b610cfb6125b1565b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60036001600384610d9391906147e2565b610d9d9190614812565b610da79190614845565b90508181610db59190614886565b9350683635c9adc5dea0000092505050915091565b60055481565b610dd86125b1565b5f8282905011610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490614903565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390614661565b60405180910390fd5b5f5f90505b82829050811015610fac57600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330868686818110610f0e57610f0d6146e7565b5b905060200201356040518463ffffffff1660e01b8152600401610f3393929190614753565b5f604051808303815f87803b158015610f4a575f5ffd5b505af1158015610f5c573d5f5f3e3d5ffd5b50505050600c838383818110610f7557610f746146e7565b5b90506020020135908060018154018082558091505060019003905f5260205f20015f90919091909150558080600101915050610eb1565b503373ffffffffffffffffffffffffffffffffffffffff167f68f8240e0b8951631ab25257a8c9839034bb0159154f157bd48f300f3c6f284f83839050604051610ff69190613fc0565b60405180910390a25050565b60045481565b6110106125b1565b611018612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c9061496b565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611170919061432a565b602060405180830381865afa15801561118b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111af919061499d565b90505f81116111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90614a12565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161124f929190614a30565b6020604051808303815f875af115801561126b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128f9190614a81565b508173ffffffffffffffffffffffffffffffffffffffff167f92e39f7df2c623ce2e69bbf1af49ba0fb2749b5855aab707652065d349118ccf826040516112d69190613fc0565b60405180910390a2506112e7612687565b50565b6112f26125b1565b6112fa612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906145f9565b60405180910390fd5b5f4790505f81116113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590614af6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156113f1573d5f5f3e3d5ffd5b508173ffffffffffffffffffffffffffffffffffffffff167f667063edc301be4bbbe0123ca445e0ded1511a46a4cba624ae39dfcda8eddbc1826040516114389190613fc0565b60405180910390a250611449612687565b50565b600d602052815f5260405f208181548110611465575f80fd5b905f5260205f2090600402015f9150915050805f01549080600101805461148b90614b41565b80601f01602080910402602001604051908101604052809291908181526020018280546114b790614b41565b80156115025780601f106114d957610100808354040283529160200191611502565b820191905f5260205f20905b8154815290600101906020018083116114e557829003601f168201915b505050505090806002015490806003015f9054906101000a900460ff16905084565b61152c6125b1565b611534612638565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611599906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890614661565b60405180910390fd5b5f5f90505f5f90505b600c805490508110156116f35782600c828154811061165c5761165b6146e7565b5b905f5260205f200154036116e65760019150600c6001600c805490506116829190614886565b81548110611693576116926146e7565b5b905f5260205f200154600c82815481106116b0576116af6146e7565b5b905f5260205f200181905550600c8054806116ce576116cd614b71565b5b600190038181905f5260205f20015f905590556116f3565b808060010191505061163a565b503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016117659190613fc0565b602060405180830381865afa158015611780573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a49190614728565b73ffffffffffffffffffffffffffffffffffffffff16146117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190614be8565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3085856040518463ffffffff1660e01b815260040161185893929190614753565b5f604051808303815f87803b15801561186f575f5ffd5b505af1158015611881573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b836040516118cb9190613fc0565b60405180910390a2506118dc612687565b5050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600381565b6119126125b1565b61191b5f612690565b565b600e602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461196190614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461198d90614b41565b80156119d85780601f106119af576101008083540402835291602001916119d8565b820191905f5260205f20905b8154815290600101906020018083116119bb57829003601f168201915b505050505090806002015490806003015490806004015490806005015f9054906101000a900460ff16905086565b60065481565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60025481565b611a6c6125b1565b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af29061496b565b60405180910390fd5b80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b56919061432a565b602060405180830381865afa158015611b71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b95919061499d565b1015611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd90614c50565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611c32929190614a30565b6020604051808303815f875af1158015611c4e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c729190614a81565b505050565b611c7f6125b1565b5f8111611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890614cb8565b60405180910390fd5b8060028190555050565b60075481565b611cd96125b1565b5f8111611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1290614d20565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614661565b60405180910390fd5b5f5f90505f5f90505b82811015611e8857600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611e1993929190614753565b5f604051808303815f87803b158015611e30575f5ffd5b505af1925050508015611e41575060015b15611e7b57600c81908060018154018082558091505060019003905f5260205f20015f90919091909150558180611e7790614d3e565b9250505b8080600101915050611db3565b505f8111611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614dcf565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f68f8240e0b8951631ab25257a8c9839034bb0159154f157bd48f300f3c6f284f82604051611f119190613fc0565b60405180910390a25050565b600c8181548110611f2c575f80fd5b905f5260205f20015f915090505481565b611f456125b1565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f600554925060065491506007549050909192565b60605f611faa612638565b6002543414611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590614e37565b60405180910390fd5b5f4233446003546040516020016120089493929190614eba565b604051602081830303815290604052805190602001205f1c90505f612710826120319190614f07565b905060035f81548092919061204590614d3e565b919050555060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061209790614d3e565b91905055506120a533612751565b6116128110156120fe576040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525093505f92506120f7338585855f612e00565b505061215f565b611b46811161211d576121108261301f565b809450819550505061214f565b61207b811161213c5761212f826133b5565b809450819550505061214e565b61214582613848565b80945081955050505b5b61215c338585855f612e00565b50505b612167612687565b9091565b6060600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b828210156122b6578382905f5260205f2090600402016040518060800160405290815f820154815260200160018201805461220390614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461222f90614b41565b801561227a5780601f106122515761010080835404028352916020019161227a565b820191905f5260205f20905b81548152906001019060200180831161225d57829003601f168201915b5050505050815260200160028201548152602001600382015f9054906101000a900460ff161515151581525050815260200190600101906121c9565b505050509050919050565b6122c96125b1565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612339575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612330919061432a565b60405180910390fd5b61234281612690565b50565b6060600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015612490578382905f5260205f2090600402016040518060800160405290815f82015481526020016001820180546123dd90614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461240990614b41565b80156124545780601f1061242b57610100808354040283529160200191612454565b820191905f5260205f20905b81548152906001019060200180831161243757829003601f168201915b5050505050815260200160028201548152602001600382015f9054906101000a900460ff161515151581525050815260200190600101906123a3565b505050509050919050565b683635c9adc5dea0000081565b5f5f5f4792505f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125a057600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161255c919061432a565b602060405180830381865afa158015612577573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259b919061499d565b6125a2565b5f5b9150600c805490509050909192565b6125b9613c23565b73ffffffffffffffffffffffffffffffffffffffff166125d7611a31565b73ffffffffffffffffffffffffffffffffffffffff1614612636576125fa613c23565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161262d919061432a565b60405180910390fd5b565b60026001540361267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490614f81565b60405180910390fd5b6002600181905550565b60018081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f6003826127a09190614f07565b1480156127ac57505f81115b15612dfc575f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156128af5750683635c9adc5dea00000600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161286d919061432a565b602060405180830381865afa158015612888573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ac919061499d565b10155b15612dfb575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84683635c9adc5dea000006040518363ffffffff1660e01b815260040161291a929190614a30565b6020604051808303815f875af1158015612936573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061295a9190614a81565b90508015612df957683635c9adc5dea0000060065f82825461297c9190614812565b92505081905550683635c9adc5dea0000060045f82825461299d9190614812565b92505081905550683635c9adc5dea0000060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546129f99190614812565b92505081905550600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180608001604052804281526020016040518060400160405280600581526020017f45524332300000000000000000000000000000000000000000000000000000008152508152602001683635c9adc5dea0000081526020015f1515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f01556020820151816001019081612ae19190615163565b50604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555050506040518060c001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280600581526020017f45524332300000000000000000000000000000000000000000000000000000008152508152602001683635c9adc5dea0000081526020014285604051602001612b91929190615286565b604051602081830303815290604052805190602001205f1c81526020014281526020015f1515815250600e5f60035481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612c269190615163565b5060408201518160020155606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff0219169083151502179055509050508273ffffffffffffffffffffffffffffffffffffffff167fb11ca078ff9d9ef1c2c26ecfb507b717695344ea2e8bac9b0f2ee3b91c40d4b4683635c9adc5dea00000604051612cb69190613fc0565b60405180910390a28273ffffffffffffffffffffffffffffffffffffffff167fb41e1687f8cee7f3272379325c6cdd7343cad8bb7c4d437184660a7512411c61683635c9adc5dea0000084604051612d0f929190613fd9565b60405180910390a28273ffffffffffffffffffffffffffffffffffffffff167f142b19bc5c09690e61e7772c7972afe162e35d0432fc85b31dc6827fe1915bab683635c9adc5dea0000084604051612d68929190613fd9565b60405180910390a26003548373ffffffffffffffffffffffffffffffffffffffff167f66d7e32beaa0bf057724beb1d1928489fbe623e34e10f46aa960b25a8c0f6997683635c9adc5dea000004287604051602001612dc8929190615286565b604051602081830303815290604052805190602001205f1c5f604051612df093929190615306565b60405180910390a35b505b5b5050565b600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060800160405280428152602001868152602001858152602001831515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f01556020820151816001019081612ea39190615163565b50604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555050506040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001838152602001428152602001821515815250600e5f60035481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612f809190615163565b5060408201518160020155606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff0219169083151502179055509050506003548573ffffffffffffffffffffffffffffffffffffffff167f66d7e32beaa0bf057724beb1d1928489fbe623e34e10f46aa960b25a8c0f699786868686604051613010949392919061534e565b60405180910390a35050505050565b60605f5f620f42408460405160200161303891906153e2565b604051602081830303815290604052805190602001205f1c61305a9190614f07565b90505f5f90505f5f90505b6010805490508110156133705760108181548110613086576130856146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826130bb9190614812565b915081831015613363575f600f82815481106130da576130d96146e7565b5b905f5260205f2001540361312c575f6040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525090945094505050506133b0565b5f600f8281548110613141576131406146e7565b5b905f5260205f200154905080471061331e575f3373ffffffffffffffffffffffffffffffffffffffff168260405161317890615434565b5f6040518083038185875af1925050503d805f81146131b2576040519150601f19603f3d011682016040523d82523d5f602084013e6131b7565b606091505b5050905080156132d8578160045f8282546131d29190614812565b925050819055508160055f8282546131ea9190614812565b925050819055508160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461323d9190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f22638f6df852ff9ebbf1ed678c817164d21ece093e03d1395be093bede06959a8360405161328a9190613fc0565b60405180910390a2816040518060400160405280600681526020017f4e41544956450000000000000000000000000000000000000000000000000000815250909650965050505050506133b0565b5f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909650965050505050506133b0565b5f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509095509550505050506133b0565b8080600101915050613065565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b60605f5f620f4240846040516020016133ce919061546a565b604051602081830303815290604052805190602001205f1c6133f09190614f07565b90505f5f90505f5f90505b601280549050811015613803576012818154811061341c5761341b6146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826134519190614812565b9150818310156137f6575f601182815481106134705761346f6146e7565b5b905f5260205f200154036134c2575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613843565b5f601182815481106134d7576134d66146e7565b5b905f5260205f20015490505f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361357b575f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909550955050505050613843565b80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135d6919061432a565b602060405180830381865afa1580156135f1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613615919061499d565b106137b1575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401613677929190614a30565b6020604051808303815f875af1158015613693573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136b79190614a81565b9050801561376b578160065f8282546136d09190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fb11ca078ff9d9ef1c2c26ecfb507b717695344ea2e8bac9b0f2ee3b91c40d4b48360405161371d9190613fc0565b60405180910390a2816040518060400160405280600581526020017f455243323000000000000000000000000000000000000000000000000000000081525090965096505050505050613843565b5f6040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525090965096505050505050613843565b5f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909550955050505050613843565b80806001019150506133fb565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b60605f5f620f42408460405160200161386191906154d9565b604051602081830303815290604052805190602001205f1c6138839190614f07565b90505f5f90505f5f90505b601380549050811015613bde57601381815481106138af576138ae6146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826138e49190614812565b915081831015613bd1575f8103613939575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613c1e565b5f600c8054905003613989575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613c1e565b5f613992613c2a565b90503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401613a059190613fc0565b602060405180830381865afa158015613a20573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a449190614728565b73ffffffffffffffffffffffffffffffffffffffff1614613a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9190615548565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b8152600401613af893929190614753565b5f604051808303815f87803b158015613b0f575f5ffd5b505af1158015613b21573d5f5f3e3d5ffd5b50505050600160075f828254613b379190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b82604051613b849190613fc0565b60405180910390a2806040518060400160405280600381526020017f4e46540000000000000000000000000000000000000000000000000000000000815250909550955050505050613c1e565b808060010191505061388e565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b5f33905090565b5f5f600c8054905011613c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c69906155b0565b60405180910390fd5b600c5f81548110613c8657613c856146e7565b5b905f5260205f2001549050600c6001600c80549050613ca59190614886565b81548110613cb657613cb56146e7565b5b905f5260205f200154600c5f81548110613cd357613cd26146e7565b5b905f5260205f200181905550600c805480613cf157613cf0614b71565b5b600190038181905f5260205f20015f9055905590565b5080545f8255905f5260205f2090810190613d229190613d25565b50565b5b80821115613d3c575f815f905550600101613d26565b5090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d7182613d48565b9050919050565b613d8181613d67565b8114613d8b575f5ffd5b50565b5f81359050613d9c81613d78565b92915050565b5f819050919050565b613db481613da2565b8114613dbe575f5ffd5b50565b5f81359050613dcf81613dab565b92915050565b5f5f60408385031215613deb57613dea613d40565b5b5f613df885828601613d8e565b9250506020613e0985828601613dc1565b9150509250929050565b5f613e1d82613d48565b9050919050565b613e2d81613e13565b8114613e37575f5ffd5b50565b5f81359050613e4881613e24565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112613e6f57613e6e613e4e565b5b8235905067ffffffffffffffff811115613e8c57613e8b613e52565b5b602083019150836001820283011115613ea857613ea7613e56565b5b9250929050565b5f5f5f5f5f60808688031215613ec857613ec7613d40565b5b5f613ed588828901613e3a565b9550506020613ee688828901613e3a565b9450506040613ef788828901613dc1565b935050606086013567ffffffffffffffff811115613f1857613f17613d44565b5b613f2488828901613e5a565b92509250509295509295909350565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f6781613f33565b82525050565b5f602082019050613f805f830184613f5e565b92915050565b5f60208284031215613f9b57613f9a613d40565b5b5f613fa884828501613e3a565b91505092915050565b613fba81613da2565b82525050565b5f602082019050613fd35f830184613fb1565b92915050565b5f604082019050613fec5f830185613fb1565b613ff96020830184613fb1565b9392505050565b5f5f83601f84011261401557614014613e4e565b5b8235905067ffffffffffffffff81111561403257614031613e52565b5b60208301915083602082028301111561404e5761404d613e56565b5b9250929050565b5f5f6020838503121561406b5761406a613d40565b5b5f83013567ffffffffffffffff81111561408857614087613d44565b5b61409485828601614000565b92509250509250929050565b5f602082840312156140b5576140b4613d40565b5b5f6140c284828501613d8e565b91505092915050565b5f5f604083850312156140e1576140e0613d40565b5b5f6140ee85828601613e3a565b92505060206140ff85828601613dc1565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61414b82614109565b6141558185614113565b9350614165818560208601614123565b61416e81614131565b840191505092915050565b5f8115159050919050565b61418d81614179565b82525050565b5f6080820190506141a65f830187613fb1565b81810360208301526141b88186614141565b90506141c76040830185613fb1565b6141d46060830184614184565b95945050505050565b5f819050919050565b5f6142006141fb6141f684613d48565b6141dd565b613d48565b9050919050565b5f614211826141e6565b9050919050565b5f61422282614207565b9050919050565b61423281614218565b82525050565b5f60208201905061424b5f830184614229565b92915050565b5f6020828403121561426657614265613d40565b5b5f61427384828501613dc1565b91505092915050565b61428581613e13565b82525050565b5f60c08201905061429e5f83018961427c565b81810360208301526142b08188614141565b90506142bf6040830187613fb1565b6142cc6060830186613fb1565b6142d96080830185613fb1565b6142e660a0830184614184565b979650505050505050565b5f6142fb82614207565b9050919050565b61430b816142f1565b82525050565b5f6020820190506143245f830184614302565b92915050565b5f60208201905061433d5f83018461427c565b92915050565b5f6060820190506143565f830186613fb1565b6143636020830185613fb1565b6143706040830184613fb1565b949350505050565b5f6040820190508181035f8301526143908185614141565b905061439f6020830184613fb1565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143d881613da2565b82525050565b5f82825260208201905092915050565b5f6143f882614109565b61440281856143de565b9350614412818560208601614123565b61441b81614131565b840191505092915050565b61442f81614179565b82525050565b5f608083015f83015161444a5f8601826143cf565b506020830151848203602086015261446282826143ee565b915050604083015161447760408601826143cf565b50606083015161448a6060860182614426565b508091505092915050565b5f6144a08383614435565b905092915050565b5f602082019050919050565b5f6144be826143a6565b6144c881856143b0565b9350836020820285016144da856143c0565b805f5b8581101561451557848403895281516144f68582614495565b9450614501836144a8565b925060208a019950506001810190506144dd565b50829750879550505050505092915050565b5f6020820190508181035f83015261453f81846144b4565b905092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61457b601483614113565b915061458682614547565b602082019050919050565b5f6020820190508181035f8301526145a88161456f565b9050919050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f6145e3600f83614113565b91506145ee826145af565b602082019050919050565b5f6020820190508181035f830152614610816145d7565b9050919050565b7f4e465420636f6c6c656374696f6e206e6f7420736574000000000000000000005f82015250565b5f61464b601683614113565b915061465682614617565b602082019050919050565b5f6020820190508181035f8301526146788161463f565b9050919050565b7f4e6f204e46547320746f207769746864726177000000000000000000000000005f82015250565b5f6146b3601383614113565b91506146be8261467f565b602082019050919050565b5f6020820190508181035f8301526146e0816146a7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061472281613e24565b92915050565b5f6020828403121561473d5761473c613d40565b5b5f61474a84828501614714565b91505092915050565b5f6060820190506147665f83018661427c565b614773602083018561427c565b6147806040830184613fb1565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6147ec82613da2565b91506147f783613da2565b92508261480757614806614788565b5b828204905092915050565b5f61481c82613da2565b915061482783613da2565b925082820190508082111561483f5761483e6147b5565b5b92915050565b5f61484f82613da2565b915061485a83613da2565b925082820261486881613da2565b9150828204841483151761487f5761487e6147b5565b5b5092915050565b5f61489082613da2565b915061489b83613da2565b92508282039050818111156148b3576148b26147b5565b5b92915050565b7f4e6f20746f6b656e204944732070726f766964656400000000000000000000005f82015250565b5f6148ed601583614113565b91506148f8826148b9565b602082019050919050565b5f6020820190508181035f83015261491a816148e1565b9050919050565b7f4552433230206e6f7420736574000000000000000000000000000000000000005f82015250565b5f614955600d83614113565b915061496082614921565b602082019050919050565b5f6020820190508181035f83015261498281614949565b9050919050565b5f8151905061499781613dab565b92915050565b5f602082840312156149b2576149b1613d40565b5b5f6149bf84828501614989565b91505092915050565b7f4e6f2045524332302062616c616e636520746f207769746864726177000000005f82015250565b5f6149fc601c83614113565b9150614a07826149c8565b602082019050919050565b5f6020820190508181035f830152614a29816149f0565b9050919050565b5f604082019050614a435f83018561427c565b614a506020830184613fb1565b9392505050565b614a6081614179565b8114614a6a575f5ffd5b50565b5f81519050614a7b81614a57565b92915050565b5f60208284031215614a9657614a95613d40565b5b5f614aa384828501614a6d565b91505092915050565b7f4e6f206e61746976652062616c616e636520746f2077697468647261770000005f82015250565b5f614ae0601d83614113565b9150614aeb82614aac565b602082019050919050565b5f6020820190508181035f830152614b0d81614ad4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614b5857607f821691505b602082108103614b6b57614b6a614b14565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f436f6e747261637420646f6573206e6f74206f776e2074686973204e465400005f82015250565b5f614bd2601e83614113565b9150614bdd82614b9e565b602082019050919050565b5f6020820190508181035f830152614bff81614bc6565b9050919050565b7f496e73756666696369656e7420455243323000000000000000000000000000005f82015250565b5f614c3a601283614113565b9150614c4582614c06565b602082019050919050565b5f6020820190508181035f830152614c6781614c2e565b9050919050565b7f496e76616c696420636f737400000000000000000000000000000000000000005f82015250565b5f614ca2600c83614113565b9150614cad82614c6e565b602082019050919050565b5f6020820190508181035f830152614ccf81614c96565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f614d0a601d83614113565b9150614d1582614cd6565b602082019050919050565b5f6020820190508181035f830152614d3781614cfe565b9050919050565b5f614d4882613da2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d7a57614d796147b5565b5b600182019050919050565b7f4e6f204e4654732077657265206465706f7369746564000000000000000000005f82015250565b5f614db9601683614113565b9150614dc482614d85565b602082019050919050565b5f6020820190508181035f830152614de681614dad565b9050919050565b7f496e636f7272656374207370696e20636f7374000000000000000000000000005f82015250565b5f614e21601383614113565b9150614e2c82614ded565b602082019050919050565b5f6020820190508181035f830152614e4e81614e15565b9050919050565b5f819050919050565b614e6f614e6a82613da2565b614e55565b82525050565b5f8160601b9050919050565b5f614e8b82614e75565b9050919050565b5f614e9c82614e81565b9050919050565b614eb4614eaf82613e13565b614e92565b82525050565b5f614ec58287614e5e565b602082019150614ed58286614ea3565b601482019150614ee58285614e5e565b602082019150614ef58284614e5e565b60208201915081905095945050505050565b5f614f1182613da2565b9150614f1c83613da2565b925082614f2c57614f2b614788565b5b828206905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614f6b601f83614113565b9150614f7682614f37565b602082019050919050565b5f6020820190508181035f830152614f9881614f5f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026150287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614fed565b6150328683614fed565b95508019841693508086168417925050509392505050565b5f61506461505f61505a84613da2565b6141dd565b613da2565b9050919050565b5f819050919050565b61507d8361504a565b6150916150898261506b565b848454614ff9565b825550505050565b5f5f905090565b6150a8615099565b6150b3818484615074565b505050565b5b818110156150d6576150cb5f826150a0565b6001810190506150b9565b5050565b601f82111561511b576150ec81614fcc565b6150f584614fde565b81016020851015615104578190505b61511861511085614fde565b8301826150b8565b50505b505050565b5f82821c905092915050565b5f61513b5f1984600802615120565b1980831691505092915050565b5f615153838361512c565b9150826002028217905092915050565b61516c82614109565b67ffffffffffffffff81111561518557615184614f9f565b5b61518f8254614b41565b61519a8282856150da565b5f60209050601f8311600181146151cb575f84156151b9578287015190505b6151c38582615148565b86555061522a565b601f1984166151d986614fcc565b5f5b82811015615200578489015182556001820191506020850194506020810190506151db565b8683101561521d5784890151615219601f89168261512c565b8355505b6001600288020188555050505b505050505050565b5f81905092915050565b7f4155544f5f5245574152440000000000000000000000000000000000000000005f82015250565b5f615270600b83615232565b915061527b8261523c565b600b82019050919050565b5f6152918285614e5e565b6020820191506152a18284614ea3565b6014820191506152b082615264565b91508190509392505050565b7f45524332300000000000000000000000000000000000000000000000000000005f82015250565b5f6152f0600583614113565b91506152fb826152bc565b602082019050919050565b5f6080820190508181035f83015261531d816152e4565b905061532c6020830186613fb1565b6153396040830185613fb1565b6153466060830184614184565b949350505050565b5f6080820190508181035f8301526153668187614141565b90506153756020830186613fb1565b6153826040830185613fb1565b61538f6060830184614184565b95945050505050565b7f4e415449564500000000000000000000000000000000000000000000000000005f82015250565b5f6153cc600683615232565b91506153d782615398565b600682019050919050565b5f6153ed8284614e5e565b6020820191506153fc826153c0565b915081905092915050565b5f81905092915050565b50565b5f61541f5f83615407565b915061542a82615411565b5f82019050919050565b5f61543e82615414565b9150819050919050565b5f615454600583615232565b915061545f826152bc565b600582019050919050565b5f6154758284614e5e565b60208201915061548482615448565b915081905092915050565b7f4e465400000000000000000000000000000000000000000000000000000000005f82015250565b5f6154c3600383615232565b91506154ce8261548f565b600382019050919050565b5f6154e48284614e5e565b6020820191506154f3826154b7565b915081905092915050565b7f436f6e747261637420646f65736e2774206f776e2074686973204e46540000005f82015250565b5f615532601d83614113565b915061553d826154fe565b602082019050919050565b5f6020820190508181035f83015261555f81615526565b9050919050565b7f4e6f204e46547320617661696c61626c650000000000000000000000000000005f82015250565b5f61559a601183614113565b91506155a582615566565b602082019050919050565b5f6020820190508181035f8301526155c78161558e565b905091905056fea26469706673582212205ec08efc6d4016e44868447e6dc31ab159fdb7f6586c02246e678c415bc17a5c64736f6c634300081e0033

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

000000000000000000000000bbbe30b1259a27e016a957e46fe182089330bf990000000000000000000000002d04e5ca7f73debb68b21b3ebe79e644e2479b29

-----Decoded View---------------
Arg [0] : _erc20 (address): 0xbBBE30B1259A27E016A957e46fe182089330Bf99
Arg [1] : _nft (address): 0x2D04e5CA7F73deBB68B21b3eBe79e644e2479b29

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bbbe30b1259a27e016a957e46fe182089330bf99
Arg [1] : 0000000000000000000000002d04e5ca7f73debb68b21b3ebe79e644e2479b29


Deployed Bytecode Sourcemap

18389:17532:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32975:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35630:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32181:786;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18695:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18748:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20791:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34410:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;18579:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21588:506;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18543:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31722:451;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31358:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19191:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33460:789;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18968:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18875:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4326:103;;;;;;;;;;;;;:::i;:::-;;19453:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;18619:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18937:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3651:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18511:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18466:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33175:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20527:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18656:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20906:674;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19003:32;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20679:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35336:286;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25718:1371;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;34829:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4584:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34257:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18806:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34978:350;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;32975:192;3537:13;:11;:13::i;:::-;33098:6:::1;33073:21;:31;;33065:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33140:2;:11;;:19;33152:6;33140:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32975:192:::0;;:::o;35630:251::-;35817:6;35843:30;;;35836:37;;35630:251;;;;;;;:::o;32181:786::-;3537:13;:11;:13::i;:::-;7507:21:::1;:19;:21::i;:::-;32288:1:::2;32274:16;;:2;:16;;::::0;32266:44:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;32363:1;32329:36;;32337:13;;;;;;;;;;;32329:36;;::::0;32321:71:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;32436:1;32411:15;:22;;;;:26;32403:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32482:16;32501:15;:22;;;;32482:41;;32549:9;32561:1;32549:13;;32544:311;32568:8;32564:1;:12;32544:311;;;32598:15;32616;32632:1;32616:18;;;;;;;;:::i;:::-;;;;;;;;;;32598:36;;32695:4;32653:47;;:13;;;;;;;;;;;:21;;;32675:7;32653:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;::::0;32649:195:::2;;32721:13;;;;;;;;;;;:30;;;32760:4;32767:2;32771:7;32721:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32816:2;32803:25;;;32820:7;32803:25;;;;;;:::i;:::-;;;;;;;;32649:195;32583:272;32578:3;;;;;;;32544:311;;;;32882:15;;32875:22;;;;:::i;:::-;32946:2;32923:36;;;32950:8;32923:36;;;;;;:::i;:::-;;;;;;;;32255:712;7551:20:::1;:18;:20::i;:::-;32181:786:::0;:::o;18695:46::-;;;;;;;;;;;;;;;;;:::o;18748:49::-;;;;;;;;;;;;;;;;;:::o;20791:107::-;3537:13;:11;:13::i;:::-;20885:4:::1;20861:13;;:29;;;;;;;;;;;;;;;;;;20791:107:::0;:::o;34410:411::-;34478:24;34504;34541:23;34567:11;:19;34579:6;34567:19;;;;;;;;;;;;;;;;34541:45;;34597:22;18927:1;34671;18927;34624:15;:43;;;;:::i;:::-;34623:49;;;;:::i;:::-;34622:79;;;;:::i;:::-;34597:104;;34748:15;34731:14;:32;;;;:::i;:::-;34712:51;;18853:15;34774:39;;34530:291;;34410:411;;;:::o;18579:33::-;;;;:::o;21588:506::-;3537:13;:11;:13::i;:::-;21702:1:::1;21684:8;;:15;;:19;21676:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21782:1;21748:36;;21756:13;;;;;;;;;;;21748:36;;::::0;21740:71:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21837:9;21849:1;21837:13;;21832:187;21856:8;;:15;;21852:1;:19;21832:187;;;21893:13;;;;;;;;;;;:26;;;21920:10;21940:4;21947:8;;21956:1;21947:11;;;;;;;:::i;:::-;;;;;;;;21893:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21974:15;21995:8;;22004:1;21995:11;;;;;;;:::i;:::-;;;;;;;;21974:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21873:3;;;;;;;21832:187;;;;22058:10;22044:42;;;22070:8;;:15;;22044:42;;;;;;:::i;:::-;;;;;;;;21588:506:::0;;:::o;18543:27::-;;;;:::o;31722:451::-;3537:13;:11;:13::i;:::-;7507:21:::1;:19;:21::i;:::-;31831:1:::2;31817:16;;:2;:16;;::::0;31809:44:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;31903:1;31872:33;;31880:10;;;;;;;;;;;31872:33;;::::0;31864:59:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;31944:15;31962:10;;;;;;;;;;;:20;;;31991:4;31962:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31944:53;;32026:1;32016:7;:11;32008:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;32081:10;;;;;;;;;;;:19;;;32101:2;32105:7;32081:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32153:2;32129:36;;;32157:7;32129:36;;;;;;:::i;:::-;;;;;;;;31798:375;7551:20:::1;:18;:20::i;:::-;31722:451:::0;:::o;31358:356::-;3537:13;:11;:13::i;:::-;7507:21:::1;:19;:21::i;:::-;31476:1:::2;31462:16;;:2;:16;;::::0;31454:44:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;31509:15;31527:21;31509:39;;31577:1;31567:7;:11;31559:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;31633:2;:11;;:20;31645:7;31633:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31694:2;31669:37;;;31698:7;31669:37;;;;;;:::i;:::-;;;;;;;;31443:271;7551:20:::1;:18;:20::i;:::-;31358:356:::0;:::o;19191:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33460:789::-;3537:13;:11;:13::i;:::-;7507:21:::1;:19;:21::i;:::-;33575:1:::2;33561:16;;:2;:16;;::::0;33553:44:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;33650:1;33616:36;;33624:13;;;;;;;;;;;33616:36;;::::0;33608:71:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;33692:10;33705:5;33692:18;;33726:9;33738:1;33726:13;;33721:308;33745:15;:22;;;;33741:1;:26;33721:308;;;33815:7;33793:15;33809:1;33793:18;;;;;;;;:::i;:::-;;;;;;;;;;:29:::0;33789:229:::2;;33851:4;33843:12;;33895:15;33936:1;33911:15;:22;;;;:26;;;;:::i;:::-;33895:43;;;;;;;;:::i;:::-;;;;;;;;;;33874:15;33890:1;33874:18;;;;;;;;:::i;:::-;;;;;;;;;:64;;;;33957:15;:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33997:5;;33789:229;33769:3;;;;;;;33721:308;;;;34091:4;34049:47;;:13;;;;;;;;;;;:21;;;34071:7;34049:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;34041:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34142:13;;;;;;;;;;;:30;;;34181:4;34188:2;34192:7;34142:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34229:2;34216:25;;;34233:7;34216:25;;;;;;:::i;:::-;;;;;;;;33542:707;7551:20:::1;:18;:20::i;:::-;33460:789:::0;;:::o;18968:28::-;;;;;;;;;;;;;:::o;18875:53::-;18927:1;18875:53;:::o;4326:103::-;3537:13;:11;:13::i;:::-;4391:30:::1;4418:1;4391:18;:30::i;:::-;4326:103::o:0;19453:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18619:30::-;;;;:::o;18937:24::-;;;;;;;;;;;;;:::o;3651:87::-;3697:7;3724:6;;;;;;;;;;;3717:13;;3651:87;:::o;18511:25::-;;;;:::o;18466:36::-;;;;:::o;33175:277::-;3537:13;:11;:13::i;:::-;33295:1:::1;33264:33;;33272:10;;;;;;;;;;;33264:33;;::::0;33256:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33373:6;33334:10;;;;;;;;;;;:20;;;33363:4;33334:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;33326:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33413:10;;;;;;;;;;;:19;;;33433:2;33437:6;33413:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33175:277:::0;;:::o;20527:144::-;3537:13;:11;:13::i;:::-;20615:1:::1;20604:8;:12;20596:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;20655:8;20644;:19;;;;20527:144:::0;:::o;18656:30::-;;;;:::o;20906:674::-;3537:13;:11;:13::i;:::-;20990:1:::1;20981:6;:10;20973:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;21078:1;21044:36;;21052:13;;;;;;;;;;;21044:36;;::::0;21036:71:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21128:22;21153:1;21128:26;;21180:9;21192:1;21180:13;;21175:267;21199:6;21195:1;:10;21175:267;;;21231:13;;;;;;;;;;;:26;;;21258:10;21278:4;21285:1;21231:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21227:204:::0;21407:8:::1;21227:204;21307:15;21328:1;21307:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21349:16;;;;;:::i;:::-;;;;21175:267;21207:3;;;;;;;21175:267;;;;21487:1;21470:14;:18;21462:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21545:10;21531:41;;;21557:14;21531:41;;;;;;:::i;:::-;;;;;;;;20962:618;20906:674:::0;:::o;19003:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20679:104::-;3537:13;:11;:13::i;:::-;20768:6:::1;20748:10;;:27;;;;;;;;;;;;;;;;;;20679:104:::0;:::o;35336:286::-;35419:21;35442:20;35464:18;35516;;35500:34;;35560:15;;35545:30;;35599:15;;35586:28;;35336:286;;;:::o;25718:1371::-;25773:23;25798:19;7507:21;:19;:21::i;:::-;25851:8:::1;;25838:9;:21;25830:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;25896:15;25963;25980:10;25992:16;26010:10;;25946:75;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25936:86;;;;;;25914:119;;25896:137;;26044:15;26072:5;26062:7;:15;;;;:::i;:::-;26044:33;;26090:10;;:12;;;;;;;;;:::i;:::-;;;;;;26113:11;:23;26125:10;26113:23;;;;;;;;;;;;;;;;:25;;;;;;;;;:::i;:::-;;;;;;26151:37;26177:10;26151:25;:37::i;:::-;26285:4;26275:7;:14;26271:257;;;26341:18;;;;;;;;;;;;;;;;::::0;::::1;;26388:1;26374:15;;26404:66;26419:10;26431:9;26442:11;26455:7;26464:5;26404:14;:66::i;:::-;26485:31;;;;26271:257;26555:4;26544:7;:15;26540:421;;26643:22;26657:7;26643:13;:22::i;:::-;26616:49;;;;;;;;26540:421;;;26698:4;26687:7;:15;26683:278;;26785:21;26798:7;26785:12;:21::i;:::-;26758:48;;;;;;;;26683:278;;;26930:19;26941:7;26930:10;:19::i;:::-;26903:46;;;;;;;;26683:278;26540:421;26973:66;26988:10;27000:9;27011:11;27024:7;27033:5;26973:14;:66::i;:::-;27050:31;;7539:1;7551:20:::0;:18;:20::i;:::-;25718:1371;;:::o;34829:141::-;34898:19;34937:17;:25;34955:6;34937:25;;;;;;;;;;;;;;;34930:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34829:141;;;:::o;4584:220::-;3537:13;:11;:13::i;:::-;4689:1:::1;4669:22;;:8;:22;;::::0;4665:93:::1;;4743:1;4715:31;;;;;;;;;;;:::i;:::-;;;;;;;;4665:93;4768:28;4787:8;4768:18;:28::i;:::-;4584:220:::0;:::o;34257:145::-;34330:19;34369:17;:25;34387:6;34369:25;;;;;;;;;;;;;;;34362:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34257:145;;;:::o;18806:62::-;18853:15;18806:62;:::o;34978:350::-;35059:21;35082:20;35104:16;35154:21;35138:37;;35232:1;35201:33;;35209:10;;;;;;;;;;;35201:33;;;:75;;35241:10;;;;;;;;;;;:20;;;35270:4;35241:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35201:75;;;35237:1;35201:75;35186:90;;35298:15;:22;;;;35287:33;;34978:350;;;:::o;3816:166::-;3887:12;:10;:12::i;:::-;3876:23;;:7;:5;:7::i;:::-;:23;;;3872:103;;3950:12;:10;:12::i;:::-;3923:40;;;;;;;;;;;:::i;:::-;;;;;;;;3872:103;3816:166::o;7587:293::-;6989:1;7721:7;;:19;7713:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6989:1;7854:7;:18;;;;7587:293::o;7888:213::-;6945:1;8071:7;:22;;;;7888:213::o;4964:191::-;5038:16;5057:6;;;;;;;;;;;5038:25;;5083:8;5074:6;;:17;;;;;;;;;;;;;;;;;;5138:8;5107:40;;5128:8;5107:40;;;;;;;;;;;;5027:128;4964:191;:::o;22419:2204::-;22490:23;22516:11;:19;22528:6;22516:19;;;;;;;;;;;;;;;;22490:45;;22607:1;18927;22560:15;:43;;;;:::i;:::-;:48;:71;;;;;22630:1;22612:15;:19;22560:71;22556:2060;;;22683:1;22652:33;;22660:10;;;;;;;;;;;22652:33;;;;:114;;;;;18853:15;22707:10;;;;;;;;;;;:20;;;22736:4;22707:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;22652:114;22648:1957;;;22805:12;22820:10;;;;;;;;;;;:19;;;22840:6;18853:15;22820:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22805:64;;22892:7;22888:1702;;;18853:15;22924;;:39;;;;;;;:::i;:::-;;;;;;;;18853:15;22986:12;;:36;;;;;;;:::i;:::-;;;;;;;;18853:15;23045:14;:22;23060:6;23045:22;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;23136:17;:25;23154:6;23136:25;;;;;;;;;;;;;;;23193:259;;;;;;;;23246:15;23193:259;;;;;;;;;;;;;;;;;;;;;;;;;18853:15;23193:259;;;;23419:5;23193:259;;;;;23136:339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23540:390;;;;;;;;23586:6;23540:390;;;;;;;;;;;;;;;;;;;;;;;;;;;18853:15;23540:390;;;;23767:15;23784:6;23750:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23740:67;;;;;;23732:76;;23540:390;;;;23846:15;23540:390;;;;23901:5;23540:390;;;;;23520:5;:17;23526:10;;23520:17;;;;;;;;;;;:410;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23975:6;23960:44;;;18853:15;23960:44;;;;;;:::i;:::-;;;;;;;;24050:6;24032:64;;;18853:15;24080;24032:64;;;;;;;:::i;:::-;;;;;;;;24148:6;24124:70;;;18853:15;24178;24124:70;;;;;;;:::i;:::-;;;;;;;;24317:10;;24283:6;24244:326;;;18853:15;24473;24490:6;24456:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24446:67;;;;;;24438:76;;24542:5;24244:326;;;;;;;;:::i;:::-;;;;;;;;22888:1702;22768:1837;22648:1957;22556:2060;22479:2144;22419:2204;:::o;30594:756::-;30732:17;:25;30750:6;30732:25;;;;;;;;;;;;;;;30777:195;;;;;;;;30818:15;30777:195;;;;30863:9;30777:195;;;;30904:11;30777:195;;;;30948:8;30777:195;;;;;30732:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31016:233;;;;;;;;31050:6;31016:233;;;;;;31082:9;31016:233;;;;31119:11;31016:233;;;;31153:7;31016:233;;;;31186:15;31016:233;;;;31229:8;31016:233;;;;;30996:5;:17;31002:10;;30996:17;;;;;;;;;;;:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31288:10;;31280:6;31267:75;;;31300:9;31311:11;31324:7;31333:8;31267:75;;;;;;;;;:::i;:::-;;;;;;;;30594:756;;;;;:::o;27097:1202::-;27155:23;27180:19;27212:9;27282;27259:7;27242:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;27232:46;;;;;;27224:55;;:67;;;;:::i;:::-;27212:79;;27302:11;27316:1;27302:15;;27333:9;27345:1;27333:13;;27328:935;27352:9;:16;;;;27348:1;:20;27328:935;;;27397:9;27407:1;27397:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27390:19;;;;;;;:::i;:::-;;;27432:3;27428:1;:7;27424:828;;;27480:1;27460:13;27474:1;27460:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;27456:88;;27522:1;27506:18;;;;;;;;;;;;;;;;;;;;;;;;;;;27456:88;27562:14;27579:13;27593:1;27579:16;;;;;;;;:::i;:::-;;;;;;;;;;27562:33;;27643:6;27618:21;:31;27614:623;;27675:9;27698:10;27690:24;;27722:6;27690:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27674:59;;;27760:4;27756:395;;;27809:6;27793:12;;:22;;;;;;;:::i;:::-;;;;;;;;27864:6;27842:18;;:28;;;;;;;:::i;:::-;;;;;;;;27927:6;27897:14;:26;27912:10;27897:26;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;27981:10;27965:35;;;27993:6;27965:35;;;;;;:::i;:::-;;;;;;;;28045:6;28027:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27756:395;28125:1;28109:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27614:623;28215:1;28199:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;27424:828;27370:3;;;;;;;27328:935;;;;28289:1;28273:18;;;;;;;;;;;;;;;;;;;;;;;;27097:1202;;;;:::o;28307:1157::-;28364:23;28389:19;28421:9;28490;28468:7;28451:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;28441:45;;;;;;28433:54;;:66;;;;:::i;:::-;28421:78;;28510:11;28524:1;28510:15;;28541:9;28553:1;28541:13;;28536:892;28560:8;:15;;;;28556:1;:19;28536:892;;;28604:8;28613:1;28604:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28597:18;;;;;;;:::i;:::-;;;28638:3;28634:1;:7;28630:787;;;28685:1;28666:12;28679:1;28666:15;;;;;;;;:::i;:::-;;;;;;;;;;:20;28662:87;;28727:1;28711:18;;;;;;;;;;;;;;;;;;;;;;;;;;;28662:87;28767:14;28784:12;28797:1;28784:15;;;;;;;;:::i;:::-;;;;;;;;;;28767:32;;28853:1;28822:33;;28830:10;;;;;;;;;;;28822:33;;;28818:57;;28873:1;28857:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;28818:57;28937:6;28898:10;;;;;;;;;;;:20;;;28927:4;28898:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;28894:508;;28968:7;28978:10;;;;;;;;;;;:19;;;28998:10;29010:6;28978:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28968:49;;29044:2;29040:276;;;29094:6;29075:15;;:25;;;;;;;:::i;:::-;;;;;;;;29147:10;29132:34;;;29159:6;29132:34;;;;;;:::i;:::-;;;;;;;;29210:6;29193:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29040:276;29290:1;29274:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28894:508;29380:1;29364:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;28630:787;28577:3;;;;;;;28536:892;;;;29454:1;29438:18;;;;;;;;;;;;;;;;;;;;;;;;28307:1157;;;;:::o;29472:1114::-;29527:23;29552:19;29584:9;29651;29631:7;29614:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;29604:43;;;;;;29596:52;;:64;;;;:::i;:::-;29584:76;;29671:11;29685:1;29671:15;;29702:9;29714:1;29702:13;;29697:853;29721:6;:13;;;;29717:1;:17;29697:853;;;29763:6;29770:1;29763:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29756:16;;;;;;;:::i;:::-;;;29795:3;29791:1;:7;29787:752;;;29828:1;29823;:6;29819:705;;29870:1;29854:18;;;;;;;;;;;;;;;;;;;;;;;;;;;29819:705;29951:1;29925:15;:22;;;;:27;29921:51;;29970:1;29954:18;;;;;;;;;;;;;;;;;;;;;;;;;;;29921:51;29995:15;30013:23;:21;:23::i;:::-;29995:41;;30157:4;30115:47;;:13;;;;;;;;;;;:21;;;30137:7;30115:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;30081:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;30288:13;;;;;;;;;;;:30;;;30327:4;30334:10;30346:7;30288:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30396:1;30377:15;;:20;;;;;;;:::i;:::-;;;;;;;;30438:10;30425:33;;;30450:7;30425:33;;;;;;:::i;:::-;;;;;;;;30496:7;30481:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;29787:752;29736:3;;;;;;;29697:853;;;;30576:1;30560:18;;;;;;;;;;;;;;;;;;;;;;;;29472:1114;;;;:::o;1660:98::-;1713:7;1740:10;1733:17;;1660:98;:::o;22102:309::-;22153:15;22214:1;22189:15;:22;;;;:26;22181:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22268:15;22284:1;22268:18;;;;;;;;:::i;:::-;;;;;;;;;;22258:28;;22328:15;22369:1;22344:15;:22;;;;:26;;;;:::i;:::-;22328:43;;;;;;;;:::i;:::-;;;;;;;;;;22307:15;22323:1;22307:18;;;;;;;;:::i;:::-;;;;;;;;;:64;;;;22382:15;:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22102:309;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:104::-;511:7;540:24;558:5;540:24;:::i;:::-;529:35;;466:104;;;:::o;576:138::-;657:32;683:5;657:32;:::i;:::-;650:5;647:43;637:71;;704:1;701;694:12;637:71;576:138;:::o;720:155::-;774:5;812:6;799:20;790:29;;828:41;863:5;828:41;:::i;:::-;720:155;;;;:::o;881:77::-;918:7;947:5;936:16;;881:77;;;:::o;964:122::-;1037:24;1055:5;1037:24;:::i;:::-;1030:5;1027:35;1017:63;;1076:1;1073;1066:12;1017:63;964:122;:::o;1092:139::-;1138:5;1176:6;1163:20;1154:29;;1192:33;1219:5;1192:33;:::i;:::-;1092:139;;;;:::o;1237:490::-;1313:6;1321;1370:2;1358:9;1349:7;1345:23;1341:32;1338:119;;;1376:79;;:::i;:::-;1338:119;1496:1;1521:61;1574:7;1565:6;1554:9;1550:22;1521:61;:::i;:::-;1511:71;;1467:125;1631:2;1657:53;1702:7;1693:6;1682:9;1678:22;1657:53;:::i;:::-;1647:63;;1602:118;1237:490;;;;;:::o;1733:96::-;1770:7;1799:24;1817:5;1799:24;:::i;:::-;1788:35;;1733:96;;;:::o;1835:122::-;1908:24;1926:5;1908:24;:::i;:::-;1901:5;1898:35;1888:63;;1947:1;1944;1937:12;1888:63;1835:122;:::o;1963:139::-;2009:5;2047:6;2034:20;2025:29;;2063:33;2090:5;2063:33;:::i;:::-;1963:139;;;;:::o;2108:117::-;2217:1;2214;2207:12;2231:117;2340:1;2337;2330:12;2354:117;2463:1;2460;2453:12;2490:552;2547:8;2557:6;2607:3;2600:4;2592:6;2588:17;2584:27;2574:122;;2615:79;;:::i;:::-;2574:122;2728:6;2715:20;2705:30;;2758:18;2750:6;2747:30;2744:117;;;2780:79;;:::i;:::-;2744:117;2894:4;2886:6;2882:17;2870:29;;2948:3;2940:4;2932:6;2928:17;2918:8;2914:32;2911:41;2908:128;;;2955:79;;:::i;:::-;2908:128;2490:552;;;;;:::o;3048:963::-;3145:6;3153;3161;3169;3177;3226:3;3214:9;3205:7;3201:23;3197:33;3194:120;;;3233:79;;:::i;:::-;3194:120;3353:1;3378:53;3423:7;3414:6;3403:9;3399:22;3378:53;:::i;:::-;3368:63;;3324:117;3480:2;3506:53;3551:7;3542:6;3531:9;3527:22;3506:53;:::i;:::-;3496:63;;3451:118;3608:2;3634:53;3679:7;3670:6;3659:9;3655:22;3634:53;:::i;:::-;3624:63;;3579:118;3764:2;3753:9;3749:18;3736:32;3795:18;3787:6;3784:30;3781:117;;;3817:79;;:::i;:::-;3781:117;3930:64;3986:7;3977:6;3966:9;3962:22;3930:64;:::i;:::-;3912:82;;;;3707:297;3048:963;;;;;;;;:::o;4017:149::-;4053:7;4093:66;4086:5;4082:78;4071:89;;4017:149;;;:::o;4172:115::-;4257:23;4274:5;4257:23;:::i;:::-;4252:3;4245:36;4172:115;;:::o;4293:218::-;4384:4;4422:2;4411:9;4407:18;4399:26;;4435:69;4501:1;4490:9;4486:17;4477:6;4435:69;:::i;:::-;4293:218;;;;:::o;4517:329::-;4576:6;4625:2;4613:9;4604:7;4600:23;4596:32;4593:119;;;4631:79;;:::i;:::-;4593:119;4751:1;4776:53;4821:7;4812:6;4801:9;4797:22;4776:53;:::i;:::-;4766:63;;4722:117;4517:329;;;;:::o;4852:118::-;4939:24;4957:5;4939:24;:::i;:::-;4934:3;4927:37;4852:118;;:::o;4976:222::-;5069:4;5107:2;5096:9;5092:18;5084:26;;5120:71;5188:1;5177:9;5173:17;5164:6;5120:71;:::i;:::-;4976:222;;;;:::o;5204:332::-;5325:4;5363:2;5352:9;5348:18;5340:26;;5376:71;5444:1;5433:9;5429:17;5420:6;5376:71;:::i;:::-;5457:72;5525:2;5514:9;5510:18;5501:6;5457:72;:::i;:::-;5204:332;;;;;:::o;5559:568::-;5632:8;5642:6;5692:3;5685:4;5677:6;5673:17;5669:27;5659:122;;5700:79;;:::i;:::-;5659:122;5813:6;5800:20;5790:30;;5843:18;5835:6;5832:30;5829:117;;;5865:79;;:::i;:::-;5829:117;5979:4;5971:6;5967:17;5955:29;;6033:3;6025:4;6017:6;6013:17;6003:8;5999:32;5996:41;5993:128;;;6040:79;;:::i;:::-;5993:128;5559:568;;;;;:::o;6133:559::-;6219:6;6227;6276:2;6264:9;6255:7;6251:23;6247:32;6244:119;;;6282:79;;:::i;:::-;6244:119;6430:1;6419:9;6415:17;6402:31;6460:18;6452:6;6449:30;6446:117;;;6482:79;;:::i;:::-;6446:117;6595:80;6667:7;6658:6;6647:9;6643:22;6595:80;:::i;:::-;6577:98;;;;6373:312;6133:559;;;;;:::o;6698:345::-;6765:6;6814:2;6802:9;6793:7;6789:23;6785:32;6782:119;;;6820:79;;:::i;:::-;6782:119;6940:1;6965:61;7018:7;7009:6;6998:9;6994:22;6965:61;:::i;:::-;6955:71;;6911:125;6698:345;;;;:::o;7049:474::-;7117:6;7125;7174:2;7162:9;7153:7;7149:23;7145:32;7142:119;;;7180:79;;:::i;:::-;7142:119;7300:1;7325:53;7370:7;7361:6;7350:9;7346:22;7325:53;:::i;:::-;7315:63;;7271:117;7427:2;7453:53;7498:7;7489:6;7478:9;7474:22;7453:53;:::i;:::-;7443:63;;7398:118;7049:474;;;;;:::o;7529:99::-;7581:6;7615:5;7609:12;7599:22;;7529:99;;;:::o;7634:169::-;7718:11;7752:6;7747:3;7740:19;7792:4;7787:3;7783:14;7768:29;;7634:169;;;;:::o;7809:139::-;7898:6;7893:3;7888;7882:23;7939:1;7930:6;7925:3;7921:16;7914:27;7809:139;;;:::o;7954:102::-;7995:6;8046:2;8042:7;8037:2;8030:5;8026:14;8022:28;8012:38;;7954:102;;;:::o;8062:377::-;8150:3;8178:39;8211:5;8178:39;:::i;:::-;8233:71;8297:6;8292:3;8233:71;:::i;:::-;8226:78;;8313:65;8371:6;8366:3;8359:4;8352:5;8348:16;8313:65;:::i;:::-;8403:29;8425:6;8403:29;:::i;:::-;8398:3;8394:39;8387:46;;8154:285;8062:377;;;;:::o;8445:90::-;8479:7;8522:5;8515:13;8508:21;8497:32;;8445:90;;;:::o;8541:109::-;8622:21;8637:5;8622:21;:::i;:::-;8617:3;8610:34;8541:109;;:::o;8656:632::-;8847:4;8885:3;8874:9;8870:19;8862:27;;8899:71;8967:1;8956:9;8952:17;8943:6;8899:71;:::i;:::-;9017:9;9011:4;9007:20;9002:2;8991:9;8987:18;8980:48;9045:78;9118:4;9109:6;9045:78;:::i;:::-;9037:86;;9133:72;9201:2;9190:9;9186:18;9177:6;9133:72;:::i;:::-;9215:66;9277:2;9266:9;9262:18;9253:6;9215:66;:::i;:::-;8656:632;;;;;;;:::o;9294:60::-;9322:3;9343:5;9336:12;;9294:60;;;:::o;9360:142::-;9410:9;9443:53;9461:34;9470:24;9488:5;9470:24;:::i;:::-;9461:34;:::i;:::-;9443:53;:::i;:::-;9430:66;;9360:142;;;:::o;9508:126::-;9558:9;9591:37;9622:5;9591:37;:::i;:::-;9578:50;;9508:126;;;:::o;9640:141::-;9705:9;9738:37;9769:5;9738:37;:::i;:::-;9725:50;;9640:141;;;:::o;9787:161::-;9889:52;9935:5;9889:52;:::i;:::-;9884:3;9877:65;9787:161;;:::o;9954:252::-;10062:4;10100:2;10089:9;10085:18;10077:26;;10113:86;10196:1;10185:9;10181:17;10172:6;10113:86;:::i;:::-;9954:252;;;;:::o;10212:329::-;10271:6;10320:2;10308:9;10299:7;10295:23;10291:32;10288:119;;;10326:79;;:::i;:::-;10288:119;10446:1;10471:53;10516:7;10507:6;10496:9;10492:22;10471:53;:::i;:::-;10461:63;;10417:117;10212:329;;;;:::o;10547:118::-;10634:24;10652:5;10634:24;:::i;:::-;10629:3;10622:37;10547:118;;:::o;10671:854::-;10918:4;10956:3;10945:9;10941:19;10933:27;;10970:71;11038:1;11027:9;11023:17;11014:6;10970:71;:::i;:::-;11088:9;11082:4;11078:20;11073:2;11062:9;11058:18;11051:48;11116:78;11189:4;11180:6;11116:78;:::i;:::-;11108:86;;11204:72;11272:2;11261:9;11257:18;11248:6;11204:72;:::i;:::-;11286;11354:2;11343:9;11339:18;11330:6;11286:72;:::i;:::-;11368:73;11436:3;11425:9;11421:19;11412:6;11368:73;:::i;:::-;11451:67;11513:3;11502:9;11498:19;11489:6;11451:67;:::i;:::-;10671:854;;;;;;;;;:::o;11531:140::-;11595:9;11628:37;11659:5;11628:37;:::i;:::-;11615:50;;11531:140;;;:::o;11677:159::-;11778:51;11823:5;11778:51;:::i;:::-;11773:3;11766:64;11677:159;;:::o;11842:250::-;11949:4;11987:2;11976:9;11972:18;11964:26;;12000:85;12082:1;12071:9;12067:17;12058:6;12000:85;:::i;:::-;11842:250;;;;:::o;12098:222::-;12191:4;12229:2;12218:9;12214:18;12206:26;;12242:71;12310:1;12299:9;12295:17;12286:6;12242:71;:::i;:::-;12098:222;;;;:::o;12326:442::-;12475:4;12513:2;12502:9;12498:18;12490:26;;12526:71;12594:1;12583:9;12579:17;12570:6;12526:71;:::i;:::-;12607:72;12675:2;12664:9;12660:18;12651:6;12607:72;:::i;:::-;12689;12757:2;12746:9;12742:18;12733:6;12689:72;:::i;:::-;12326:442;;;;;;:::o;12774:423::-;12915:4;12953:2;12942:9;12938:18;12930:26;;13002:9;12996:4;12992:20;12988:1;12977:9;12973:17;12966:47;13030:78;13103:4;13094:6;13030:78;:::i;:::-;13022:86;;13118:72;13186:2;13175:9;13171:18;13162:6;13118:72;:::i;:::-;12774:423;;;;;:::o;13203:141::-;13297:6;13331:5;13325:12;13315:22;;13203:141;;;:::o;13350:211::-;13476:11;13510:6;13505:3;13498:19;13550:4;13545:3;13541:14;13526:29;;13350:211;;;;:::o;13567:159::-;13661:4;13684:3;13676:11;;13714:4;13709:3;13705:14;13697:22;;13567:159;;;:::o;13732:108::-;13809:24;13827:5;13809:24;:::i;:::-;13804:3;13797:37;13732:108;;:::o;13846:159::-;13920:11;13954:6;13949:3;13942:19;13994:4;13989:3;13985:14;13970:29;;13846:159;;;;:::o;14011:357::-;14089:3;14117:39;14150:5;14117:39;:::i;:::-;14172:61;14226:6;14221:3;14172:61;:::i;:::-;14165:68;;14242:65;14300:6;14295:3;14288:4;14281:5;14277:16;14242:65;:::i;:::-;14332:29;14354:6;14332:29;:::i;:::-;14327:3;14323:39;14316:46;;14093:275;14011:357;;;;:::o;14374:99::-;14445:21;14460:5;14445:21;:::i;:::-;14440:3;14433:34;14374:99;;:::o;14557:967::-;14670:3;14706:4;14701:3;14697:14;14798:4;14791:5;14787:16;14781:23;14817:63;14874:4;14869:3;14865:14;14851:12;14817:63;:::i;:::-;14721:169;14977:4;14970:5;14966:16;14960:23;15030:3;15024:4;15020:14;15013:4;15008:3;15004:14;14997:38;15056:73;15124:4;15110:12;15056:73;:::i;:::-;15048:81;;14900:240;15229:4;15222:5;15218:16;15212:23;15248:63;15305:4;15300:3;15296:14;15282:12;15248:63;:::i;:::-;15150:171;15411:4;15404:5;15400:16;15394:23;15430:57;15481:4;15476:3;15472:14;15458:12;15430:57;:::i;:::-;15331:166;15514:4;15507:11;;14675:849;14557:967;;;;:::o;15530:264::-;15653:10;15688:100;15784:3;15776:6;15688:100;:::i;:::-;15674:114;;15530:264;;;;:::o;15800:140::-;15897:4;15929;15924:3;15920:14;15912:22;;15800:140;;;:::o;16028:1127::-;16201:3;16230:81;16305:5;16230:81;:::i;:::-;16327:113;16433:6;16428:3;16327:113;:::i;:::-;16320:120;;16466:3;16511:4;16503:6;16499:17;16494:3;16490:27;16541:83;16618:5;16541:83;:::i;:::-;16647:7;16678:1;16663:447;16688:6;16685:1;16682:13;16663:447;;;16759:9;16753:4;16749:20;16744:3;16737:33;16810:6;16804:13;16838:118;16951:4;16936:13;16838:118;:::i;:::-;16830:126;;16979:87;17059:6;16979:87;:::i;:::-;16969:97;;17095:4;17090:3;17086:14;17079:21;;16723:387;16710:1;16707;16703:9;16698:14;;16663:447;;;16667:14;17126:4;17119:11;;17146:3;17139:10;;16206:949;;;;;16028:1127;;;;:::o;17161:481::-;17358:4;17396:2;17385:9;17381:18;17373:26;;17445:9;17439:4;17435:20;17431:1;17420:9;17416:17;17409:47;17473:162;17630:4;17621:6;17473:162;:::i;:::-;17465:170;;17161:481;;;;:::o;17648:170::-;17788:22;17784:1;17776:6;17772:14;17765:46;17648:170;:::o;17824:366::-;17966:3;17987:67;18051:2;18046:3;17987:67;:::i;:::-;17980:74;;18063:93;18152:3;18063:93;:::i;:::-;18181:2;18176:3;18172:12;18165:19;;17824:366;;;:::o;18196:419::-;18362:4;18400:2;18389:9;18385:18;18377:26;;18449:9;18443:4;18439:20;18435:1;18424:9;18420:17;18413:47;18477:131;18603:4;18477:131;:::i;:::-;18469:139;;18196:419;;;:::o;18621:165::-;18761:17;18757:1;18749:6;18745:14;18738:41;18621:165;:::o;18792:366::-;18934:3;18955:67;19019:2;19014:3;18955:67;:::i;:::-;18948:74;;19031:93;19120:3;19031:93;:::i;:::-;19149:2;19144:3;19140:12;19133:19;;18792:366;;;:::o;19164:419::-;19330:4;19368:2;19357:9;19353:18;19345:26;;19417:9;19411:4;19407:20;19403:1;19392:9;19388:17;19381:47;19445:131;19571:4;19445:131;:::i;:::-;19437:139;;19164:419;;;:::o;19589:172::-;19729:24;19725:1;19717:6;19713:14;19706:48;19589:172;:::o;19767:366::-;19909:3;19930:67;19994:2;19989:3;19930:67;:::i;:::-;19923:74;;20006:93;20095:3;20006:93;:::i;:::-;20124:2;20119:3;20115:12;20108:19;;19767:366;;;:::o;20139:419::-;20305:4;20343:2;20332:9;20328:18;20320:26;;20392:9;20386:4;20382:20;20378:1;20367:9;20363:17;20356:47;20420:131;20546:4;20420:131;:::i;:::-;20412:139;;20139:419;;;:::o;20564:169::-;20704:21;20700:1;20692:6;20688:14;20681:45;20564:169;:::o;20739:366::-;20881:3;20902:67;20966:2;20961:3;20902:67;:::i;:::-;20895:74;;20978:93;21067:3;20978:93;:::i;:::-;21096:2;21091:3;21087:12;21080:19;;20739:366;;;:::o;21111:419::-;21277:4;21315:2;21304:9;21300:18;21292:26;;21364:9;21358:4;21354:20;21350:1;21339:9;21335:17;21328:47;21392:131;21518:4;21392:131;:::i;:::-;21384:139;;21111:419;;;:::o;21536:180::-;21584:77;21581:1;21574:88;21681:4;21678:1;21671:15;21705:4;21702:1;21695:15;21722:143;21779:5;21810:6;21804:13;21795:22;;21826:33;21853:5;21826:33;:::i;:::-;21722:143;;;;:::o;21871:351::-;21941:6;21990:2;21978:9;21969:7;21965:23;21961:32;21958:119;;;21996:79;;:::i;:::-;21958:119;22116:1;22141:64;22197:7;22188:6;22177:9;22173:22;22141:64;:::i;:::-;22131:74;;22087:128;21871:351;;;;:::o;22228:442::-;22377:4;22415:2;22404:9;22400:18;22392:26;;22428:71;22496:1;22485:9;22481:17;22472:6;22428:71;:::i;:::-;22509:72;22577:2;22566:9;22562:18;22553:6;22509:72;:::i;:::-;22591;22659:2;22648:9;22644:18;22635:6;22591:72;:::i;:::-;22228:442;;;;;;:::o;22676:180::-;22724:77;22721:1;22714:88;22821:4;22818:1;22811:15;22845:4;22842:1;22835:15;22862:180;22910:77;22907:1;22900:88;23007:4;23004:1;22997:15;23031:4;23028:1;23021:15;23048:185;23088:1;23105:20;23123:1;23105:20;:::i;:::-;23100:25;;23139:20;23157:1;23139:20;:::i;:::-;23134:25;;23178:1;23168:35;;23183:18;;:::i;:::-;23168:35;23225:1;23222;23218:9;23213:14;;23048:185;;;;:::o;23239:191::-;23279:3;23298:20;23316:1;23298:20;:::i;:::-;23293:25;;23332:20;23350:1;23332:20;:::i;:::-;23327:25;;23375:1;23372;23368:9;23361:16;;23396:3;23393:1;23390:10;23387:36;;;23403:18;;:::i;:::-;23387:36;23239:191;;;;:::o;23436:410::-;23476:7;23499:20;23517:1;23499:20;:::i;:::-;23494:25;;23533:20;23551:1;23533:20;:::i;:::-;23528:25;;23588:1;23585;23581:9;23610:30;23628:11;23610:30;:::i;:::-;23599:41;;23789:1;23780:7;23776:15;23773:1;23770:22;23750:1;23743:9;23723:83;23700:139;;23819:18;;:::i;:::-;23700:139;23484:362;23436:410;;;;:::o;23852:194::-;23892:4;23912:20;23930:1;23912:20;:::i;:::-;23907:25;;23946:20;23964:1;23946:20;:::i;:::-;23941:25;;23990:1;23987;23983:9;23975:17;;24014:1;24008:4;24005:11;24002:37;;;24019:18;;:::i;:::-;24002:37;23852:194;;;;:::o;24052:171::-;24192:23;24188:1;24180:6;24176:14;24169:47;24052:171;:::o;24229:366::-;24371:3;24392:67;24456:2;24451:3;24392:67;:::i;:::-;24385:74;;24468:93;24557:3;24468:93;:::i;:::-;24586:2;24581:3;24577:12;24570:19;;24229:366;;;:::o;24601:419::-;24767:4;24805:2;24794:9;24790:18;24782:26;;24854:9;24848:4;24844:20;24840:1;24829:9;24825:17;24818:47;24882:131;25008:4;24882:131;:::i;:::-;24874:139;;24601:419;;;:::o;25026:163::-;25166:15;25162:1;25154:6;25150:14;25143:39;25026:163;:::o;25195:366::-;25337:3;25358:67;25422:2;25417:3;25358:67;:::i;:::-;25351:74;;25434:93;25523:3;25434:93;:::i;:::-;25552:2;25547:3;25543:12;25536:19;;25195:366;;;:::o;25567:419::-;25733:4;25771:2;25760:9;25756:18;25748:26;;25820:9;25814:4;25810:20;25806:1;25795:9;25791:17;25784:47;25848:131;25974:4;25848:131;:::i;:::-;25840:139;;25567:419;;;:::o;25992:143::-;26049:5;26080:6;26074:13;26065:22;;26096:33;26123:5;26096:33;:::i;:::-;25992:143;;;;:::o;26141:351::-;26211:6;26260:2;26248:9;26239:7;26235:23;26231:32;26228:119;;;26266:79;;:::i;:::-;26228:119;26386:1;26411:64;26467:7;26458:6;26447:9;26443:22;26411:64;:::i;:::-;26401:74;;26357:128;26141:351;;;;:::o;26498:178::-;26638:30;26634:1;26626:6;26622:14;26615:54;26498:178;:::o;26682:366::-;26824:3;26845:67;26909:2;26904:3;26845:67;:::i;:::-;26838:74;;26921:93;27010:3;26921:93;:::i;:::-;27039:2;27034:3;27030:12;27023:19;;26682:366;;;:::o;27054:419::-;27220:4;27258:2;27247:9;27243:18;27235:26;;27307:9;27301:4;27297:20;27293:1;27282:9;27278:17;27271:47;27335:131;27461:4;27335:131;:::i;:::-;27327:139;;27054:419;;;:::o;27479:332::-;27600:4;27638:2;27627:9;27623:18;27615:26;;27651:71;27719:1;27708:9;27704:17;27695:6;27651:71;:::i;:::-;27732:72;27800:2;27789:9;27785:18;27776:6;27732:72;:::i;:::-;27479:332;;;;;:::o;27817:116::-;27887:21;27902:5;27887:21;:::i;:::-;27880:5;27877:32;27867:60;;27923:1;27920;27913:12;27867:60;27817:116;:::o;27939:137::-;27993:5;28024:6;28018:13;28009:22;;28040:30;28064:5;28040:30;:::i;:::-;27939:137;;;;:::o;28082:345::-;28149:6;28198:2;28186:9;28177:7;28173:23;28169:32;28166:119;;;28204:79;;:::i;:::-;28166:119;28324:1;28349:61;28402:7;28393:6;28382:9;28378:22;28349:61;:::i;:::-;28339:71;;28295:125;28082:345;;;;:::o;28433:179::-;28573:31;28569:1;28561:6;28557:14;28550:55;28433:179;:::o;28618:366::-;28760:3;28781:67;28845:2;28840:3;28781:67;:::i;:::-;28774:74;;28857:93;28946:3;28857:93;:::i;:::-;28975:2;28970:3;28966:12;28959:19;;28618:366;;;:::o;28990:419::-;29156:4;29194:2;29183:9;29179:18;29171:26;;29243:9;29237:4;29233:20;29229:1;29218:9;29214:17;29207:47;29271:131;29397:4;29271:131;:::i;:::-;29263:139;;28990:419;;;:::o;29415:180::-;29463:77;29460:1;29453:88;29560:4;29557:1;29550:15;29584:4;29581:1;29574:15;29601:320;29645:6;29682:1;29676:4;29672:12;29662:22;;29729:1;29723:4;29719:12;29750:18;29740:81;;29806:4;29798:6;29794:17;29784:27;;29740:81;29868:2;29860:6;29857:14;29837:18;29834:38;29831:84;;29887:18;;:::i;:::-;29831:84;29652:269;29601:320;;;:::o;29927:180::-;29975:77;29972:1;29965:88;30072:4;30069:1;30062:15;30096:4;30093:1;30086:15;30113:180;30253:32;30249:1;30241:6;30237:14;30230:56;30113:180;:::o;30299:366::-;30441:3;30462:67;30526:2;30521:3;30462:67;:::i;:::-;30455:74;;30538:93;30627:3;30538:93;:::i;:::-;30656:2;30651:3;30647:12;30640:19;;30299:366;;;:::o;30671:419::-;30837:4;30875:2;30864:9;30860:18;30852:26;;30924:9;30918:4;30914:20;30910:1;30899:9;30895:17;30888:47;30952:131;31078:4;30952:131;:::i;:::-;30944:139;;30671:419;;;:::o;31096:168::-;31236:20;31232:1;31224:6;31220:14;31213:44;31096:168;:::o;31270:366::-;31412:3;31433:67;31497:2;31492:3;31433:67;:::i;:::-;31426:74;;31509:93;31598:3;31509:93;:::i;:::-;31627:2;31622:3;31618:12;31611:19;;31270:366;;;:::o;31642:419::-;31808:4;31846:2;31835:9;31831:18;31823:26;;31895:9;31889:4;31885:20;31881:1;31870:9;31866:17;31859:47;31923:131;32049:4;31923:131;:::i;:::-;31915:139;;31642:419;;;:::o;32067:162::-;32207:14;32203:1;32195:6;32191:14;32184:38;32067:162;:::o;32235:366::-;32377:3;32398:67;32462:2;32457:3;32398:67;:::i;:::-;32391:74;;32474:93;32563:3;32474:93;:::i;:::-;32592:2;32587:3;32583:12;32576:19;;32235:366;;;:::o;32607:419::-;32773:4;32811:2;32800:9;32796:18;32788:26;;32860:9;32854:4;32850:20;32846:1;32835:9;32831:17;32824:47;32888:131;33014:4;32888:131;:::i;:::-;32880:139;;32607:419;;;:::o;33032:179::-;33172:31;33168:1;33160:6;33156:14;33149:55;33032:179;:::o;33217:366::-;33359:3;33380:67;33444:2;33439:3;33380:67;:::i;:::-;33373:74;;33456:93;33545:3;33456:93;:::i;:::-;33574:2;33569:3;33565:12;33558:19;;33217:366;;;:::o;33589:419::-;33755:4;33793:2;33782:9;33778:18;33770:26;;33842:9;33836:4;33832:20;33828:1;33817:9;33813:17;33806:47;33870:131;33996:4;33870:131;:::i;:::-;33862:139;;33589:419;;;:::o;34014:233::-;34053:3;34076:24;34094:5;34076:24;:::i;:::-;34067:33;;34122:66;34115:5;34112:77;34109:103;;34192:18;;:::i;:::-;34109:103;34239:1;34232:5;34228:13;34221:20;;34014:233;;;:::o;34253:172::-;34393:24;34389:1;34381:6;34377:14;34370:48;34253:172;:::o;34431:366::-;34573:3;34594:67;34658:2;34653:3;34594:67;:::i;:::-;34587:74;;34670:93;34759:3;34670:93;:::i;:::-;34788:2;34783:3;34779:12;34772:19;;34431:366;;;:::o;34803:419::-;34969:4;35007:2;34996:9;34992:18;34984:26;;35056:9;35050:4;35046:20;35042:1;35031:9;35027:17;35020:47;35084:131;35210:4;35084:131;:::i;:::-;35076:139;;34803:419;;;:::o;35228:169::-;35368:21;35364:1;35356:6;35352:14;35345:45;35228:169;:::o;35403:366::-;35545:3;35566:67;35630:2;35625:3;35566:67;:::i;:::-;35559:74;;35642:93;35731:3;35642:93;:::i;:::-;35760:2;35755:3;35751:12;35744:19;;35403:366;;;:::o;35775:419::-;35941:4;35979:2;35968:9;35964:18;35956:26;;36028:9;36022:4;36018:20;36014:1;36003:9;35999:17;35992:47;36056:131;36182:4;36056:131;:::i;:::-;36048:139;;35775:419;;;:::o;36200:79::-;36239:7;36268:5;36257:16;;36200:79;;;:::o;36285:157::-;36390:45;36410:24;36428:5;36410:24;:::i;:::-;36390:45;:::i;:::-;36385:3;36378:58;36285:157;;:::o;36448:94::-;36481:8;36529:5;36525:2;36521:14;36500:35;;36448:94;;;:::o;36548:::-;36587:7;36616:20;36630:5;36616:20;:::i;:::-;36605:31;;36548:94;;;:::o;36648:100::-;36687:7;36716:26;36736:5;36716:26;:::i;:::-;36705:37;;36648:100;;;:::o;36754:157::-;36859:45;36879:24;36897:5;36879:24;:::i;:::-;36859:45;:::i;:::-;36854:3;36847:58;36754:157;;:::o;36917:679::-;37113:3;37128:75;37199:3;37190:6;37128:75;:::i;:::-;37228:2;37223:3;37219:12;37212:19;;37241:75;37312:3;37303:6;37241:75;:::i;:::-;37341:2;37336:3;37332:12;37325:19;;37354:75;37425:3;37416:6;37354:75;:::i;:::-;37454:2;37449:3;37445:12;37438:19;;37467:75;37538:3;37529:6;37467:75;:::i;:::-;37567:2;37562:3;37558:12;37551:19;;37587:3;37580:10;;36917:679;;;;;;;:::o;37602:176::-;37634:1;37651:20;37669:1;37651:20;:::i;:::-;37646:25;;37685:20;37703:1;37685:20;:::i;:::-;37680:25;;37724:1;37714:35;;37729:18;;:::i;:::-;37714:35;37770:1;37767;37763:9;37758:14;;37602:176;;;;:::o;37784:181::-;37924:33;37920:1;37912:6;37908:14;37901:57;37784:181;:::o;37971:366::-;38113:3;38134:67;38198:2;38193:3;38134:67;:::i;:::-;38127:74;;38210:93;38299:3;38210:93;:::i;:::-;38328:2;38323:3;38319:12;38312:19;;37971:366;;;:::o;38343:419::-;38509:4;38547:2;38536:9;38532:18;38524:26;;38596:9;38590:4;38586:20;38582:1;38571:9;38567:17;38560:47;38624:131;38750:4;38624:131;:::i;:::-;38616:139;;38343:419;;;:::o;38768:180::-;38816:77;38813:1;38806:88;38913:4;38910:1;38903:15;38937:4;38934:1;38927:15;38954:141;39003:4;39026:3;39018:11;;39049:3;39046:1;39039:14;39083:4;39080:1;39070:18;39062:26;;38954:141;;;:::o;39101:93::-;39138:6;39185:2;39180;39173:5;39169:14;39165:23;39155:33;;39101:93;;;:::o;39200:107::-;39244:8;39294:5;39288:4;39284:16;39263:37;;39200:107;;;;:::o;39313:393::-;39382:6;39432:1;39420:10;39416:18;39455:97;39485:66;39474:9;39455:97;:::i;:::-;39573:39;39603:8;39592:9;39573:39;:::i;:::-;39561:51;;39645:4;39641:9;39634:5;39630:21;39621:30;;39694:4;39684:8;39680:19;39673:5;39670:30;39660:40;;39389:317;;39313:393;;;;;:::o;39712:142::-;39762:9;39795:53;39813:34;39822:24;39840:5;39822:24;:::i;:::-;39813:34;:::i;:::-;39795:53;:::i;:::-;39782:66;;39712:142;;;:::o;39860:75::-;39903:3;39924:5;39917:12;;39860:75;;;:::o;39941:269::-;40051:39;40082:7;40051:39;:::i;:::-;40112:91;40161:41;40185:16;40161:41;:::i;:::-;40153:6;40146:4;40140:11;40112:91;:::i;:::-;40106:4;40099:105;40017:193;39941:269;;;:::o;40216:73::-;40261:3;40282:1;40275:8;;40216:73;:::o;40295:189::-;40372:32;;:::i;:::-;40413:65;40471:6;40463;40457:4;40413:65;:::i;:::-;40348:136;40295:189;;:::o;40490:186::-;40550:120;40567:3;40560:5;40557:14;40550:120;;;40621:39;40658:1;40651:5;40621:39;:::i;:::-;40594:1;40587:5;40583:13;40574:22;;40550:120;;;40490:186;;:::o;40682:543::-;40783:2;40778:3;40775:11;40772:446;;;40817:38;40849:5;40817:38;:::i;:::-;40901:29;40919:10;40901:29;:::i;:::-;40891:8;40887:44;41084:2;41072:10;41069:18;41066:49;;;41105:8;41090:23;;41066:49;41128:80;41184:22;41202:3;41184:22;:::i;:::-;41174:8;41170:37;41157:11;41128:80;:::i;:::-;40787:431;;40772:446;40682:543;;;:::o;41231:117::-;41285:8;41335:5;41329:4;41325:16;41304:37;;41231:117;;;;:::o;41354:169::-;41398:6;41431:51;41479:1;41475:6;41467:5;41464:1;41460:13;41431:51;:::i;:::-;41427:56;41512:4;41506;41502:15;41492:25;;41405:118;41354:169;;;;:::o;41528:295::-;41604:4;41750:29;41775:3;41769:4;41750:29;:::i;:::-;41742:37;;41812:3;41809:1;41805:11;41799:4;41796:21;41788:29;;41528:295;;;;:::o;41828:1395::-;41945:37;41978:3;41945:37;:::i;:::-;42047:18;42039:6;42036:30;42033:56;;;42069:18;;:::i;:::-;42033:56;42113:38;42145:4;42139:11;42113:38;:::i;:::-;42198:67;42258:6;42250;42244:4;42198:67;:::i;:::-;42292:1;42316:4;42303:17;;42348:2;42340:6;42337:14;42365:1;42360:618;;;;43022:1;43039:6;43036:77;;;43088:9;43083:3;43079:19;43073:26;43064:35;;43036:77;43139:67;43199:6;43192:5;43139:67;:::i;:::-;43133:4;43126:81;42995:222;42330:887;;42360:618;42412:4;42408:9;42400:6;42396:22;42446:37;42478:4;42446:37;:::i;:::-;42505:1;42519:208;42533:7;42530:1;42527:14;42519:208;;;42612:9;42607:3;42603:19;42597:26;42589:6;42582:42;42663:1;42655:6;42651:14;42641:24;;42710:2;42699:9;42695:18;42682:31;;42556:4;42553:1;42549:12;42544:17;;42519:208;;;42755:6;42746:7;42743:19;42740:179;;;42813:9;42808:3;42804:19;42798:26;42856:48;42898:4;42890:6;42886:17;42875:9;42856:48;:::i;:::-;42848:6;42841:64;42763:156;42740:179;42965:1;42961;42953:6;42949:14;42945:22;42939:4;42932:36;42367:611;;;42330:887;;41920:1303;;;41828:1395;;:::o;43229:148::-;43331:11;43368:3;43353:18;;43229:148;;;;:::o;43383:161::-;43523:13;43519:1;43511:6;43507:14;43500:37;43383:161;:::o;43550:402::-;43710:3;43731:85;43813:2;43808:3;43731:85;:::i;:::-;43724:92;;43825:93;43914:3;43825:93;:::i;:::-;43943:2;43938:3;43934:12;43927:19;;43550:402;;;:::o;43958:663::-;44199:3;44214:75;44285:3;44276:6;44214:75;:::i;:::-;44314:2;44309:3;44305:12;44298:19;;44327:75;44398:3;44389:6;44327:75;:::i;:::-;44427:2;44422:3;44418:12;44411:19;;44447:148;44591:3;44447:148;:::i;:::-;44440:155;;44612:3;44605:10;;43958:663;;;;;:::o;44627:155::-;44767:7;44763:1;44755:6;44751:14;44744:31;44627:155;:::o;44788:365::-;44930:3;44951:66;45015:1;45010:3;44951:66;:::i;:::-;44944:73;;45026:93;45115:3;45026:93;:::i;:::-;45144:2;45139:3;45135:12;45128:19;;44788:365;;;:::o;45159:738::-;45403:4;45441:3;45430:9;45426:19;45418:27;;45491:9;45485:4;45481:20;45477:1;45466:9;45462:17;45455:47;45519:131;45645:4;45519:131;:::i;:::-;45511:139;;45660:72;45728:2;45717:9;45713:18;45704:6;45660:72;:::i;:::-;45742;45810:2;45799:9;45795:18;45786:6;45742:72;:::i;:::-;45824:66;45886:2;45875:9;45871:18;45862:6;45824:66;:::i;:::-;45159:738;;;;;;:::o;45903:632::-;46094:4;46132:3;46121:9;46117:19;46109:27;;46182:9;46176:4;46172:20;46168:1;46157:9;46153:17;46146:47;46210:78;46283:4;46274:6;46210:78;:::i;:::-;46202:86;;46298:72;46366:2;46355:9;46351:18;46342:6;46298:72;:::i;:::-;46380;46448:2;46437:9;46433:18;46424:6;46380:72;:::i;:::-;46462:66;46524:2;46513:9;46509:18;46500:6;46462:66;:::i;:::-;45903:632;;;;;;;:::o;46541:156::-;46681:8;46677:1;46669:6;46665:14;46658:32;46541:156;:::o;46703:400::-;46863:3;46884:84;46966:1;46961:3;46884:84;:::i;:::-;46877:91;;46977:93;47066:3;46977:93;:::i;:::-;47095:1;47090:3;47086:11;47079:18;;46703:400;;;:::o;47109:522::-;47322:3;47337:75;47408:3;47399:6;47337:75;:::i;:::-;47437:2;47432:3;47428:12;47421:19;;47457:148;47601:3;47457:148;:::i;:::-;47450:155;;47622:3;47615:10;;47109:522;;;;:::o;47637:147::-;47738:11;47775:3;47760:18;;47637:147;;;;:::o;47790:114::-;;:::o;47910:398::-;48069:3;48090:83;48171:1;48166:3;48090:83;:::i;:::-;48083:90;;48182:93;48271:3;48182:93;:::i;:::-;48300:1;48295:3;48291:11;48284:18;;47910:398;;;:::o;48314:379::-;48498:3;48520:147;48663:3;48520:147;:::i;:::-;48513:154;;48684:3;48677:10;;48314:379;;;:::o;48699:400::-;48859:3;48880:84;48962:1;48957:3;48880:84;:::i;:::-;48873:91;;48973:93;49062:3;48973:93;:::i;:::-;49091:1;49086:3;49082:11;49075:18;;48699:400;;;:::o;49105:522::-;49318:3;49333:75;49404:3;49395:6;49333:75;:::i;:::-;49433:2;49428:3;49424:12;49417:19;;49453:148;49597:3;49453:148;:::i;:::-;49446:155;;49618:3;49611:10;;49105:522;;;;:::o;49633:153::-;49773:5;49769:1;49761:6;49757:14;49750:29;49633:153;:::o;49792:400::-;49952:3;49973:84;50055:1;50050:3;49973:84;:::i;:::-;49966:91;;50066:93;50155:3;50066:93;:::i;:::-;50184:1;50179:3;50175:11;50168:18;;49792:400;;;:::o;50198:522::-;50411:3;50426:75;50497:3;50488:6;50426:75;:::i;:::-;50526:2;50521:3;50517:12;50510:19;;50546:148;50690:3;50546:148;:::i;:::-;50539:155;;50711:3;50704:10;;50198:522;;;;:::o;50726:179::-;50866:31;50862:1;50854:6;50850:14;50843:55;50726:179;:::o;50911:366::-;51053:3;51074:67;51138:2;51133:3;51074:67;:::i;:::-;51067:74;;51150:93;51239:3;51150:93;:::i;:::-;51268:2;51263:3;51259:12;51252:19;;50911:366;;;:::o;51283:419::-;51449:4;51487:2;51476:9;51472:18;51464:26;;51536:9;51530:4;51526:20;51522:1;51511:9;51507:17;51500:47;51564:131;51690:4;51564:131;:::i;:::-;51556:139;;51283:419;;;:::o;51708:167::-;51848:19;51844:1;51836:6;51832:14;51825:43;51708:167;:::o;51881:366::-;52023:3;52044:67;52108:2;52103:3;52044:67;:::i;:::-;52037:74;;52120:93;52209:3;52120:93;:::i;:::-;52238:2;52233:3;52229:12;52222:19;;51881:366;;;:::o;52253:419::-;52419:4;52457:2;52446:9;52442:18;52434:26;;52506:9;52500:4;52496:20;52492:1;52481:9;52477:17;52470:47;52534:131;52660:4;52534:131;:::i;:::-;52526:139;;52253:419;;;:::o

Swarm Source

ipfs://5ec08efc6d4016e44868447e6dc31ab159fdb7f6586c02246e678c415bc17a5c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
0xd8A83c74f45aCdf354331B085e1B8F1cde5c7166
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.