Contract 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a

Contract Overview

Balance:
0 HT

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x17e8285861577fce1787b90a7ad0584065759333be5206895b0eb0daee8d8573Stake Tokens118378252022-01-17 7:23:285 days 56 mins ago0x2ce199585c55bfb16abd28b986cbd0dfb8457aa2 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001829025 2.5
0xcef5cfe11088919f83ce4d93729434f6f7e9a62c5c93dc5d863010ef8599d776Stake Tokens118372002022-01-17 6:52:135 days 1 hr ago0x43db12dcb7263383a8a4f9317fc1b70176453f56 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001948425 2.5
0x68e5a95bf4d55fd93b9f78cb4a5326790d9ab5d73635f9fb327e38f5dd82c4d3Unstake Tokens118371252022-01-17 6:48:285 days 1 hr ago0x43db12dcb7263383a8a4f9317fc1b70176453f56 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001081075 2.5
0x2006948343f98f6b75a4f27b422944c75ef7f64d594eb639e34e99ced210acf2Stake Tokens118370382022-01-17 6:44:075 days 1 hr ago0x43db12dcb7263383a8a4f9317fc1b70176453f56 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001948425 2.5
0x4d9d57c92e035b683454708e576cda7c880f703928cc42745d7ddc34803fc36aUnstake Tokens2118360382022-01-17 5:54:075 days 2 hrs ago0x43db12dcb7263383a8a4f9317fc1b70176453f56 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001541125 2.5
0x0f25a501e47d55c58162f9ff7a8b047bc0b7d3991fde726da3bb7a8ac14ec459Stake Tokens2118360232022-01-17 5:53:225 days 2 hrs ago0x43db12dcb7263383a8a4f9317fc1b70176453f56 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0003236425 2.5
0x8339090af552c6c9a43ad430976ada4c11f3241fe4f91115082ce182fdc2869eStake Tokens118359042022-01-17 5:47:255 days 2 hrs ago0x43db12dcb7263383a8a4f9317fc1b70176453f56 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001949025 2.5
0x1a3e285f1562ce576ef0bd5285c40cc81d34c0d612ba0d41d5702adf904d5d73Stake Tokens118353242022-01-17 5:18:255 days 3 hrs ago0x6da25a8c158d784b4a4fc010fe634cf61aeee040 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001520925 2.5
0x9fdaa63f67c001f21cb4d697fe9fe82c25c7d52732506ef897d5e242bf4d60eaStake Tokens118091932022-01-16 7:31:526 days 47 mins ago0x6da25a8c158d784b4a4fc010fe634cf61aeee040 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001520925 2.5
0x9a2cfafc8dab4723e9d42dc6721794e1163a226b8dc9d3f4cc0a0d008a28a350Stake Tokens118090952022-01-16 7:26:586 days 52 mins ago0x6da25a8c158d784b4a4fc010fe634cf61aeee040 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001520925 2.5
0x1b2cd75873f9b0580bb8631e5f9cb4fcc0226104532ed3df4214335cebbc0b3cStake Tokens117849032022-01-15 11:17:226 days 21 hrs ago0x6da25a8c158d784b4a4fc010fe634cf61aeee040 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001520925 2.5
0xaadff8c9bfd583f5db59b41f9d9c26c4edf94d0a5a5ef6bebfcc9fb137973e71Stake Tokens2117581592022-01-14 13:00:107 days 19 hrs ago0x6da25a8c158d784b4a4fc010fe634cf61aeee040 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0002381425 2.5
0xca4adcb9dea3033ed5ae8b529fd9a1934eb0bbd81d6ba89b01d3ca38c88079bbStake Tokens117529462022-01-14 8:39:317 days 23 hrs ago0x6da25a8c158d784b4a4fc010fe634cf61aeee040 IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001948425 2.5
0x8ca69ce57e91b9e1847671bb36a1f37283035844090098ea0e413438597e8e74Unstake Tokens2117256032022-01-13 9:52:228 days 22 hrs ago0xc4e42065cc34a761d966d11763be7865a2c09bea IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001541125 2.5
0x49d4b17aca36321165f350de9420013cebd76df16db36bd41f14cbc2bfd5ca93Unstake Tokens2117255852022-01-13 9:51:288 days 22 hrs ago0x5ce7bf33117ce7252d0a920b7b74b0194da5f2ba IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001541125 2.5
0x11152768a183fb6cc651d3d3f7f20d5156a75f6cd508832ceea4df825576108cStake Tokens2117255152022-01-13 9:47:588 days 22 hrs ago0x5ce7bf33117ce7252d0a920b7b74b0194da5f2ba IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0003237025 2.5
0xb1128758539d1ed75ff2dbddae7a1748105ee8cc419b6d40337a8ea7612a96a5Stake Tokens2117254752022-01-13 9:45:588 days 22 hrs ago0xc4e42065cc34a761d966d11763be7865a2c09bea IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0003237025 2.5
0x7298303596218b6218a5ef14e71b97f4232b6c3134e81a9afcf666c559694b7fUnstake Tokens2117252772022-01-13 9:36:048 days 22 hrs ago0xc4e42065cc34a761d966d11763be7865a2c09bea IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001541125 2.5
0xc6de7a64e8765170b8f96b98b3272907bbd25da0aa7a3e196e65cd86182bfdceUnstake Tokens2117245042022-01-13 8:57:258 days 23 hrs ago0x5ce7bf33117ce7252d0a920b7b74b0194da5f2ba IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001541125 2.5
0x8fdd6a7706255d9e00a692a9c8141153501df4ce29c6e652f2e275035324aaebStake Tokens2117244062022-01-13 8:52:318 days 23 hrs ago0x5ce7bf33117ce7252d0a920b7b74b0194da5f2ba IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0003236725 2.5
0x41a12874333e4e6152672081aec1e4501283eb6d74a878432c20fd820d93e945Stake Tokens2117243382022-01-13 8:49:078 days 23 hrs ago0xc4e42065cc34a761d966d11763be7865a2c09bea IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0003237025 2.5
0xd6eac9e765a0d0be7036c8d18fd443cd778f84c2f43bc79826fa9bdb47b2fe4fUnstake Tokens117235222022-01-13 8:08:199 days 11 mins ago0xc4e42065cc34a761d966d11763be7865a2c09bea IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001081075 2.5
0xb82bcf7df83a03f7f344c788c0723f0e6fb1b2ff5a8c42ee021742558c2d2d91Unstake Tokens117234632022-01-13 8:05:229 days 14 mins ago0x5ce7bf33117ce7252d0a920b7b74b0194da5f2ba IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001081075 2.5
0x7e063a20f5ab56c9f669d29e676525cf5492fe0243101811c40264143e5740d4Stake Tokens117234312022-01-13 8:03:469 days 15 mins ago0x5ce7bf33117ce7252d0a920b7b74b0194da5f2ba IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001948725 2.5
0x836671160e4110d44101e569b7d23c78e445800e1dabedb2f034a59430bb2c35Stake Tokens117233982022-01-13 8:02:079 days 17 mins ago0xc4e42065cc34a761d966d11763be7865a2c09bea IN 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a0 HT0.0001948725 2.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x17e8285861577fce1787b90a7ad0584065759333be5206895b0eb0daee8d8573118378252022-01-17 7:23:285 days 56 mins ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0xcef5cfe11088919f83ce4d93729434f6f7e9a62c5c93dc5d863010ef8599d776118372002022-01-17 6:52:135 days 1 hr ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x68e5a95bf4d55fd93b9f78cb4a5326790d9ab5d73635f9fb327e38f5dd82c4d3118371252022-01-17 6:48:285 days 1 hr ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x2006948343f98f6b75a4f27b422944c75ef7f64d594eb639e34e99ced210acf2118370382022-01-17 6:44:075 days 1 hr ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x4d9d57c92e035b683454708e576cda7c880f703928cc42745d7ddc34803fc36a118360382022-01-17 5:54:075 days 2 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0x84ba9feaf713497e131de44c6197ba5df599ae1f0 HT
0x4d9d57c92e035b683454708e576cda7c880f703928cc42745d7ddc34803fc36a118360382022-01-17 5:54:075 days 2 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x0f25a501e47d55c58162f9ff7a8b047bc0b7d3991fde726da3bb7a8ac14ec459118360232022-01-17 5:53:225 days 2 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0x84ba9feaf713497e131de44c6197ba5df599ae1f0 HT
0x0f25a501e47d55c58162f9ff7a8b047bc0b7d3991fde726da3bb7a8ac14ec459118360232022-01-17 5:53:225 days 2 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x8339090af552c6c9a43ad430976ada4c11f3241fe4f91115082ce182fdc2869e118359042022-01-17 5:47:255 days 2 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x1a3e285f1562ce576ef0bd5285c40cc81d34c0d612ba0d41d5702adf904d5d73118353242022-01-17 5:18:255 days 3 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x9fdaa63f67c001f21cb4d697fe9fe82c25c7d52732506ef897d5e242bf4d60ea118091932022-01-16 7:31:526 days 47 mins ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x9a2cfafc8dab4723e9d42dc6721794e1163a226b8dc9d3f4cc0a0d008a28a350118090952022-01-16 7:26:586 days 52 mins ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x1b2cd75873f9b0580bb8631e5f9cb4fcc0226104532ed3df4214335cebbc0b3c117849032022-01-15 11:17:226 days 21 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0xaadff8c9bfd583f5db59b41f9d9c26c4edf94d0a5a5ef6bebfcc9fb137973e71117581592022-01-14 13:00:107 days 19 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0x84ba9feaf713497e131de44c6197ba5df599ae1f0 HT
0xaadff8c9bfd583f5db59b41f9d9c26c4edf94d0a5a5ef6bebfcc9fb137973e71117581592022-01-14 13:00:107 days 19 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0xca4adcb9dea3033ed5ae8b529fd9a1934eb0bbd81d6ba89b01d3ca38c88079bb117529462022-01-14 8:39:317 days 23 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x8ca69ce57e91b9e1847671bb36a1f37283035844090098ea0e413438597e8e74117256032022-01-13 9:52:228 days 22 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0x84ba9feaf713497e131de44c6197ba5df599ae1f0 HT
0x8ca69ce57e91b9e1847671bb36a1f37283035844090098ea0e413438597e8e74117256032022-01-13 9:52:228 days 22 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x49d4b17aca36321165f350de9420013cebd76df16db36bd41f14cbc2bfd5ca93117255852022-01-13 9:51:288 days 22 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0x84ba9feaf713497e131de44c6197ba5df599ae1f0 HT
0x49d4b17aca36321165f350de9420013cebd76df16db36bd41f14cbc2bfd5ca93117255852022-01-13 9:51:288 days 22 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x11152768a183fb6cc651d3d3f7f20d5156a75f6cd508832ceea4df825576108c117255152022-01-13 9:47:588 days 22 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0x84ba9feaf713497e131de44c6197ba5df599ae1f0 HT
0x11152768a183fb6cc651d3d3f7f20d5156a75f6cd508832ceea4df825576108c117255152022-01-13 9:47:588 days 22 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0xb1128758539d1ed75ff2dbddae7a1748105ee8cc419b6d40337a8ea7612a96a5117254752022-01-13 9:45:588 days 22 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0x84ba9feaf713497e131de44c6197ba5df599ae1f0 HT
0xb1128758539d1ed75ff2dbddae7a1748105ee8cc419b6d40337a8ea7612a96a5117254752022-01-13 9:45:588 days 22 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0xcea0f3a470b96775a528d9f39fc33017bae8d0ba0 HT
0x7298303596218b6218a5ef14e71b97f4232b6c3134e81a9afcf666c559694b7f117252772022-01-13 9:36:048 days 22 hrs ago 0x1d9995c7dd212f9214b6d3198c82b3b51ada086a 0x84ba9feaf713497e131de44c6197ba5df599ae1f0 HT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NXTPFarm

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2022-01-12
*/

pragma solidity ^0.6.0;

// import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
// import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
// import "@openzeppelin/contracts/access/Ownable.sol";
// import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @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 Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

/*
 * @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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

/**
 * @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].
 */
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 () internal {
        _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 make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

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

contract NXTPFarm is Ownable, ReentrancyGuard{
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    string public name = "NXTP Farm";

    // pool > token > address
    mapping(uint256 => mapping(address => mapping(address => uint256))) public stakingBalance;
    mapping(uint256 => mapping(address => mapping(address => uint256))) public stakingBalance2;
    address[] allowedTokens;

    event AddAllowedTokens(address token);
    event StakeTokens(uint256 _amount, address token, uint256 pool);
    event UnstakeTokens(address token, uint256 pool);
    event StakeTokens2(uint256 _amount1, address token1, uint256 _amount2, address token2, uint256 pool);
    event UnstakeTokens2(address token1, address token2, uint256 pool);


    function addAllowedTokens(address token) public onlyOwner {
        require(token != address(0), "token is zero address");
        if (tokenIsAllowed(token) == false) {
            allowedTokens.push(token);
            emit AddAllowedTokens(token);
        }
    }


    function stakeTokens(uint256 _amount, address token, uint256 pool) public nonReentrant{
        // Require amount greater than 0
        require(_amount > 0, "amount cannot be 0");
        require(tokenIsAllowed(token) == true, "token not allow");

        IERC20(token).safeTransferFrom(msg.sender, address(this), _amount);
        stakingBalance[pool][token][msg.sender] = stakingBalance[pool][token][msg.sender].add(_amount);

        emit StakeTokens(_amount, token, pool);

    }

    // Unstaking Tokens (Withdraw)
    function unstakeTokens(address token, uint256 pool) public nonReentrant{
        require(token != address(0), "token is zero address");
        // Fetch staking balance
        uint256 balance = stakingBalance[pool][token][msg.sender];
        require(balance > 0, "staking balance cannot be 0");
        IERC20(token).safeTransfer(msg.sender, balance);
        stakingBalance[pool][token][msg.sender] = 0;

        emit UnstakeTokens(token, pool);
    }


    function tokenIsAllowed(address token) public view returns (bool) {
        for (
            uint256 allowedTokensIndex = 0;
            allowedTokensIndex < allowedTokens.length;
            allowedTokensIndex++
        ) {
            if (allowedTokens[allowedTokensIndex] == token) {
                return true;
            }
        }
        return false;
    }


    function getUserStakingBalanceValue(address user, address token, uint256 pool) public view returns (uint256) {
        return stakingBalance[pool][token][user];
    }


    //double
    function stakeTokens2(uint256 _amount1, address token1, uint256 _amount2, address token2, uint256 pool) public nonReentrant{
        // Require amount greater than 0
        require(_amount1 > 0, "amount1 cannot be 0");
        require(_amount2 > 0, "amount2 cannot be 0");
        require(tokenIsAllowed(token1) == true, "token1 not allow");
        require(tokenIsAllowed(token2) == true, "token2 not allow");

        IERC20(token1).safeTransferFrom(msg.sender, address(this), _amount1);
        IERC20(token2).safeTransferFrom(msg.sender, address(this), _amount2);

        stakingBalance2[pool][token1][msg.sender] = stakingBalance2[pool][token1][msg.sender].add(_amount1);
        stakingBalance2[pool][token2][msg.sender] = stakingBalance2[pool][token2][msg.sender].add(_amount2);

        emit StakeTokens2(_amount1, token1, _amount2, token2, pool);

    }


    // Unstaking Tokens (Withdraw)
    function unstakeTokens2(address token1, address token2, uint256 pool) public nonReentrant{
        require(token1 != address(0), "token1 is zero address");
        require(token2 != address(0), "token2 is zero address");
        require(token1 != token2, "token1 and token2 is same");

        // Fetch staking balance
        uint256 balance1 = stakingBalance2[pool][token1][msg.sender];
        require(balance1 > 0, "staking balance cannot be 0");
        
        uint256 balance2 = stakingBalance2[pool][token2][msg.sender];
        require(balance2 > 0, "staking balance cannot be 0");
        
        IERC20(token1).safeTransfer(msg.sender, balance1);
        IERC20(token2).safeTransfer(msg.sender, balance2);
        
        stakingBalance2[pool][token1][msg.sender] = 0;
        stakingBalance2[pool][token2][msg.sender] = 0;

        emit UnstakeTokens2(token1, token2, pool);
    }


    function getUserStakingBalanceValue2(address user, address token, uint256 pool) public view returns (uint256) {
        return stakingBalance2[pool][token][user];
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"AddAllowedTokens","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":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"pool","type":"uint256"}],"name":"StakeTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount1","type":"uint256"},{"indexed":false,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount2","type":"uint256"},{"indexed":false,"internalType":"address","name":"token2","type":"address"},{"indexed":false,"internalType":"uint256","name":"pool","type":"uint256"}],"name":"StakeTokens2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"pool","type":"uint256"}],"name":"UnstakeTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"token2","type":"address"},{"indexed":false,"internalType":"uint256","name":"pool","type":"uint256"}],"name":"UnstakeTokens2","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addAllowedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"getUserStakingBalanceValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"getUserStakingBalanceValue2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"stakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount1","type":"uint256"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"_amount2","type":"uint256"},{"internalType":"address","name":"token2","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"stakeTokens2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"stakingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"stakingBalance2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"tokenIsAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"unstakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token1","type":"address"},{"internalType":"address","name":"token2","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"unstakeTokens2","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405260096080819052684e585450204661726d60b81b60a09081526200002c91600291906200009b565b506000620000426001600160e01b036200009616565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180556200013d565b335b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000de57805160ff19168380011785556200010e565b828001600101855582156200010e579182015b828111156200010e578251825591602001919060010190620000f1565b506200011c92915062000120565b5090565b6200009891905b808211156200011c576000815560010162000127565b611609806200014d6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063dd5b846711610066578063dd5b84671461031a578063e89a173e14610354578063f2fde38b14610380578063f315aa84146103a6576100ea565b80638da5cb5b14610290578063b9f6ac47146102b4578063cec534d6146102e8576100ea565b8063715018a6116100c8578063715018a6146101dc5780637189bd54146101e4578063778b215f1461021a5780638d69b8e814610250576100ea565b806306fdde03146100ef578063102c9db61461016c578063171e44ea146101b4575b600080fd5b6100f76103da565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a26004803603606081101561018257600080fd5b506001600160a01b03813581169160208101359091169060400135610465565b60408051918252519081900360200190f35b6101da600480360360208110156101ca57600080fd5b50356001600160a01b0316610498565b005b6101da6105e7565b6101a2600480360360608110156101fa57600080fd5b506001600160a01b0381358116916020810135909116906040013561069b565b6101da6004803603606081101561023057600080fd5b506001600160a01b038135811691602081013590911690604001356106ce565b6101da600480360360a081101561026657600080fd5b508035906001600160a01b03602082013581169160408101359160608201351690608001356109e9565b610298610cbc565b604080516001600160a01b039092168252519081900360200190f35b6101a2600480360360608110156102ca57600080fd5b508035906001600160a01b0360208201358116916040013516610ccb565b6101da600480360360608110156102fe57600080fd5b508035906001600160a01b036020820135169060400135610cee565b6103406004803603602081101561033057600080fd5b50356001600160a01b0316610e9f565b604080519115158252519081900360200190f35b6101da6004803603604081101561036a57600080fd5b506001600160a01b038135169060200135610efc565b6101da6004803603602081101561039657600080fd5b50356001600160a01b03166110a1565b6101a2600480360360608110156103bc57600080fd5b508035906001600160a01b03602082013581169160400135166111ab565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561045d5780601f106104325761010080835404028352916020019161045d565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b505050505081565b60009081526004602090815260408083206001600160a01b03948516845282528083209490931682529290925290205490565b6104a06111ce565b6000546001600160a01b03908116911614610502576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610555576040805162461bcd60e51b8152602060048201526015602482015274746f6b656e206973207a65726f206164647265737360581b604482015290519081900360640190fd5b61055e81610e9f565b6105e457600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4eec973584b9930388bebeff27c40485ca0a973c42e435e870dbdcb4623e4f669181900360200190a15b50565b6105ef6111ce565b6000546001600160a01b03908116911614610651576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60009081526003602090815260408083206001600160a01b03948516845282528083209490931682529290925290205490565b60026001541415610714576040805162461bcd60e51b815260206004820152601f6024820152600080516020611564833981519152604482015290519081900360640190fd5b60026001556001600160a01b03831661076d576040805162461bcd60e51b8152602060048201526016602482015275746f6b656e31206973207a65726f206164647265737360501b604482015290519081900360640190fd5b6001600160a01b0382166107c1576040805162461bcd60e51b8152602060048201526016602482015275746f6b656e32206973207a65726f206164647265737360501b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03161415610828576040805162461bcd60e51b815260206004820152601960248201527f746f6b656e3120616e6420746f6b656e322069732073616d6500000000000000604482015290519081900360640190fd5b60008181526004602090815260408083206001600160a01b03871684528252808320338452909152902054806108a5576040805162461bcd60e51b815260206004820152601b60248201527f7374616b696e672062616c616e63652063616e6e6f7420626520300000000000604482015290519081900360640190fd5b60008281526004602090815260408083206001600160a01b0387168452825280832033845290915290205480610922576040805162461bcd60e51b815260206004820152601b60248201527f7374616b696e672062616c616e63652063616e6e6f7420626520300000000000604482015290519081900360640190fd5b61093c6001600160a01b038616338463ffffffff6111d216565b6109566001600160a01b038516338363ffffffff6111d216565b60008381526004602090815260408083206001600160a01b03808a1680865282855283862033808852908652848720879055918a1680875292855283862091865290845282852094909455815193845291830191909152818101859052517f43aef3bf33e815eb666fc7800aede708bf3b500f1adcfb979d530148118512d09181900360600190a1505060018055505050565b60026001541415610a2f576040805162461bcd60e51b815260206004820152601f6024820152600080516020611564833981519152604482015290519081900360640190fd5b600260015584610a7c576040805162461bcd60e51b81526020600482015260136024820152720616d6f756e74312063616e6e6f74206265203606c1b604482015290519081900360640190fd5b60008311610ac7576040805162461bcd60e51b81526020600482015260136024820152720616d6f756e74322063616e6e6f74206265203606c1b604482015290519081900360640190fd5b610ad084610e9f565b1515600114610b19576040805162461bcd60e51b815260206004820152601060248201526f746f6b656e31206e6f7420616c6c6f7760801b604482015290519081900360640190fd5b610b2282610e9f565b1515600114610b6b576040805162461bcd60e51b815260206004820152601060248201526f746f6b656e32206e6f7420616c6c6f7760801b604482015290519081900360640190fd5b610b866001600160a01b03851633308863ffffffff61122916565b610ba16001600160a01b03831633308663ffffffff61122916565b60008181526004602090815260408083206001600160a01b03881684528252808320338452909152902054610bdc908663ffffffff61128916565b60008281526004602090815260408083206001600160a01b03808a16855281845282852033808752908552838620969096558716845282528083209383529290522054610c2f908463ffffffff61128916565b60008281526004602090815260408083206001600160a01b038088168086529184528285203386528452938290209490945580518981529288169183019190915281810186905260608201929092526080810183905290517f7be908765ae45e606d7b122cd9d233e82a0ac3e7e9b1219a79f6278072d841f79181900360a00190a1505060018055505050565b6000546001600160a01b031690565b600460209081526000938452604080852082529284528284209052825290205481565b60026001541415610d34576040805162461bcd60e51b815260206004820152601f6024820152600080516020611564833981519152604482015290519081900360640190fd5b600260015582610d80576040805162461bcd60e51b81526020600482015260126024820152710616d6f756e742063616e6e6f7420626520360741b604482015290519081900360640190fd5b610d8982610e9f565b1515600114610dd1576040805162461bcd60e51b815260206004820152600f60248201526e746f6b656e206e6f7420616c6c6f7760881b604482015290519081900360640190fd5b610dec6001600160a01b03831633308663ffffffff61122916565b60008181526003602090815260408083206001600160a01b03861684528252808320338452909152902054610e27908463ffffffff61128916565b60008281526003602090815260408083206001600160a01b0387168085529083528184203385528352928190209390935582518681529081019190915280820183905290517f41a0e13b292918e235bfe0fd9c277c3988381f8105673088910c47ca994a03189181900360600190a150506001805550565b6000805b600554811015610ef157826001600160a01b031660058281548110610ec457fe5b6000918252602090912001546001600160a01b03161415610ee9576001915050610ef7565b600101610ea3565b50600090505b919050565b60026001541415610f42576040805162461bcd60e51b815260206004820152601f6024820152600080516020611564833981519152604482015290519081900360640190fd5b60026001556001600160a01b038216610f9a576040805162461bcd60e51b8152602060048201526015602482015274746f6b656e206973207a65726f206164647265737360581b604482015290519081900360640190fd5b60008181526003602090815260408083206001600160a01b0386168452825280832033845290915290205480611017576040805162461bcd60e51b815260206004820152601b60248201527f7374616b696e672062616c616e63652063616e6e6f7420626520300000000000604482015290519081900360640190fd5b6110316001600160a01b038416338363ffffffff6111d216565b60008281526003602090815260408083206001600160a01b038716808552908352818420338552835281842093909355805192835290820184905280517ff74a79d13d6fdbdf26b2c779e6a24490a43e65d60cc7e064740f8d40b2b5ea2c9281900390910190a150506001805550565b6110a96111ce565b6000546001600160a01b0390811691161461110b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166111505760405162461bcd60e51b81526004018080602001828103825260268152602001806115846026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600360209081526000938452604080852082529284528284209052825290205481565b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526112249084906112ea565b505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526112839085906112ea565b50505050565b6000828201838110156112e3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b606061133f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661139b9092919063ffffffff16565b8051909150156112245780806020019051602081101561135e57600080fd5b50516112245760405162461bcd60e51b815260040180806020018281038252602a8152602001806115aa602a913960400191505060405180910390fd5b60606113aa84846000856113b2565b949350505050565b60606113bd8561155d565b61140e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061144d5780518252601f19909201916020918201910161142e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114af576040519150601f19603f3d011682016040523d82523d6000602084013e6114b4565b606091505b509150915081156114c85791506113aa9050565b8051156114d85780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561152257818101518382015260200161150a565b50505050905090810190601f16801561154f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b15159056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212205d4a57258265a1496d5e582d8eb86059fa05a35163ea65d7abc6467ae2ad6c6864736f6c63430006060033

Deployed ByteCode Sourcemap

23580:4665:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23580:4665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;23700:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;23700:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28072:170;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;28072:170:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24350:271;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24350:271:0;-1:-1:-1;;;;;24350:271:0;;:::i;:::-;;20429:148;;;:::i;26031:168::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;26031:168:0;;;;;;;;;;;;;;;;;:::i;27148:914::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;27148:914:0;;;;;;;;;;;;;;;;;:::i;26223:879::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;26223:879:0;;;-1:-1:-1;;;;;26223:879:0;;;;;;;;;;;;;;;;;;;;;;:::i;19787:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;19787:79:0;;;;;;;;;;;;;;23868:90;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23868:90:0;;;-1:-1:-1;;;;;23868:90:0;;;;;;;;;;;;:::i;24631:494::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24631:494:0;;;-1:-1:-1;;;;;24631:494:0;;;;;;;;;;:::i;25642:379::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25642:379:0;-1:-1:-1;;;;;25642:379:0;;:::i;:::-;;;;;;;;;;;;;;;;;;25169:463;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;25169:463:0;;;;;;;;:::i;20732:244::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20732:244:0;-1:-1:-1;;;;;20732:244:0;;:::i;23772:89::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23772:89:0;;;-1:-1:-1;;;;;23772:89:0;;;;;;;;;;;;:::i;23700:32::-;;;;;;;;;;;;;;-1:-1:-1;;23700:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28072:170::-;28173:7;28200:21;;;:15;:21;;;;;;;;-1:-1:-1;;;;;28200:28:0;;;;;;;;;;:34;;;;;;;;;;;;;;28072:170::o;24350:271::-;20009:12;:10;:12::i;:::-;19999:6;;-1:-1:-1;;;;;19999:6:0;;;:22;;;19991:67;;;;;-1:-1:-1;;;19991:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24427:19:0;::::1;24419:53;;;::::0;;-1:-1:-1;;;24419:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24419:53:0;;;;;;;;;;;;;::::1;;24487:21;24502:5;24487:14;:21::i;:::-;24483:131;;24534:13;27:10:-1::0;;39:1:::1;23:18:::0;::::1;45:23:::0;;-1:-1;24534:25:0;;;;;::::1;::::0;;-1:-1:-1;;;;;24534:25:0;::::1;-1:-1:-1::0;;;;;;24534:25:0;;::::1;::::0;::::1;::::0;;;24579:23:::1;::::0;;;;;;::::1;::::0;;;;24534:25:::1;24579:23:::0;;::::1;24483:131;24350:271:::0;:::o;20429:148::-;20009:12;:10;:12::i;:::-;19999:6;;-1:-1:-1;;;;;19999:6:0;;;:22;;;19991:67;;;;;-1:-1:-1;;;19991:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20536:1:::1;20520:6:::0;;20499:40:::1;::::0;-1:-1:-1;;;;;20520:6:0;;::::1;::::0;20499:40:::1;::::0;20536:1;;20499:40:::1;20567:1;20550:19:::0;;-1:-1:-1;;;;;;20550:19:0::1;::::0;;20429:148::o;26031:168::-;26131:7;26158:20;;;:14;:20;;;;;;;;-1:-1:-1;;;;;26158:27:0;;;;;;;;;;:33;;;;;;;;;;;;;;26031:168::o;27148:914::-;22625:1;23231:7;;:19;;23223:63;;;;;-1:-1:-1;;;23223:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23223:63:0;;;;;;;;;;;;;;;22625:1;23364:7;:18;-1:-1:-1;;;;;27256:20:0;::::1;27248:55;;;::::0;;-1:-1:-1;;;27248:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27248:55:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;27322:20:0;::::1;27314:55;;;::::0;;-1:-1:-1;;;27314:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27314:55:0;;;;;;;;;;;;;::::1;;27398:6;-1:-1:-1::0;;;;;27388:16:0::1;:6;-1:-1:-1::0;;;;;27388:16:0::1;;;27380:54;;;::::0;;-1:-1:-1;;;27380:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27481:16;27500:21:::0;;;:15:::1;:21;::::0;;;;;;;-1:-1:-1;;;;;27500:29:0;::::1;::::0;;;;;;;27530:10:::1;27500:41:::0;;;;;;;;27560:12;27552:52:::1;;;::::0;;-1:-1:-1;;;27552:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27625:16;27644:21:::0;;;:15:::1;:21;::::0;;;;;;;-1:-1:-1;;;;;27644:29:0;::::1;::::0;;;;;;;27674:10:::1;27644:41:::0;;;;;;;;27704:12;27696:52:::1;;;::::0;;-1:-1:-1;;;27696:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27769:49;-1:-1:-1::0;;;;;27769:27:0;::::1;27797:10;27809:8:::0;27769:49:::1;:27;:49;:::i;:::-;27829;-1:-1:-1::0;;;;;27829:27:0;::::1;27857:10;27869:8:::0;27829:49:::1;:27;:49;:::i;:::-;27943:1;27899:21:::0;;;:15:::1;:21;::::0;;;;;;;-1:-1:-1;;;;;27899:29:0;;::::1;::::0;;;;;;;;;27929:10:::1;27899:41:::0;;;;;;;;;:45;;;27955:29;;::::1;::::0;;;;;;;;;:41;;;;;;;;;:45;;;;28018:36;;;;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;22581:1:0;23543:22;;-1:-1:-1;;;27148:914:0:o;26223:879::-;22625:1;23231:7;;:19;;23223:63;;;;;-1:-1:-1;;;23223:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23223:63:0;;;;;;;;;;;;;;;22625:1;23364:7;:18;26407:12;26399:44:::1;;;::::0;;-1:-1:-1;;;26399:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26399:44:0;;;;;;;;;;;;;::::1;;26473:1;26462:8;:12;26454:44;;;::::0;;-1:-1:-1;;;26454:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26454:44:0;;;;;;;;;;;;;::::1;;26517:22;26532:6;26517:14;:22::i;:::-;:30;;26543:4;26517:30;26509:59;;;::::0;;-1:-1:-1;;;26509:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26509:59:0;;;;;;;;;;;;;::::1;;26587:22;26602:6;26587:14;:22::i;:::-;:30;;26613:4;26587:30;26579:59;;;::::0;;-1:-1:-1;;;26579:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26579:59:0;;;;;;;;;;;;;::::1;;26651:68;-1:-1:-1::0;;;;;26651:31:0;::::1;26683:10;26703:4;26710:8:::0;26651:68:::1;:31;:68;:::i;:::-;26730;-1:-1:-1::0;;;;;26730:31:0;::::1;26762:10;26782:4;26789:8:::0;26730:68:::1;:31;:68;:::i;:::-;26855:21;::::0;;;:15:::1;:21;::::0;;;;;;;-1:-1:-1;;;;;26855:29:0;::::1;::::0;;;;;;;26885:10:::1;26855:41:::0;;;;;;;;:55:::1;::::0;26901:8;26855:55:::1;:45;:55;:::i;:::-;26811:21;::::0;;;:15:::1;:21;::::0;;;;;;;-1:-1:-1;;;;;26811:29:0;;::::1;::::0;;;;;;;;26841:10:::1;26811:41:::0;;;;;;;;;:99;;;;26965:29;::::1;::::0;;;;;;;:41;;;;;;;;:55:::1;::::0;27011:8;26965:55:::1;:45;:55;:::i;:::-;26921:21;::::0;;;:15:::1;:21;::::0;;;;;;;-1:-1:-1;;;;;26921:29:0;;::::1;::::0;;;;;;;;;26951:10:::1;26921:41:::0;;;;;;;;:99;;;;27038:54;;;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;22581:1:0;23543:22;;-1:-1:-1;;;26223:879:0:o;19787:79::-;19825:7;19852:6;-1:-1:-1;;;;;19852:6:0;19787:79;:::o;23868:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24631:494::-;22625:1;23231:7;;:19;;23223:63;;;;;-1:-1:-1;;;23223:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23223:63:0;;;;;;;;;;;;;;;22625:1;23364:7;:18;24778:11;24770:42:::1;;;::::0;;-1:-1:-1;;;24770:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24770:42:0;;;;;;;;;;;;;::::1;;24831:21;24846:5;24831:14;:21::i;:::-;:29;;24856:4;24831:29;24823:57;;;::::0;;-1:-1:-1;;;24823:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24823:57:0;;;;;;;;;;;;;::::1;;24893:66;-1:-1:-1::0;;;;;24893:30:0;::::1;24924:10;24944:4;24951:7:::0;24893:66:::1;:30;:66;:::i;:::-;25012:20;::::0;;;:14:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;25012:27:0;::::1;::::0;;;;;;;25040:10:::1;25012:39:::0;;;;;;;;:52:::1;::::0;25056:7;25012:52:::1;:43;:52;:::i;:::-;24970:20;::::0;;;:14:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;24970:27:0;::::1;::::0;;;;;;;;;24998:10:::1;24970:39:::0;;;;;;;;:94;;;;25082:33;;;;;;;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;22581:1:0;23543:22;;-1:-1:-1;24631:494:0:o;25642:379::-;25702:4;;25719:272;25804:13;:20;25783:41;;25719:272;;;25927:5;-1:-1:-1;;;;;25890:42:0;:13;25904:18;25890:33;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25890:33:0;:42;25886:94;;;25960:4;25953:11;;;;;25886:94;25839:20;;25719:272;;;;26008:5;26001:12;;25642:379;;;;:::o;25169:463::-;22625:1;23231:7;;:19;;23223:63;;;;;-1:-1:-1;;;23223:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23223:63:0;;;;;;;;;;;;;;;22625:1;23364:7;:18;-1:-1:-1;;;;;25259:19:0;::::1;25251:53;;;::::0;;-1:-1:-1;;;25251:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25251:53:0;;;;;;;;;;;;;::::1;;25349:15;25367:20:::0;;;:14:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;25367:27:0;::::1;::::0;;;;;;;25395:10:::1;25367:39:::0;;;;;;;;25425:11;25417:51:::1;;;::::0;;-1:-1:-1;;;25417:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25479:47;-1:-1:-1::0;;;;;25479:26:0;::::1;25506:10;25518:7:::0;25479:47:::1;:26;:47;:::i;:::-;25579:1;25537:20:::0;;;:14:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;25537:27:0;::::1;::::0;;;;;;;;;25565:10:::1;25537:39:::0;;;;;;;:43;;;;25598:26;;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;-1:-1:-1::0;;22581:1:0;23543:22;;-1:-1:-1;25169:463:0:o;20732:244::-;20009:12;:10;:12::i;:::-;19999:6;;-1:-1:-1;;;;;19999:6:0;;;:22;;;19991:67;;;;;-1:-1:-1;;;19991:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20821:22:0;::::1;20813:73;;;;-1:-1:-1::0;;;20813:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20923:6;::::0;;20902:38:::1;::::0;-1:-1:-1;;;;;20902:38:0;;::::1;::::0;20923:6;::::1;::::0;20902:38:::1;::::0;::::1;20951:6;:17:::0;;-1:-1:-1;;;;;;20951:17:0::1;-1:-1:-1::0;;;;;20951:17:0;;;::::1;::::0;;;::::1;::::0;;20732:244::o;23772:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18425:106::-;18513:10;18425:106;:::o;14809:177::-;14919:58;;;-1:-1:-1;;;;;14919:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14919:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;14892:86:0;;14912:5;;14892:19;:86::i;:::-;14809:177;;;:::o;14994:205::-;15122:68;;;-1:-1:-1;;;;;15122:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15122:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15095:96:0;;15115:5;;15095:19;:96::i;:::-;14994:205;;;;:::o;3828:181::-;3886:7;3918:5;;;3942:6;;;;3934:46;;;;;-1:-1:-1;;;3934:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4000:1;3828:181;-1:-1:-1;;;3828:181:0:o;17114:761::-;17538:23;17564:69;17592:4;17564:69;;;;;;;;;;;;;;;;;17572:5;-1:-1:-1;;;;;17564:27:0;;;:69;;;;;:::i;:::-;17648:17;;17538:95;;-1:-1:-1;17648:21:0;17644:224;;17790:10;17779:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17779:30:0;17771:85;;;;-1:-1:-1;;;17771:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11887:196;11990:12;12022:53;12045:6;12053:4;12059:1;12062:12;12022:22;:53::i;:::-;12015:60;11887:196;-1:-1:-1;;;;11887:196:0:o;13264:979::-;13394:12;13427:18;13438:6;13427:10;:18::i;:::-;13419:60;;;;;-1:-1:-1;;;13419:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13553:12;13567:23;13594:6;-1:-1:-1;;;;;13594:11:0;13614:8;13625:4;13594:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13594:36:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;13552:78:0;;;;13645:7;13641:595;;;13676:10;-1:-1:-1;13669:17:0;;-1:-1:-1;13669:17:0;13641:595;13790:17;;:21;13786:439;;14053:10;14047:17;14114:15;14101:10;14097:2;14093:19;14086:44;14001:148;14196:12;14189:20;;-1:-1:-1;;;14189:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14189:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8969:422;9336:20;9375:8;;;8969:422::o

Swarm Source

ipfs://5d4a57258265a1496d5e582d8eb86059fa05a35163ea65d7abc6467ae2ad6c68
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading