ETH Price: $2,377.18 (+1.05%)

Contract

0x2C92744A0428E405e95Dc3eb812e1B87872B22eB
 

Overview

ETH Balance

0.347640406300848765 ETH

Eth Value

$826.40 (@ $2,377.18/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw143543942022-03-09 19:10:36939 days ago1646853036IN
0x2C92744A...7872B22eB
0 ETH0.0038583338
Withdraw141852832022-02-11 14:26:52965 days ago1644589612IN
0x2C92744A...7872B22eB
0 ETH0.0056608759
Stake141710652022-02-09 9:24:42968 days ago1644398682IN
0x2C92744A...7872B22eB
0 ETH0.004913454
Redeem141587372022-02-07 11:50:01969 days ago1644234601IN
0x2C92744A...7872B22eB
0 ETH0.0057491963
Redeem141586372022-02-07 11:24:54969 days ago1644233094IN
0x2C92744A...7872B22eB
0 ETH0.0056579362
Redeem141586302022-02-07 11:22:45969 days ago1644232965IN
0x2C92744A...7872B22eB
0 ETH0.0056579362
Redeem141585392022-02-07 11:00:38969 days ago1644231638IN
0x2C92744A...7872B22eB
0 ETH0.0052016457
Redeem141584972022-02-07 10:50:05969 days ago1644231005IN
0x2C92744A...7872B22eB
0 ETH0.005292958
Redeem141584962022-02-07 10:49:17969 days ago1644230957IN
0x2C92744A...7872B22eB
0 ETH0.006447158
Withdraw141207112022-02-01 14:43:54975 days ago1643726634IN
0x2C92744A...7872B22eB
0 ETH0.01340262132
Withdraw138015122021-12-14 5:45:471025 days ago1639460747IN
0x2C92744A...7872B22eB
0 ETH0.0077169672
Redeem135099522021-10-29 4:16:331071 days ago1635480993IN
0x2C92744A...7872B22eB
0 ETH0.01545613155
Redeem134638372021-10-21 23:00:181078 days ago1634857218IN
0x2C92744A...7872B22eB
0 ETH0.0080603769
Redeem133751202021-10-08 0:55:541092 days ago1633654554IN
0x2C92744A...7872B22eB
0 ETH0.0097722698
Buy132863822021-09-24 4:34:261106 days ago1632458066IN
0x2C92744A...7872B22eB
0.05764138 ETH0.0148954448.82024363
Redeem132601032021-09-20 2:59:001110 days ago1632106740IN
0x2C92744A...7872B22eB
0 ETH0.0056838657
Redeem132377522021-09-16 16:04:251113 days ago1631808265IN
0x2C92744A...7872B22eB
0 ETH0.0094621781
Withdraw132364052021-09-16 11:11:121113 days ago1631790672IN
0x2C92744A...7872B22eB
0 ETH0.0048620554
Buy132118572021-09-12 15:49:571117 days ago1631461797IN
0x2C92744A...7872B22eB
0.2287305 ETH0.0183049260
Redeem131185672021-08-29 5:39:531132 days ago1630215593IN
0x2C92744A...7872B22eB
0 ETH0.0069602851.97460495
Buy131093452021-08-27 19:30:311133 days ago1630092631IN
0x2C92744A...7872B22eB
0.32495387 ETH0.05552492182
Redeem130869092021-08-24 8:17:451137 days ago1629793065IN
0x2C92744A...7872B22eB
0 ETH0.0077099266
Withdraw130867922021-08-24 7:52:401137 days ago1629791560IN
0x2C92744A...7872B22eB
0 ETH0.007500570
Redeem130241202021-08-14 15:32:551146 days ago1628955175IN
0x2C92744A...7872B22eB
0 ETH0.004554139
Stake129821582021-08-08 4:16:201153 days ago1628396180IN
0x2C92744A...7872B22eB
0 ETH0.0048926642
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
132863822021-09-24 4:34:261106 days ago1632458066
0x2C92744A...7872B22eB
0.02516565 ETH
132863822021-09-24 4:34:261106 days ago1632458066
0x2C92744A...7872B22eB
0.02593862 ETH
132863822021-09-24 4:34:261106 days ago1632458066
0x2C92744A...7872B22eB
0.00576413 ETH
132118572021-09-12 15:49:571117 days ago1631461797
0x2C92744A...7872B22eB
0.09986145 ETH
132118572021-09-12 15:49:571117 days ago1631461797
0x2C92744A...7872B22eB
0.10292872 ETH
132118572021-09-12 15:49:571117 days ago1631461797
0x2C92744A...7872B22eB
0.02287305 ETH
131093452021-08-27 19:30:311133 days ago1630092631
0x2C92744A...7872B22eB
0.14187161 ETH
131093452021-08-27 19:30:311133 days ago1630092631
0x2C92744A...7872B22eB
0.14622924 ETH
131093452021-08-27 19:30:311133 days ago1630092631
0x2C92744A...7872B22eB
0.03249538 ETH
120734602021-03-20 4:15:161294 days ago1616213716
0x2C92744A...7872B22eB
1.32446642 ETH
120734602021-03-20 4:15:161294 days ago1616213716
0x2C92744A...7872B22eB
1.36514782 ETH
120734602021-03-20 4:15:161294 days ago1616213716
0x2C92744A...7872B22eB
0.30336618 ETH
120444152021-03-15 17:09:321298 days ago1615828172
0x2C92744A...7872B22eB
0.3844766 ETH
120444152021-03-15 17:09:321298 days ago1615828172
0x2C92744A...7872B22eB
0.39628592 ETH
120444152021-03-15 17:09:321298 days ago1615828172
0x2C92744A...7872B22eB
0.08806353 ETH
120111212021-03-10 13:43:521303 days ago1615383832
0x2C92744A...7872B22eB
2.70463816 ETH
120111212021-03-10 13:43:521303 days ago1615383832
0x2C92744A...7872B22eB
2.78771197 ETH
120111212021-03-10 13:43:521303 days ago1615383832
0x2C92744A...7872B22eB
0.61949155 ETH
119746392021-03-04 22:57:581309 days ago1614898678
0x2C92744A...7872B22eB
0.07032767 ETH
119746392021-03-04 22:57:581309 days ago1614898678
0x2C92744A...7872B22eB
0.0724878 ETH
119746392021-03-04 22:57:581309 days ago1614898678
0x2C92744A...7872B22eB
0.0161084 ETH
119719962021-03-04 13:14:081309 days ago1614863648
0x2C92744A...7872B22eB
0.06954495 ETH
119719962021-03-04 13:14:081309 days ago1614863648
0x2C92744A...7872B22eB
0.07168104 ETH
119719962021-03-04 13:14:081309 days ago1614863648
0x2C92744A...7872B22eB
0.01592912 ETH
119719882021-03-04 13:12:041309 days ago1614863524
0x2C92744A...7872B22eB
0.06954495 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LPStaking

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-19
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

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;
    }
}


library UniswapV2Library {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'UniswapV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }
}


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;
    }
}


contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}


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;
    }
}


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;
    }
}


pragma solidity ^0.6.0;

/// @title LP Staking Contract

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

interface INodeRunnersNFT {
    function getFighter(uint256 tokenId) external view returns (uint256, uint256, uint256, uint256, uint256, uint256);
    function mint(address to, uint256 id, uint256 amount) external;
}

interface IUniswap {
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);
    function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function WETH() external pure returns(address);
    function getAmountsOut(uint amountIn, address[] memory path) external pure returns (uint[] memory amounts);
}

interface IFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IUniswapV2Pair {
    function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast);
    function totalSupply() external view returns (uint);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
}

contract LPStaking is ReentrancyGuard, Pausable, Ownable {
    using SafeMath for uint256;

    /* ========== STATE VARIABLES ========== */

    address payable public treasury;
    address public NFT;
    address public NDR;
    IERC20 public rewardsToken;
    IERC20 public stakingToken;
    IUniswap public uniswap;
    IFactory public factory;

    uint256 public periodFinish = 0;
    uint256 public rewardRate = 0;
    uint256 public rewardsDuration = 360 days;
    uint256 public lastUpdateTime;
    uint256 public rewardPerTokenStored;
    uint256 public interest = 10;
    uint256 public minLp = 2250000000000000000;
    uint256 public maxLp = 22500000000000000000;
    uint256 public mulHero1;
    uint256 public mulHero2;
    uint256 public mulSupport1;
    uint256 public mulSupport2;
    uint256 public deadline = 180;
    uint256 public feeRate = 50;
    uint256 public divider = 100;
    uint256 private _totalSupply;

    mapping(address => uint256) public userRewardPerTokenPaid;
    mapping(address => uint256) public rewards;
    mapping(address => uint256) private _balances;

    /* ========== CONSTRUCTOR ========== */

    constructor(
        address payable _treasury,
        address _NFT,
        address _NDR,
        address _rewardsToken,
        address _stakingToken,
        address _uniswap,
        address _factory
    ) public {
        treasury = _treasury;
        NFT = _NFT;
        NDR = _NDR;
        rewardsToken = IERC20(_rewardsToken);
        stakingToken = IERC20(_stakingToken);
        uniswap = IUniswap(_uniswap);
        factory = IFactory(_factory);
    }

    /**
    * @dev Initiate the account of destinations[i] with values[i]. The function must only be called when the contract is paused. The caller must check that destinations are unique addresses.
    * For a large number of destinations, separate the balances initialization in different calls to batchTransfer.
    * @param destinations List of addresses to set the values
    * @param values List of values to set
    */
    function batchTransfer(address[] memory destinations, uint256[] memory values) public onlyOwner whenPaused {
        require(destinations.length == values.length);

        uint256 length = destinations.length;
        uint i;

        for (i=0; i < length; i++) {
            rewards[destinations[i]] = values[i];
        }
    }

    /* ========== VIEWS ========== */

    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) external view returns (uint256) {
        return _balances[account];
    }

    function lastTimeRewardApplicable() public view returns (uint256) {
        return min(block.timestamp, periodFinish);
    }

    function rewardPerToken() public view returns (uint256) {
        if (_totalSupply == 0) {
            return rewardPerTokenStored;
        }
        return
            rewardPerTokenStored.add(
                lastTimeRewardApplicable()
                    .sub(lastUpdateTime)
                    .mul(rewardRate)
            );
    }

    function earned(address account) public view returns (uint256) {
        return
            _balances[account]
                .mul(rewardPerToken().sub(userRewardPerTokenPaid[account]))
                .div(1e18)
                .add(rewards[account]);
    }

    function getRewardForDuration() external view returns (uint256) {
        return rewardRate.mul(rewardsDuration);
    }

    function min(uint256 a, uint256 b) public pure returns (uint256) {
        return a < b ? a : b;
    }

    /* ========== UNISWAP FUNCTIONS ========== */

    receive() payable external {
        assert(msg.sender == uniswap.WETH());
    }

    function getAmountsOut(uint amount, address token) internal view returns (uint) {
        uint[] memory amounts = uniswap.getAmountsOut(amount, getPathForTokenToEth(token));
        uint256 outputTokenCount = uint256(amounts[amounts.length - 1]);
        return outputTokenCount;
    }

    function getPathForTokenToEth(address token) internal view returns (address[] memory) {
        address[] memory path = new address[](2);
        path[0] = uniswap.WETH();
        path[1] = token;
        return path;
    }

    function swapExactETHForTokens(uint amountEth) internal {
        uniswap.swapExactETHForTokens.value(amountEth)(0, getPathForTokenToEth(address(NDR)), address(this), now + deadline);
    }

    function addLiquidityETH(uint amountTokenDesired, uint amountEth) internal {
        IERC20(NDR).approve(address(uniswap), amountTokenDesired);
        uint amountADesired = getAmountsOut(amountEth, NDR);
        (uint amountTokenMin,) = quote(amountADesired, amountEth);
        uniswap.addLiquidityETH.value(amountEth)
        (address(NDR), amountTokenDesired, amountTokenMin, amountEth, address(0), now + deadline);
    }

    function quote(uint amountADesired, uint amountBDesired) internal view returns(uint, uint) {
        (uint reserveA, uint reserveB) = UniswapV2Library.getReserves(address(factory), NDR, uniswap.WETH());
        uint amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA);
        uint amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB);
        return (amountAOptimal, amountBOptimal);
    }

    /* ========== MUTATIVE FUNCTIONS ========== */

    function pause() public onlyOwner whenNotPaused {
        _pause();
        emit Paused(msg.sender);
    }

    function unpause() public onlyOwner whenPaused {
        _unpause();
        emit Unpaused(msg.sender);
    }

    function changeAddresses(address payable _treasury, address _NFT, address _NDR, address _rewardsToken, address _stakingToken, address _uniswap, address _factory) public onlyOwner {
        treasury = _treasury;
        NFT = _NFT;
        NDR = _NDR;
        rewardsToken = IERC20(_rewardsToken);
        stakingToken = IERC20(_stakingToken);
        uniswap = IUniswap(_uniswap);
        factory = IFactory(_factory);
    }

    function changeMultiplierHero(uint256 _mulHero1, uint256 _mulHero2) public onlyOwner returns(uint256, uint256) {
        mulHero1 = _mulHero1;
        mulHero2 = _mulHero2;
        return (mulHero1, mulHero2);
    }
    
    function changeMultiplierSupport(uint256 _mulSupport1, uint256 _mulSupport2) public onlyOwner returns(uint256, uint256) {
        mulSupport1 = _mulSupport1;
        mulSupport2 = _mulSupport2;
        return (mulSupport1, mulSupport2);
    }

    function changeDeadline(uint256 _deadline) public onlyOwner returns(uint256) {
        deadline = _deadline;
        return deadline;
    }

    function changeInterest(uint256 _interest) public onlyOwner returns(uint256) {
        interest = _interest;
        return interest;
    }
    
    function changeDivider(uint256 _divider) public onlyOwner returns(uint256) {
        divider = _divider;
        return divider;
    }

    function changeLpAmount(uint256 _minLp, uint256 _maxLp) public onlyOwner returns(uint256, uint256) {
        minLp = _minLp;
        maxLp = _maxLp;
        return (minLp, maxLp);
    }

    function changeFeeRate(uint256 _feeRate) public onlyOwner returns(uint256) {
        feeRate = _feeRate;
        return feeRate;
    }

    function withdrawDust(uint256 amount) public onlyOwner {
        treasury.transfer(amount);
    }

    function stake(uint256 amount) external nonReentrant whenNotPaused updateReward(msg.sender) {
        require(amount > 0, "Cannot stake 0");
        require(_balances[msg.sender].add(amount) >= minLp && _balances[msg.sender].add(amount) <= maxLp, "wrong amount");
        _totalSupply = _totalSupply.add(amount);
        _balances[msg.sender] = _balances[msg.sender].add(amount);
        stakingToken.transferFrom(msg.sender, address(this), amount);
        emit Staked(msg.sender, amount);
    }

    function withdraw(uint256 amount) public nonReentrant updateReward(msg.sender) {
        require(amount > 0, "Cannot withdraw 0");
        require(_balances[msg.sender].sub(amount) >= minLp || _balances[msg.sender].sub(amount) == 0, "wrong amount");
        _totalSupply = _totalSupply.sub(amount);
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        uint256 fee = amount.div(feeRate);
        stakingToken.transfer(0x1111111111111111111111111111111111111111, fee);
        stakingToken.transfer(msg.sender, amount.sub(fee));
        emit Withdrawn(msg.sender, amount);
    }

    function exit() external {
        withdraw(_balances[msg.sender]);
    }
    
    function getPriceHero(uint256 rarity) public view returns (uint) {
        (,uint reserves2) = UniswapV2Library.getReserves(address(factory), NDR, uniswap.WETH());
        uint price = reserves2 * 1e18 / IUniswapV2Pair(address(stakingToken)).totalSupply() * 2;
        return price * rarity * mulHero1 / mulHero2;
    }
    
    function getPriceSupport(uint256 rarity) public view returns (uint) {
        (,uint reserves2) = UniswapV2Library.getReserves(address(factory), NDR, uniswap.WETH());
        uint price = reserves2 * 1e18 / IUniswapV2Pair(address(stakingToken)).totalSupply() * 2;
        return price * rarity * mulSupport1 / mulSupport2;
    }

    function redeem(uint256 tokenId) public nonReentrant whenNotPaused updateReward(msg.sender) {
        (,,,,uint256 hashPrice,) = INodeRunnersNFT(address(NFT)).getFighter(tokenId);
        require(hashPrice > 0, "can't buy in hash");
        uint256 reward = rewards[msg.sender];
        require(reward >= hashPrice, "not enough hash");
        rewards[msg.sender] = rewards[msg.sender].sub(hashPrice);
        INodeRunnersNFT(NFT).mint(msg.sender, tokenId, 1);
        emit RewardPaid(msg.sender, reward);
    }

    function buy(uint256 tokenId) public nonReentrant whenNotPaused payable {
        (,,,uint256 rarity,,uint256 series) = INodeRunnersNFT(address(NFT)).getFighter(tokenId);
        uint256 price;
        if (series == 1) {
            price = getPriceHero(rarity);
        } else if (series == 2) {
            price = getPriceSupport(rarity);
        } else {
            revert("wrong id");
        }
        require(msg.value >= price, "wrong value");
        uint fee = msg.value / interest;
        treasury.transfer(fee);
        uint amountEth = (msg.value - fee) / 2;
        uint amountToken = getAmountsOut(amountEth, address(NDR));
        swapExactETHForTokens(amountEth);
        amountToken = amountToken - (amountToken / divider);
        amountEth = amountEth - (amountEth / divider);
        addLiquidityETH(amountToken, amountEth * 99 / 100);
        INodeRunnersNFT(NFT).mint(msg.sender, tokenId, 1);
    }

    /* ========== RESTRICTED FUNCTIONS ========== */

    function notifyRewardAmount(uint256 reward) external onlyOwner updateReward(address(0)) {
        if (block.timestamp >= periodFinish) {
            rewardRate = reward.div(rewardsDuration);
        } else {
            uint256 remaining = periodFinish.sub(block.timestamp);
            uint256 leftover = remaining.mul(rewardRate);
            rewardRate = reward.add(leftover).div(rewardsDuration);
        }
        uint256 balance = rewardsToken.balanceOf(address(this));
        require(
            rewardRate <= balance.div(rewardsDuration),
            "Provided reward too high"
        );
        lastUpdateTime = block.timestamp;
        periodFinish = block.timestamp.add(rewardsDuration);
        emit RewardAdded(reward);
    }

    function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner {
        // Cannot recover the staking token or the rewards token
        require(
            tokenAddress != address(stakingToken) &&
                tokenAddress != address(rewardsToken),
            "Cannot withdraw the staking or rewards tokens"
        );
        IERC20(tokenAddress).transfer(this.owner(), tokenAmount);
        emit Recovered(tokenAddress, tokenAmount);
    }

    function setRewardsDuration(uint256 _rewardsDuration) external onlyOwner {
        require(
            block.timestamp > periodFinish,
            "Previous rewards period must be complete before changing the duration for the new period"
        );
        rewardsDuration = _rewardsDuration;
        emit RewardsDurationUpdated(rewardsDuration);
    }

    /* ========== MODIFIERS ========== */

    modifier updateReward(address account) {
        rewardPerTokenStored = rewardPerToken();
        lastUpdateTime = lastTimeRewardApplicable();
        if (account != address(0)) {
            rewards[account] = earned(account);
            userRewardPerTokenPaid[account] = rewardPerTokenStored;
        }
        _;
    }

    /* ========== EVENTS ========== */

    event RewardAdded(uint256 reward);
    event Staked(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);
    event RewardPaid(address indexed user, uint256 reward);
    event RewardsDurationUpdated(uint256 newDuration);
    event Recovered(address token, uint256 amount);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"},{"internalType":"address","name":"_NFT","type":"address"},{"internalType":"address","name":"_NDR","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"},{"internalType":"address","name":"_uniswap","type":"address"},{"internalType":"address","name":"_factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"NDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"destinations","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"},{"internalType":"address","name":"_NFT","type":"address"},{"internalType":"address","name":"_NDR","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"},{"internalType":"address","name":"_uniswap","type":"address"},{"internalType":"address","name":"_factory","type":"address"}],"name":"changeAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"changeDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_divider","type":"uint256"}],"name":"changeDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeRate","type":"uint256"}],"name":"changeFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_interest","type":"uint256"}],"name":"changeInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minLp","type":"uint256"},{"internalType":"uint256","name":"_maxLp","type":"uint256"}],"name":"changeLpAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mulHero1","type":"uint256"},{"internalType":"uint256","name":"_mulHero2","type":"uint256"}],"name":"changeMultiplierHero","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mulSupport1","type":"uint256"},{"internalType":"uint256","name":"_mulSupport2","type":"uint256"}],"name":"changeMultiplierSupport","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"divider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rarity","type":"uint256"}],"name":"getPriceHero","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rarity","type":"uint256"}],"name":"getPriceSupport","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"minLp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mulHero1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mulHero2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mulSupport1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mulSupport2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"setRewardsDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":[],"name":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswap","outputs":[{"internalType":"contract IUniswap","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawDust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006009556000600a556301da9c00600b55600a600e55671f399b1438a10000600f55680138400eca364a000060105560b4601555603260165560646017553480156200005057600080fd5b5060405162003aaf38038062003aaf833981810160405260e08110156200007657600080fd5b508051602082015160408301516060840151608085015160a086015160c09096015160016000818155815460ff19169091559596949593949293919291620000bd62000195565b60018054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b03199081166001600160a01b03998a161790915560038054821697891697909717909655600480548716958816959095179094556005805486169387169390931790925560068054851691861691909117905560078054841691851691909117905560088054909216921691909117905562000199565b3390565b61390680620001a96000396000f3fe6080604052600436106103795760003560e01c80637c0b8de2116101d1578063c392f76611610102578063d65ff979116100a0578063e98009ce1161006f578063e98009ce14610c3b578063e9fad8ee14610c50578063ebe2b12b14610c65578063f2fde38b14610c7a5761040b565b8063d65ff97914610baf578063d96a094a14610bdf578063db006a7514610bfc578063df136d6514610c265761040b565b8063c8f33c91116100dc578063c8f33c9114610b46578063cc1a378f14610b5b578063cd3daf9d14610b85578063d1af0c7d14610b9a5761040b565b8063c392f76614610ab7578063c45a015514610acc578063c7bea69b14610ae15761040b565b8063978bbdb91161016f578063a694fc3a11610149578063a694fc3a14610a24578063affca93214610a4e578063ba35a81714610a78578063c352581914610aa25761040b565b8063978bbdb9146109ca578063a0406c1f146109df578063a5e72cd214610a0f5761040b565b806388d695b2116101ab57806388d695b2146108195780638980f11f146109495780638b876347146109825780638da5cb5b146109b55761040b565b80637c0b8de2146107da57806380faa57d146107ef5780638456cb59146108045761040b565b8063386a9525116102ab57806370a08231116102495780637706ae80116102235780637706ae80146107415780637aca97b51461076b5780637ae2b5c7146107955780637b0a47ee146107c55761040b565b806370a08231146106e4578063715018a61461071757806372f702f31461072c5761040b565b80634a6ed0b4116102855780634a6ed0b4146106675780635a63561c1461067c5780635c975abb146106a657806361d027b3146106cf5761040b565b8063386a9525146106135780633c6b16ab146106285780633f4ba83a146106525761040b565b8063252eccbf1161031857806329dcb0cf116102f257806329dcb0cf146105aa5780632e1a7d4d146105bf578063378efa37146105e957806337ee0074146105fe5761040b565b8063252eccbf146105065780632681f7e41461054f5780632829ce09146105805761040b565b806318160ddd1161035457806318160ddd1461049d5780631930ee00146104b25780631c1f78eb146104c7578063234531ce146104dc5761040b565b80628cc262146104105780630700037d146104555780631738568c146104885761040b565b3661040b57600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156103cc57600080fd5b505afa1580156103e0573d6000803e3d6000fd5b505050506040513d60208110156103f657600080fd5b50516001600160a01b0316331461040957fe5b005b600080fd5b34801561041c57600080fd5b506104436004803603602081101561043357600080fd5b50356001600160a01b0316610cad565b60408051918252519081900360200190f35b34801561046157600080fd5b506104436004803603602081101561047857600080fd5b50356001600160a01b0316610d2b565b34801561049457600080fd5b50610443610d3d565b3480156104a957600080fd5b50610443610d43565b3480156104be57600080fd5b50610443610d4a565b3480156104d357600080fd5b50610443610d50565b3480156104e857600080fd5b50610443600480360360208110156104ff57600080fd5b5035610d6e565b34801561051257600080fd5b506105366004803603604081101561052957600080fd5b5080359060200135610dd6565b6040805192835260208301919091528051918290030190f35b34801561055b57600080fd5b50610564610e4c565b604080516001600160a01b039092168252519081900360200190f35b34801561058c57600080fd5b50610443600480360360208110156105a357600080fd5b5035610e5b565b3480156105b657600080fd5b50610443610f95565b3480156105cb57600080fd5b50610409600480360360208110156105e257600080fd5b5035610f9b565b3480156105f557600080fd5b506104436112bb565b34801561060a57600080fd5b506104436112c1565b34801561061f57600080fd5b506104436112c7565b34801561063457600080fd5b506104096004803603602081101561064b57600080fd5b50356112cd565b34801561065e57600080fd5b50610409611514565b34801561067357600080fd5b506104436115fc565b34801561068857600080fd5b506104436004803603602081101561069f57600080fd5b5035611602565b3480156106b257600080fd5b506106bb61166a565b604080519115158252519081900360200190f35b3480156106db57600080fd5b50610564611673565b3480156106f057600080fd5b506104436004803603602081101561070757600080fd5b50356001600160a01b0316611682565b34801561072357600080fd5b5061040961169d565b34801561073857600080fd5b5061056461174a565b34801561074d57600080fd5b506104436004803603602081101561076457600080fd5b5035611759565b34801561077757600080fd5b506104436004803603602081101561078e57600080fd5b5035611859565b3480156107a157600080fd5b50610443600480360360408110156107b857600080fd5b50803590602001356118c1565b3480156107d157600080fd5b506104436118d9565b3480156107e657600080fd5b506105646118df565b3480156107fb57600080fd5b506104436118ee565b34801561081057600080fd5b506104096118fc565b34801561082557600080fd5b506104096004803603604081101561083c57600080fd5b810190602081018135600160201b81111561085657600080fd5b82018360208201111561086857600080fd5b803590602001918460208302840111600160201b8311171561088957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108d857600080fd5b8201836020820111156108ea57600080fd5b803590602001918460208302840111600160201b8311171561090b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506119e1945050505050565b34801561095557600080fd5b506104096004803603604081101561096c57600080fd5b506001600160a01b038135169060200135611afd565b34801561098e57600080fd5b50610443600480360360208110156109a557600080fd5b50356001600160a01b0316611cf7565b3480156109c157600080fd5b50610564611d09565b3480156109d657600080fd5b50610443611d1d565b3480156109eb57600080fd5b5061053660048036036040811015610a0257600080fd5b5080359060200135611d23565b348015610a1b57600080fd5b50610443611d93565b348015610a3057600080fd5b5061040960048036036020811015610a4757600080fd5b5035611d99565b348015610a5a57600080fd5b5061044360048036036020811015610a7157600080fd5b5035612056565b348015610a8457600080fd5b5061040960048036036020811015610a9b57600080fd5b50356120be565b348015610aae57600080fd5b50610443612159565b348015610ac357600080fd5b5061044361215f565b348015610ad857600080fd5b50610564612165565b348015610aed57600080fd5b50610409600480360360e0811015610b0457600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c09091013516612174565b348015610b5257600080fd5b5061044361224f565b348015610b6757600080fd5b5061040960048036036020811015610b7e57600080fd5b5035612255565b348015610b9157600080fd5b5061044361232d565b348015610ba657600080fd5b50610564612369565b348015610bbb57600080fd5b5061053660048036036040811015610bd257600080fd5b5080359060200135612378565b61040960048036036020811015610bf557600080fd5b50356123e8565b348015610c0857600080fd5b5061040960048036036020811015610c1f57600080fd5b50356126e6565b348015610c3257600080fd5b506104436129ce565b348015610c4757600080fd5b506105646129d4565b348015610c5c57600080fd5b506104096129e3565b348015610c7157600080fd5b506104436129fe565b348015610c8657600080fd5b5061040960048036036020811015610c9d57600080fd5b50356001600160a01b0316612a04565b6001600160a01b0381166000908152601a60209081526040808320546019909252822054610d259190610d1f90670de0b6b3a764000090610d1990610cfa90610cf461232d565b90612b0d565b6001600160a01b0388166000908152601b602052604090205490612b4f565b90612ba8565b90612bea565b92915050565b601a6020526000908152604090205481565b60145481565b6018545b90565b60115481565b6000610d69600b54600a54612b4f90919063ffffffff16565b905090565b6000610d78612c44565b60015461010090046001600160a01b03908116911614610dcd576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601781905590565b600080610de1612c44565b60015461010090046001600160a01b03908116911614610e36576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50506013829055601481905581815b9250929050565b6007546001600160a01b031681565b60085460048054600754604080516315ab88c960e31b815290516000958695610ee4956001600160a01b03928316959083169492169263ad5c4648928083019260209291829003018186803b158015610eb357600080fd5b505afa158015610ec7573d6000803e3d6000fd5b505050506040513d6020811015610edd57600080fd5b5051612c48565b9150506000600660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3757600080fd5b505afa158015610f4b573d6000803e3d6000fd5b505050506040513d6020811015610f6157600080fd5b5051670de0b6b3a7640000830281610f7557fe5b0460020290506012546011548583020281610f8c57fe5b04949350505050565b60155481565b60026000541415610fe1576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005533610fef61232d565b600d55610ffa6118ee565b600c556001600160a01b038116156110415761101581610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b6000821161108a576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b600f54336000908152601b60205260409020546110a79084612b0d565b1015806110cb5750336000908152601b60205260409020546110c99083612b0d565b155b61110b576040805162461bcd60e51b815260206004820152600c60248201526b1ddc9bdb99c8185b5bdd5b9d60a21b604482015290519081900360640190fd5b6018546111189083612b0d565b601855336000908152601b60205260409020546111359083612b0d565b336000908152601b6020526040812091909155601654611156908490612ba8565b6006546040805163a9059cbb60e01b815273111111111111111111111111111111111111111160048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050506040513d60208110156111eb57600080fd5b50506006546001600160a01b031663a9059cbb336112098685612b0d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561124f57600080fd5b505af1158015611263573d6000803e3d6000fd5b505050506040513d602081101561127957600080fd5b505060408051848152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050600160005550565b60175481565b60135481565b600b5481565b6112d5612c44565b60015461010090046001600160a01b0390811691161461132a576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b600061133461232d565b600d5561133f6118ee565b600c556001600160a01b038116156113865761135a81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60095442106113a557600b5461139d908390612ba8565b600a556113e8565b6009546000906113b59042612b0d565b905060006113ce600a5483612b4f90919063ffffffff16565b600b549091506113e290610d198684612bea565b600a5550505b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561143357600080fd5b505afa158015611447573d6000803e3d6000fd5b505050506040513d602081101561145d57600080fd5b5051600b54909150611470908290612ba8565b600a5411156114c6576040805162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f20686967680000000000000000604482015290519081900360640190fd5b42600c819055600b546114d99190612bea565b6009556040805184815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1505050565b61151c612c44565b60015461010090046001600160a01b03908116911614611571576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff166115bf576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6115c7612d16565b6040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b60125481565b600061160c612c44565b60015461010090046001600160a01b03908116911614611661576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50600e81905590565b60015460ff1690565b6002546001600160a01b031681565b6001600160a01b03166000908152601b602052604090205490565b6116a5612c44565b60015461010090046001600160a01b039081169116146116fa576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360018054610100600160a81b0319169055565b6006546001600160a01b031681565b60085460048054600754604080516315ab88c960e31b8152905160009586956117b1956001600160a01b03928316959083169492169263ad5c4648928083019260209291829003018186803b158015610eb357600080fd5b9150506000600660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561180457600080fd5b505afa158015611818573d6000803e3d6000fd5b505050506040513d602081101561182e57600080fd5b5051670de0b6b3a764000083028161184257fe5b0460020290506014546013548583020281610f8c57fe5b6000611863612c44565b60015461010090046001600160a01b039081169116146118b8576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601581905590565b60008183106118d057816118d2565b825b9392505050565b600a5481565b6003546001600160a01b031681565b6000610d69426009546118c1565b611904612c44565b60015461010090046001600160a01b03908116911614611959576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff16156119a4576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6119ac612db4565b6040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6119e9612c44565b60015461010090046001600160a01b03908116911614611a3e576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff16611a8c576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b8051825114611a9a57600080fd5b815160005b81811015611af757828181518110611ab357fe5b6020026020010151601a6000868481518110611acb57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055600101611a9f565b50505050565b611b05612c44565b60015461010090046001600160a01b03908116911614611b5a576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6006546001600160a01b03838116911614801590611b8657506005546001600160a01b03838116911614155b611bc15760405162461bcd60e51b815260040180806020018281038252602d8152602001806138a4602d913960400191505060405180910390fd5b816001600160a01b031663a9059cbb306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0957600080fd5b505afa158015611c1d573d6000803e3d6000fd5b505050506040513d6020811015611c3357600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482018590525160448083019260209291908290030181600087803b158015611c8357600080fd5b505af1158015611c97573d6000803e3d6000fd5b505050506040513d6020811015611cad57600080fd5b5050604080516001600160a01b03841681526020810183905281517f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28929181900390910190a15050565b60196020526000908152604090205481565b60015461010090046001600160a01b031690565b60165481565b600080611d2e612c44565b60015461010090046001600160a01b03908116911614611d83576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b5050601182905560128190559091565b60105481565b60026000541415611ddf576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff1615611e2f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b33611e3861232d565b600d55611e436118ee565b600c556001600160a01b03811615611e8a57611e5e81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60008211611ed0576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b600f54336000908152601b6020526040902054611eed9084612bea565b10158015611f165750601054336000908152601b6020526040902054611f139084612bea565b11155b611f56576040805162461bcd60e51b815260206004820152600c60248201526b1ddc9bdb99c8185b5bdd5b9d60a21b604482015290519081900360640190fd5b601854611f639083612bea565b601855336000908152601b6020526040902054611f809083612bea565b336000818152601b602090815260408083209490945560065484516323b872dd60e01b815260048101949094523060248501526044840187905293516001600160a01b03909416936323b872dd93606480820194918390030190829087803b158015611feb57600080fd5b505af1158015611fff573d6000803e3d6000fd5b505050506040513d602081101561201557600080fd5b505060408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a250506001600055565b6000612060612c44565b60015461010090046001600160a01b039081169116146120b5576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601681905590565b6120c6612c44565b60015461010090046001600160a01b0390811691161461211b576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6002546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612155573d6000803e3d6000fd5b5050565b600f5481565b600e5481565b6008546001600160a01b031681565b61217c612c44565b60015461010090046001600160a01b039081169116146121d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b600280546001600160a01b03199081166001600160a01b03998a1617909155600380548216978916979097179096556004805487169588169590951790945560058054861693871693909317909255600680548516918616919091179055600780548416918516919091179055600880549092169216919091179055565b600c5481565b61225d612c44565b60015461010090046001600160a01b039081169116146122b2576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60095442116122f25760405162461bcd60e51b81526004018080602001828103825260588152602001806137536058913960600191505060405180910390fd5b600b8190556040805182815290517ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39181900360200190a150565b6000601854600014156123435750600d54610d47565b610d69612360600a5461235a600c54610cf46118ee565b90612b4f565b600d5490612bea565b6005546001600160a01b031681565b600080612383612c44565b60015461010090046001600160a01b039081169116146123d8576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b5050600f82905560108190559091565b6002600054141561242e576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff161561247e576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60035460408051632227e87760e21b815260048101849052905160009283926001600160a01b039091169163889fa1dc9160248082019260c092909190829003018186803b1580156124cf57600080fd5b505afa1580156124e3573d6000803e3d6000fd5b505050506040513d60c08110156124f957600080fd5b50606081015160a0909101519092509050600060018214156125255761251e83610e5b565b905061256f565b81600214156125375761251e83611759565b6040805162461bcd60e51b81526020600482015260086024820152671ddc9bdb99c81a5960c21b604482015290519081900360640190fd5b803410156125b2576040805162461bcd60e51b815260206004820152600b60248201526a77726f6e672076616c756560a81b604482015290519081900360640190fd5b6000600e5434816125bf57fe5b6002546040519290910492506001600160a01b03169082156108fc029083906000818181858888f193505050501580156125fd573d6000803e3d6000fd5b50600060028234038161260c57fe5b600454919004915060009061262b9083906001600160a01b0316612e34565b905061263682612fbe565b601754818161264157fe5b0481039050601754828161265157fe5b04909103906126668160646063850204613148565b60035460408051630ab714fb60e11b8152336004820152602481018a90526001604482015290516001600160a01b039092169163156e29f69160648082019260009290919082900301818387803b1580156126c057600080fd5b505af11580156126d4573d6000803e3d6000fd5b50506001600055505050505050505050565b6002600054141561272c576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff161561277c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3361278561232d565b600d556127906118ee565b600c556001600160a01b038116156127d7576127ab81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60035460408051632227e87760e21b81526004810185905290516000926001600160a01b03169163889fa1dc9160248083019260c0929190829003018186803b15801561282357600080fd5b505afa158015612837573d6000803e3d6000fd5b505050506040513d60c081101561284d57600080fd5b506080015190508061289a576040805162461bcd60e51b81526020600482015260116024820152700c6c2dc4ee840c4eaf240d2dc40d0c2e6d607b1b604482015290519081900360640190fd5b336000908152601a6020526040902054818110156128f1576040805162461bcd60e51b815260206004820152600f60248201526e0dcdee840cadcdeeaced040d0c2e6d608b1b604482015290519081900360640190fd5b336000908152601a602052604090205461290b9083612b0d565b336000818152601a6020526040808220939093556003548351630ab714fb60e11b81526004810193909352602483018890526001604484015292516001600160a01b039093169263156e29f692606480820193929182900301818387803b15801561297557600080fd5b505af1158015612989573d6000803e3d6000fd5b50506040805184815290513393507fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048692509081900360200190a2505060016000555050565b600d5481565b6004546001600160a01b031681565b336000908152601b60205260409020546129fc90610f9b565b565b60095481565b612a0c612c44565b60015461010090046001600160a01b03908116911614612a61576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6001600160a01b038116612aa65760405162461bcd60e51b81526004018080602001828103825260268152602001806137cb6026913960400191505060405180910390fd5b6001546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006118d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132a8565b600082612b5e57506000610d25565b82820282848281612b6b57fe5b04146118d25760405162461bcd60e51b815260040180806020018281038252602181526020018061383e6021913960400191505060405180910390fd5b60006118d283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061333f565b6000828201838110156118d2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6000806000612c5785856133a4565b509050600080612c6888888861347b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612ca057600080fd5b505afa158015612cb4573d6000803e3d6000fd5b505050506040513d6060811015612cca57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614612d04578082612d07565b81815b90999098509650505050505050565b60015460ff16612d64576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612d97612c44565b604080516001600160a01b039092168252519081900360200190a1565b60015460ff1615612dff576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d97612c44565b6007546000906060906001600160a01b031663d06ca61f85612e558661353b565b6040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015612eaa578181015183820152602001612e92565b50505050905001935050505060006040518083038186803b158015612ece57600080fd5b505afa158015612ee2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612f0b57600080fd5b8101908080516040519392919084600160201b821115612f2a57600080fd5b908301906020820185811115612f3f57600080fd5b82518660208202830111600160201b82111715612f5b57600080fd5b82525081516020918201928201910280838360005b83811015612f88578181015183820152602001612f70565b505050509050016040525050509050600081600183510381518110612fa957fe5b60200260200101519050809250505092915050565b6007546004546001600160a01b0391821691637ff36ab5918491600091612fe5911661353b565b3060155442016040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561305557818101518382015260200161303d565b50505050905001955050505050506000604051808303818588803b15801561307c57600080fd5b505af1158015613090573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405260208110156130ba57600080fd5b8101908080516040519392919084600160201b8211156130d957600080fd5b9083019060208201858111156130ee57600080fd5b82518660208202830111600160201b8211171561310a57600080fd5b82525081516020918201928201910280838360005b8381101561313757818101518382015260200161311f565b505050509050016040525050505050565b600480546007546040805163095ea7b360e01b81526001600160a01b0392831694810194909452602484018690525191169163095ea7b39160448083019260209291908290030181600087803b1580156131a157600080fd5b505af11580156131b5573d6000803e3d6000fd5b505050506040513d60208110156131cb57600080fd5b50506004546000906131e79083906001600160a01b0316612e34565b905060006131f58284613629565b50600754600480546015546040805163f305d71960e01b81526001600160a01b0393841694810194909452602484018a90526044840186905260648401899052600060848501524290910160a4840152519394509091169163f305d71991869160c480830192606092919082900301818588803b15801561327557600080fd5b505af1158015613289573d6000803e3d6000fd5b50505050506040513d60608110156132a057600080fd5b505050505050565b600081848411156133375760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132fc5781810151838201526020016132e4565b50505050905090810190601f1680156133295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361338e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156132fc5781810151838201526020016132e4565b50600083858161339a57fe5b0495945050505050565b600080826001600160a01b0316846001600160a01b031614156133f85760405162461bcd60e51b81526004018080602001828103825260258152602001806137f16025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061341857828461341b565b83835b90925090506001600160a01b038216610e45576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b600080600061348a85856133a4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805160028082526060808301845292839291906020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156135a357600080fd5b505afa1580156135b7573d6000803e3d6000fd5b505050506040513d60208110156135cd57600080fd5b5051815182906000906135dc57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061360a57fe5b6001600160a01b03909216602092830291909101909101529050919050565b60085460048054600754604080516315ab88c960e31b81529051600095869586958695613686956001600160a01b0394851695928516949091169263ad5c4648928282019260209290829003018186803b158015610eb357600080fd5b9150915060006136978683856136b5565b905060006136a68885856136b5565b91989197509095505050505050565b60008084116136f55760405162461bcd60e51b815260040180806020018281038252602581526020018061387f6025913960400191505060405180910390fd5b6000831180156137055750600082115b6137405760405162461bcd60e51b81526004018080602001828103825260288152602001806138166028913960400191505060405180910390fd5b8261374b8584612b4f565b81610f8c57fefe50726576696f7573207265776172647320706572696f64206d75737420626520636f6d706c657465206265666f7265206368616e67696e6720746865206475726174696f6e20666f7220746865206e657720706572696f645265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e5443616e6e6f7420776974686472617720746865207374616b696e67206f72207265776172647320746f6b656e73a26469706673582212208b09ebf4d7089ba0de49438a95dde251408eb25e26bf20b0826a49ab42b5881b64736f6c634300060c003300000000000000000000000007f6624b895b47ae66e916ec6a0479d7c3cfa31900000000000000000000000089ee76cc25fcbf1714ed575faa6a10202b71c26a000000000000000000000000739763a258640919981f9ba610ae65492455be53000000000000000000000000300496a0352e2e302a3d6df66e66b08625c305be00000000000000000000000065d0a154d2425ce2fd5fed3bdae94d9a9afe55ce0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f

Deployed Bytecode

0x6080604052600436106103795760003560e01c80637c0b8de2116101d1578063c392f76611610102578063d65ff979116100a0578063e98009ce1161006f578063e98009ce14610c3b578063e9fad8ee14610c50578063ebe2b12b14610c65578063f2fde38b14610c7a5761040b565b8063d65ff97914610baf578063d96a094a14610bdf578063db006a7514610bfc578063df136d6514610c265761040b565b8063c8f33c91116100dc578063c8f33c9114610b46578063cc1a378f14610b5b578063cd3daf9d14610b85578063d1af0c7d14610b9a5761040b565b8063c392f76614610ab7578063c45a015514610acc578063c7bea69b14610ae15761040b565b8063978bbdb91161016f578063a694fc3a11610149578063a694fc3a14610a24578063affca93214610a4e578063ba35a81714610a78578063c352581914610aa25761040b565b8063978bbdb9146109ca578063a0406c1f146109df578063a5e72cd214610a0f5761040b565b806388d695b2116101ab57806388d695b2146108195780638980f11f146109495780638b876347146109825780638da5cb5b146109b55761040b565b80637c0b8de2146107da57806380faa57d146107ef5780638456cb59146108045761040b565b8063386a9525116102ab57806370a08231116102495780637706ae80116102235780637706ae80146107415780637aca97b51461076b5780637ae2b5c7146107955780637b0a47ee146107c55761040b565b806370a08231146106e4578063715018a61461071757806372f702f31461072c5761040b565b80634a6ed0b4116102855780634a6ed0b4146106675780635a63561c1461067c5780635c975abb146106a657806361d027b3146106cf5761040b565b8063386a9525146106135780633c6b16ab146106285780633f4ba83a146106525761040b565b8063252eccbf1161031857806329dcb0cf116102f257806329dcb0cf146105aa5780632e1a7d4d146105bf578063378efa37146105e957806337ee0074146105fe5761040b565b8063252eccbf146105065780632681f7e41461054f5780632829ce09146105805761040b565b806318160ddd1161035457806318160ddd1461049d5780631930ee00146104b25780631c1f78eb146104c7578063234531ce146104dc5761040b565b80628cc262146104105780630700037d146104555780631738568c146104885761040b565b3661040b57600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156103cc57600080fd5b505afa1580156103e0573d6000803e3d6000fd5b505050506040513d60208110156103f657600080fd5b50516001600160a01b0316331461040957fe5b005b600080fd5b34801561041c57600080fd5b506104436004803603602081101561043357600080fd5b50356001600160a01b0316610cad565b60408051918252519081900360200190f35b34801561046157600080fd5b506104436004803603602081101561047857600080fd5b50356001600160a01b0316610d2b565b34801561049457600080fd5b50610443610d3d565b3480156104a957600080fd5b50610443610d43565b3480156104be57600080fd5b50610443610d4a565b3480156104d357600080fd5b50610443610d50565b3480156104e857600080fd5b50610443600480360360208110156104ff57600080fd5b5035610d6e565b34801561051257600080fd5b506105366004803603604081101561052957600080fd5b5080359060200135610dd6565b6040805192835260208301919091528051918290030190f35b34801561055b57600080fd5b50610564610e4c565b604080516001600160a01b039092168252519081900360200190f35b34801561058c57600080fd5b50610443600480360360208110156105a357600080fd5b5035610e5b565b3480156105b657600080fd5b50610443610f95565b3480156105cb57600080fd5b50610409600480360360208110156105e257600080fd5b5035610f9b565b3480156105f557600080fd5b506104436112bb565b34801561060a57600080fd5b506104436112c1565b34801561061f57600080fd5b506104436112c7565b34801561063457600080fd5b506104096004803603602081101561064b57600080fd5b50356112cd565b34801561065e57600080fd5b50610409611514565b34801561067357600080fd5b506104436115fc565b34801561068857600080fd5b506104436004803603602081101561069f57600080fd5b5035611602565b3480156106b257600080fd5b506106bb61166a565b604080519115158252519081900360200190f35b3480156106db57600080fd5b50610564611673565b3480156106f057600080fd5b506104436004803603602081101561070757600080fd5b50356001600160a01b0316611682565b34801561072357600080fd5b5061040961169d565b34801561073857600080fd5b5061056461174a565b34801561074d57600080fd5b506104436004803603602081101561076457600080fd5b5035611759565b34801561077757600080fd5b506104436004803603602081101561078e57600080fd5b5035611859565b3480156107a157600080fd5b50610443600480360360408110156107b857600080fd5b50803590602001356118c1565b3480156107d157600080fd5b506104436118d9565b3480156107e657600080fd5b506105646118df565b3480156107fb57600080fd5b506104436118ee565b34801561081057600080fd5b506104096118fc565b34801561082557600080fd5b506104096004803603604081101561083c57600080fd5b810190602081018135600160201b81111561085657600080fd5b82018360208201111561086857600080fd5b803590602001918460208302840111600160201b8311171561088957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108d857600080fd5b8201836020820111156108ea57600080fd5b803590602001918460208302840111600160201b8311171561090b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506119e1945050505050565b34801561095557600080fd5b506104096004803603604081101561096c57600080fd5b506001600160a01b038135169060200135611afd565b34801561098e57600080fd5b50610443600480360360208110156109a557600080fd5b50356001600160a01b0316611cf7565b3480156109c157600080fd5b50610564611d09565b3480156109d657600080fd5b50610443611d1d565b3480156109eb57600080fd5b5061053660048036036040811015610a0257600080fd5b5080359060200135611d23565b348015610a1b57600080fd5b50610443611d93565b348015610a3057600080fd5b5061040960048036036020811015610a4757600080fd5b5035611d99565b348015610a5a57600080fd5b5061044360048036036020811015610a7157600080fd5b5035612056565b348015610a8457600080fd5b5061040960048036036020811015610a9b57600080fd5b50356120be565b348015610aae57600080fd5b50610443612159565b348015610ac357600080fd5b5061044361215f565b348015610ad857600080fd5b50610564612165565b348015610aed57600080fd5b50610409600480360360e0811015610b0457600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c09091013516612174565b348015610b5257600080fd5b5061044361224f565b348015610b6757600080fd5b5061040960048036036020811015610b7e57600080fd5b5035612255565b348015610b9157600080fd5b5061044361232d565b348015610ba657600080fd5b50610564612369565b348015610bbb57600080fd5b5061053660048036036040811015610bd257600080fd5b5080359060200135612378565b61040960048036036020811015610bf557600080fd5b50356123e8565b348015610c0857600080fd5b5061040960048036036020811015610c1f57600080fd5b50356126e6565b348015610c3257600080fd5b506104436129ce565b348015610c4757600080fd5b506105646129d4565b348015610c5c57600080fd5b506104096129e3565b348015610c7157600080fd5b506104436129fe565b348015610c8657600080fd5b5061040960048036036020811015610c9d57600080fd5b50356001600160a01b0316612a04565b6001600160a01b0381166000908152601a60209081526040808320546019909252822054610d259190610d1f90670de0b6b3a764000090610d1990610cfa90610cf461232d565b90612b0d565b6001600160a01b0388166000908152601b602052604090205490612b4f565b90612ba8565b90612bea565b92915050565b601a6020526000908152604090205481565b60145481565b6018545b90565b60115481565b6000610d69600b54600a54612b4f90919063ffffffff16565b905090565b6000610d78612c44565b60015461010090046001600160a01b03908116911614610dcd576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601781905590565b600080610de1612c44565b60015461010090046001600160a01b03908116911614610e36576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50506013829055601481905581815b9250929050565b6007546001600160a01b031681565b60085460048054600754604080516315ab88c960e31b815290516000958695610ee4956001600160a01b03928316959083169492169263ad5c4648928083019260209291829003018186803b158015610eb357600080fd5b505afa158015610ec7573d6000803e3d6000fd5b505050506040513d6020811015610edd57600080fd5b5051612c48565b9150506000600660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3757600080fd5b505afa158015610f4b573d6000803e3d6000fd5b505050506040513d6020811015610f6157600080fd5b5051670de0b6b3a7640000830281610f7557fe5b0460020290506012546011548583020281610f8c57fe5b04949350505050565b60155481565b60026000541415610fe1576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005533610fef61232d565b600d55610ffa6118ee565b600c556001600160a01b038116156110415761101581610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b6000821161108a576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b600f54336000908152601b60205260409020546110a79084612b0d565b1015806110cb5750336000908152601b60205260409020546110c99083612b0d565b155b61110b576040805162461bcd60e51b815260206004820152600c60248201526b1ddc9bdb99c8185b5bdd5b9d60a21b604482015290519081900360640190fd5b6018546111189083612b0d565b601855336000908152601b60205260409020546111359083612b0d565b336000908152601b6020526040812091909155601654611156908490612ba8565b6006546040805163a9059cbb60e01b815273111111111111111111111111111111111111111160048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050506040513d60208110156111eb57600080fd5b50506006546001600160a01b031663a9059cbb336112098685612b0d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561124f57600080fd5b505af1158015611263573d6000803e3d6000fd5b505050506040513d602081101561127957600080fd5b505060408051848152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050600160005550565b60175481565b60135481565b600b5481565b6112d5612c44565b60015461010090046001600160a01b0390811691161461132a576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b600061133461232d565b600d5561133f6118ee565b600c556001600160a01b038116156113865761135a81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60095442106113a557600b5461139d908390612ba8565b600a556113e8565b6009546000906113b59042612b0d565b905060006113ce600a5483612b4f90919063ffffffff16565b600b549091506113e290610d198684612bea565b600a5550505b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561143357600080fd5b505afa158015611447573d6000803e3d6000fd5b505050506040513d602081101561145d57600080fd5b5051600b54909150611470908290612ba8565b600a5411156114c6576040805162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f20686967680000000000000000604482015290519081900360640190fd5b42600c819055600b546114d99190612bea565b6009556040805184815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1505050565b61151c612c44565b60015461010090046001600160a01b03908116911614611571576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff166115bf576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6115c7612d16565b6040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b60125481565b600061160c612c44565b60015461010090046001600160a01b03908116911614611661576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50600e81905590565b60015460ff1690565b6002546001600160a01b031681565b6001600160a01b03166000908152601b602052604090205490565b6116a5612c44565b60015461010090046001600160a01b039081169116146116fa576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360018054610100600160a81b0319169055565b6006546001600160a01b031681565b60085460048054600754604080516315ab88c960e31b8152905160009586956117b1956001600160a01b03928316959083169492169263ad5c4648928083019260209291829003018186803b158015610eb357600080fd5b9150506000600660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561180457600080fd5b505afa158015611818573d6000803e3d6000fd5b505050506040513d602081101561182e57600080fd5b5051670de0b6b3a764000083028161184257fe5b0460020290506014546013548583020281610f8c57fe5b6000611863612c44565b60015461010090046001600160a01b039081169116146118b8576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601581905590565b60008183106118d057816118d2565b825b9392505050565b600a5481565b6003546001600160a01b031681565b6000610d69426009546118c1565b611904612c44565b60015461010090046001600160a01b03908116911614611959576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff16156119a4576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6119ac612db4565b6040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6119e9612c44565b60015461010090046001600160a01b03908116911614611a3e576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60015460ff16611a8c576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b8051825114611a9a57600080fd5b815160005b81811015611af757828181518110611ab357fe5b6020026020010151601a6000868481518110611acb57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055600101611a9f565b50505050565b611b05612c44565b60015461010090046001600160a01b03908116911614611b5a576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6006546001600160a01b03838116911614801590611b8657506005546001600160a01b03838116911614155b611bc15760405162461bcd60e51b815260040180806020018281038252602d8152602001806138a4602d913960400191505060405180910390fd5b816001600160a01b031663a9059cbb306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0957600080fd5b505afa158015611c1d573d6000803e3d6000fd5b505050506040513d6020811015611c3357600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482018590525160448083019260209291908290030181600087803b158015611c8357600080fd5b505af1158015611c97573d6000803e3d6000fd5b505050506040513d6020811015611cad57600080fd5b5050604080516001600160a01b03841681526020810183905281517f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28929181900390910190a15050565b60196020526000908152604090205481565b60015461010090046001600160a01b031690565b60165481565b600080611d2e612c44565b60015461010090046001600160a01b03908116911614611d83576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b5050601182905560128190559091565b60105481565b60026000541415611ddf576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff1615611e2f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b33611e3861232d565b600d55611e436118ee565b600c556001600160a01b03811615611e8a57611e5e81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60008211611ed0576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b600f54336000908152601b6020526040902054611eed9084612bea565b10158015611f165750601054336000908152601b6020526040902054611f139084612bea565b11155b611f56576040805162461bcd60e51b815260206004820152600c60248201526b1ddc9bdb99c8185b5bdd5b9d60a21b604482015290519081900360640190fd5b601854611f639083612bea565b601855336000908152601b6020526040902054611f809083612bea565b336000818152601b602090815260408083209490945560065484516323b872dd60e01b815260048101949094523060248501526044840187905293516001600160a01b03909416936323b872dd93606480820194918390030190829087803b158015611feb57600080fd5b505af1158015611fff573d6000803e3d6000fd5b505050506040513d602081101561201557600080fd5b505060408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a250506001600055565b6000612060612c44565b60015461010090046001600160a01b039081169116146120b5576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b50601681905590565b6120c6612c44565b60015461010090046001600160a01b0390811691161461211b576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6002546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612155573d6000803e3d6000fd5b5050565b600f5481565b600e5481565b6008546001600160a01b031681565b61217c612c44565b60015461010090046001600160a01b039081169116146121d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b600280546001600160a01b03199081166001600160a01b03998a1617909155600380548216978916979097179096556004805487169588169590951790945560058054861693871693909317909255600680548516918616919091179055600780548416918516919091179055600880549092169216919091179055565b600c5481565b61225d612c44565b60015461010090046001600160a01b039081169116146122b2576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b60095442116122f25760405162461bcd60e51b81526004018080602001828103825260588152602001806137536058913960600191505060405180910390fd5b600b8190556040805182815290517ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39181900360200190a150565b6000601854600014156123435750600d54610d47565b610d69612360600a5461235a600c54610cf46118ee565b90612b4f565b600d5490612bea565b6005546001600160a01b031681565b600080612383612c44565b60015461010090046001600160a01b039081169116146123d8576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b5050600f82905560108190559091565b6002600054141561242e576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff161561247e576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60035460408051632227e87760e21b815260048101849052905160009283926001600160a01b039091169163889fa1dc9160248082019260c092909190829003018186803b1580156124cf57600080fd5b505afa1580156124e3573d6000803e3d6000fd5b505050506040513d60c08110156124f957600080fd5b50606081015160a0909101519092509050600060018214156125255761251e83610e5b565b905061256f565b81600214156125375761251e83611759565b6040805162461bcd60e51b81526020600482015260086024820152671ddc9bdb99c81a5960c21b604482015290519081900360640190fd5b803410156125b2576040805162461bcd60e51b815260206004820152600b60248201526a77726f6e672076616c756560a81b604482015290519081900360640190fd5b6000600e5434816125bf57fe5b6002546040519290910492506001600160a01b03169082156108fc029083906000818181858888f193505050501580156125fd573d6000803e3d6000fd5b50600060028234038161260c57fe5b600454919004915060009061262b9083906001600160a01b0316612e34565b905061263682612fbe565b601754818161264157fe5b0481039050601754828161265157fe5b04909103906126668160646063850204613148565b60035460408051630ab714fb60e11b8152336004820152602481018a90526001604482015290516001600160a01b039092169163156e29f69160648082019260009290919082900301818387803b1580156126c057600080fd5b505af11580156126d4573d6000803e3d6000fd5b50506001600055505050505050505050565b6002600054141561272c576040805162461bcd60e51b815260206004820152601f60248201526000805160206137ab833981519152604482015290519081900360640190fd5b600260005560015460ff161561277c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3361278561232d565b600d556127906118ee565b600c556001600160a01b038116156127d7576127ab81610cad565b6001600160a01b0382166000908152601a6020908152604080832093909355600d546019909152919020555b60035460408051632227e87760e21b81526004810185905290516000926001600160a01b03169163889fa1dc9160248083019260c0929190829003018186803b15801561282357600080fd5b505afa158015612837573d6000803e3d6000fd5b505050506040513d60c081101561284d57600080fd5b506080015190508061289a576040805162461bcd60e51b81526020600482015260116024820152700c6c2dc4ee840c4eaf240d2dc40d0c2e6d607b1b604482015290519081900360640190fd5b336000908152601a6020526040902054818110156128f1576040805162461bcd60e51b815260206004820152600f60248201526e0dcdee840cadcdeeaced040d0c2e6d608b1b604482015290519081900360640190fd5b336000908152601a602052604090205461290b9083612b0d565b336000818152601a6020526040808220939093556003548351630ab714fb60e11b81526004810193909352602483018890526001604484015292516001600160a01b039093169263156e29f692606480820193929182900301818387803b15801561297557600080fd5b505af1158015612989573d6000803e3d6000fd5b50506040805184815290513393507fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048692509081900360200190a2505060016000555050565b600d5481565b6004546001600160a01b031681565b336000908152601b60205260409020546129fc90610f9b565b565b60095481565b612a0c612c44565b60015461010090046001600160a01b03908116911614612a61576040805162461bcd60e51b8152602060048201819052602482015260008051602061385f833981519152604482015290519081900360640190fd5b6001600160a01b038116612aa65760405162461bcd60e51b81526004018080602001828103825260268152602001806137cb6026913960400191505060405180910390fd5b6001546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006118d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132a8565b600082612b5e57506000610d25565b82820282848281612b6b57fe5b04146118d25760405162461bcd60e51b815260040180806020018281038252602181526020018061383e6021913960400191505060405180910390fd5b60006118d283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061333f565b6000828201838110156118d2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6000806000612c5785856133a4565b509050600080612c6888888861347b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612ca057600080fd5b505afa158015612cb4573d6000803e3d6000fd5b505050506040513d6060811015612cca57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614612d04578082612d07565b81815b90999098509650505050505050565b60015460ff16612d64576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612d97612c44565b604080516001600160a01b039092168252519081900360200190a1565b60015460ff1615612dff576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d97612c44565b6007546000906060906001600160a01b031663d06ca61f85612e558661353b565b6040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015612eaa578181015183820152602001612e92565b50505050905001935050505060006040518083038186803b158015612ece57600080fd5b505afa158015612ee2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612f0b57600080fd5b8101908080516040519392919084600160201b821115612f2a57600080fd5b908301906020820185811115612f3f57600080fd5b82518660208202830111600160201b82111715612f5b57600080fd5b82525081516020918201928201910280838360005b83811015612f88578181015183820152602001612f70565b505050509050016040525050509050600081600183510381518110612fa957fe5b60200260200101519050809250505092915050565b6007546004546001600160a01b0391821691637ff36ab5918491600091612fe5911661353b565b3060155442016040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561305557818101518382015260200161303d565b50505050905001955050505050506000604051808303818588803b15801561307c57600080fd5b505af1158015613090573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405260208110156130ba57600080fd5b8101908080516040519392919084600160201b8211156130d957600080fd5b9083019060208201858111156130ee57600080fd5b82518660208202830111600160201b8211171561310a57600080fd5b82525081516020918201928201910280838360005b8381101561313757818101518382015260200161311f565b505050509050016040525050505050565b600480546007546040805163095ea7b360e01b81526001600160a01b0392831694810194909452602484018690525191169163095ea7b39160448083019260209291908290030181600087803b1580156131a157600080fd5b505af11580156131b5573d6000803e3d6000fd5b505050506040513d60208110156131cb57600080fd5b50506004546000906131e79083906001600160a01b0316612e34565b905060006131f58284613629565b50600754600480546015546040805163f305d71960e01b81526001600160a01b0393841694810194909452602484018a90526044840186905260648401899052600060848501524290910160a4840152519394509091169163f305d71991869160c480830192606092919082900301818588803b15801561327557600080fd5b505af1158015613289573d6000803e3d6000fd5b50505050506040513d60608110156132a057600080fd5b505050505050565b600081848411156133375760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132fc5781810151838201526020016132e4565b50505050905090810190601f1680156133295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361338e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156132fc5781810151838201526020016132e4565b50600083858161339a57fe5b0495945050505050565b600080826001600160a01b0316846001600160a01b031614156133f85760405162461bcd60e51b81526004018080602001828103825260258152602001806137f16025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061341857828461341b565b83835b90925090506001600160a01b038216610e45576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b600080600061348a85856133a4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805160028082526060808301845292839291906020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156135a357600080fd5b505afa1580156135b7573d6000803e3d6000fd5b505050506040513d60208110156135cd57600080fd5b5051815182906000906135dc57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061360a57fe5b6001600160a01b03909216602092830291909101909101529050919050565b60085460048054600754604080516315ab88c960e31b81529051600095869586958695613686956001600160a01b0394851695928516949091169263ad5c4648928282019260209290829003018186803b158015610eb357600080fd5b9150915060006136978683856136b5565b905060006136a68885856136b5565b91989197509095505050505050565b60008084116136f55760405162461bcd60e51b815260040180806020018281038252602581526020018061387f6025913960400191505060405180910390fd5b6000831180156137055750600082115b6137405760405162461bcd60e51b81526004018080602001828103825260288152602001806138166028913960400191505060405180910390fd5b8261374b8584612b4f565b81610f8c57fefe50726576696f7573207265776172647320706572696f64206d75737420626520636f6d706c657465206265666f7265206368616e67696e6720746865206475726174696f6e20666f7220746865206e657720706572696f645265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e5443616e6e6f7420776974686472617720746865207374616b696e67206f72207265776172647320746f6b656e73a26469706673582212208b09ebf4d7089ba0de49438a95dde251408eb25e26bf20b0826a49ab42b5881b64736f6c634300060c0033

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

00000000000000000000000007f6624b895b47ae66e916ec6a0479d7c3cfa31900000000000000000000000089ee76cc25fcbf1714ed575faa6a10202b71c26a000000000000000000000000739763a258640919981f9ba610ae65492455be53000000000000000000000000300496a0352e2e302a3d6df66e66b08625c305be00000000000000000000000065d0a154d2425ce2fd5fed3bdae94d9a9afe55ce0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f

-----Decoded View---------------
Arg [0] : _treasury (address): 0x07F6624b895B47AE66E916eC6a0479D7c3cFa319
Arg [1] : _NFT (address): 0x89eE76cC25Fcbf1714ed575FAa6A10202B71c26A
Arg [2] : _NDR (address): 0x739763a258640919981F9bA610AE65492455bE53
Arg [3] : _rewardsToken (address): 0x300496A0352e2E302a3d6df66e66B08625C305Be
Arg [4] : _stakingToken (address): 0x65d0A154D2425CE2Fd5fED3BdaE94D9a9aFE55CE
Arg [5] : _uniswap (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [6] : _factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 00000000000000000000000007f6624b895b47ae66e916ec6a0479d7c3cfa319
Arg [1] : 00000000000000000000000089ee76cc25fcbf1714ed575faa6a10202b71c26a
Arg [2] : 000000000000000000000000739763a258640919981f9ba610ae65492455be53
Arg [3] : 000000000000000000000000300496a0352e2e302a3d6df66e66b08625c305be
Arg [4] : 00000000000000000000000065d0a154d2425ce2fd5fed3bdae94d9a9afe55ce
Arg [5] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [6] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f


Deployed Bytecode Sourcemap

15271:13380:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19095:7;;;;;;;;;-1:-1:-1;;;;;19095:7:0;-1:-1:-1;;;;;19095:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19095:14:0;-1:-1:-1;;;;;19081:28:0;:10;:28;19074:36;;;;15271:13380;;;;;18469:265;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18469:265:0;-1:-1:-1;;;;;18469:265:0;;:::i;:::-;;;;;;;;;;;;;;;;16303:42;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16303:42:0;-1:-1:-1;;;;;16303:42:0;;:::i;16064:26::-;;;;;;;;;;;;;:::i;17760:93::-;;;;;;;;;;;;;:::i;15971:23::-;;;;;;;;;;;;;:::i;18742:121::-;;;;;;;;;;;;;:::i;22267:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22267:137:0;;:::i;21709:246::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21709:246:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15575:23;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15575:23:0;;;;;;;;;;;;;;24074:323;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24074:323:0;;:::i;16097:29::-;;;;;;;;;;;;;:::i;23372:607::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23372:607:0;;:::i;16167:28::-;;;;;;;;;;;;;:::i;16031:26::-;;;;;;;;;;;;;:::i;15711:41::-;;;;;;;;;;;;;:::i;26283:757::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26283:757:0;;:::i;20918:112::-;;;;;;;;;;;;;:::i;16001:23::-;;;;;;;;;;;;;:::i;22113:142::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22113:142:0;;:::i;8919:78::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;15421:31;;;;;;;;;;;;;:::i;17861:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17861:112:0;-1:-1:-1;;;;;17861:112:0;;:::i;11240:148::-;;;;;;;;;;;;;:::i;15542:26::-;;;;;;;;;;;;;:::i;24409:332::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24409:332:0;;:::i;21963:142::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21963:142:0;;:::i;18871:104::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18871:104:0;;;;;;;:::i;15675:29::-;;;;;;;;;;;;;:::i;15459:18::-;;;;;;;;;;;;;:::i;17981:126::-;;;;;;;;;;;;;:::i;20801:109::-;;;;;;;;;;;;;:::i;17372:339::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17372:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17372:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17372:339:0;;;;;;;;-1:-1:-1;17372:339:0;;-1:-1:-1;;;;;17372:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17372:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17372:339:0;;-1:-1:-1;17372:339:0;;-1:-1:-1;;;;;17372:339:0:i;27048:478::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27048:478:0;;;;;;;;:::i;16239:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16239:57:0;-1:-1:-1;;;;;16239:57:0;;:::i;10598:79::-;;;;;;;;;;;;;:::i;16133:27::-;;;;;;;;;;;;;:::i;21478:219::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21478:219:0;;;;;;;:::i;15921:43::-;;;;;;;;;;;;;:::i;22861:503::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22861:503:0;;:::i;22609:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22609:137:0;;:::i;22754:99::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22754:99:0;;:::i;15872:42::-;;;;;;;;;;;;;:::i;15837:28::-;;;;;;;;;;;;;:::i;15605:23::-;;;;;;;;;;;;;:::i;21038:432::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21038:432:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15759:29::-;;;;;;;;;;;;;:::i;27534:360::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27534:360:0;;:::i;18115:346::-;;;;;;;;;;;;;:::i;15509:26::-;;;;;;;;;;;;;:::i;22412:189::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22412:189:0;;;;;;;:::i;25276:943::-;;;;;;;;;;;;;;;;-1:-1:-1;25276:943:0;;:::i;24749:519::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24749:519:0;;:::i;15795:35::-;;;;;;;;;;;;;:::i;15484:18::-;;;;;;;;;;;;;:::i;23987:75::-;;;;;;;;;;;;;:::i;15637:31::-;;;;;;;;;;;;;:::i;11543:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11543:244:0;-1:-1:-1;;;;;11543:244:0;;:::i;18469:265::-;-1:-1:-1;;;;;18709:16:0;;18523:7;18709:16;;;:7;:16;;;;;;;;;18625:22;:31;;;;;;18563:163;;18709:16;18563:123;;18681:4;;18563:95;;18604:53;;:16;:14;:16::i;:::-;:20;;:53::i;:::-;-1:-1:-1;;;;;18563:18:0;;;;;;:9;:18;;;;;;;:40;:95::i;:::-;:117;;:123::i;:::-;:145;;:163::i;:::-;18543:183;18469:265;-1:-1:-1;;18469:265:0:o;16303:42::-;;;;;;;;;;;;;:::o;16064:26::-;;;;:::o;17760:93::-;17833:12;;17760:93;;:::o;15971:23::-;;;;:::o;18742:121::-;18797:7;18824:31;18839:15;;18824:10;;:14;;:31;;;;:::i;:::-;18817:38;;18742:121;:::o;22267:137::-;22333:7;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;22353:7:0::1;:18:::0;;;;22267:137::o;21709:246::-;21811:7;21820;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;;21840:11:0::1;:26:::0;;;21877:11:::1;:26:::0;;;21854:12;21891;10880:1:::1;21709:246:::0;;;;;:::o;15575:23::-;;;-1:-1:-1;;;;;15575:23:0;;:::o;24074:323::-;24207:7;;24217:3;;;24222:7;;:14;;;-1:-1:-1;;;24222:14:0;;;;24133:4;;;;24170:67;;-1:-1:-1;;;;;24207:7:0;;;;24217:3;;;;24222:7;;;:12;;:14;;;;;;;;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24222:14:0;24170:28;:67::i;:::-;24150:87;;;24248:10;24303:12;;;;;;;;;-1:-1:-1;;;;;24303:12:0;-1:-1:-1;;;;;24280:49:0;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24280:51:0;24273:4;24261:16;;24280:51;24261:70;;;;;24334:1;24261:74;24248:87;;24381:8;;24370;;24361:6;24353:5;:14;:25;:36;;;;;;;24074:323;-1:-1:-1;;;;24074:323:0:o;16097:29::-;;;;:::o;23372:607::-;12671:1;13277:7;;:19;;13269:63;;;;;-1:-1:-1;;;13269:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13269:63:0;;;;;;;;;;;;;;;12671:1;13410:7;:18;23439:10:::1;28020:16;:14;:16::i;:::-;27997:20;:39:::0;28064:26:::1;:24;:26::i;:::-;28047:14;:43:::0;-1:-1:-1;;;;;28105:21:0;::::1;::::0;28101:157:::1;;28162:15;28169:7;28162:6;:15::i;:::-;-1:-1:-1::0;;;;;28143:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;28226:20:::1;::::0;28192:22:::1;:31:::0;;;;;;:54;28101:157:::1;23479:1:::2;23470:6;:10;23462:40;;;::::0;;-1:-1:-1;;;23462:40:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23462:40:0;;;;;;;;;;;;;::::2;;23558:5;::::0;23531:10:::2;23521:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;23547:6;23521:25:::2;:33::i;:::-;:42;;:84;;;-1:-1:-1::0;23577:10:0::2;23567:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;23593:6;23567:25:::2;:33::i;:::-;:38:::0;23521:84:::2;23513:109;;;::::0;;-1:-1:-1;;;23513:109:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23513:109:0;;;;;;;;;;;;;::::2;;23648:12;::::0;:24:::2;::::0;23665:6;23648:16:::2;:24::i;:::-;23633:12;:39:::0;23717:10:::2;23707:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;23733:6;23707:25:::2;:33::i;:::-;23693:10;23683:21;::::0;;;:9:::2;:21;::::0;;;;:57;;;;23776:7:::2;::::0;23765:19:::2;::::0;:6;;:10:::2;:19::i;:::-;23795:12;::::0;:70:::2;::::0;;-1:-1:-1;;;23795:70:0;;23817:42:::2;23795:70;::::0;::::2;::::0;;;;;;;;;23751:33;;-1:-1:-1;;;;;;23795:12:0;;::::2;::::0;:21:::2;::::0;:70;;;;;::::2;::::0;;;;;;;;;:12:::2;::::0;:70;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;23876:12:0::2;::::0;-1:-1:-1;;;;;23876:12:0::2;:21;23898:10;23910:15;:6:::0;23921:3;23910:10:::2;:15::i;:::-;23876:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;23876:50:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;23942:29:0::2;::::0;;;;;;;23952:10:::2;::::0;23942:29:::2;::::0;;;;;23876:50:::2;23942:29:::0;;::::2;-1:-1:-1::0;;12627:1:0;13589:7;:22;-1:-1:-1;23372:607:0:o;16167:28::-;;;;:::o;16031:26::-;;;;:::o;15711:41::-;;;;:::o;26283:757::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;26367:1:::1;28020:16;:14;:16::i;:::-;27997:20;:39:::0;28064:26:::1;:24;:26::i;:::-;28047:14;:43:::0;-1:-1:-1;;;;;28105:21:0;::::1;::::0;28101:157:::1;;28162:15;28169:7;28162:6;:15::i;:::-;-1:-1:-1::0;;;;;28143:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;28226:20:::1;::::0;28192:22:::1;:31:::0;;;;;;:54;28101:157:::1;26405:12:::2;;26386:15;:31;26382:318;;26458:15;::::0;26447:27:::2;::::0;:6;;:10:::2;:27::i;:::-;26434:10;:40:::0;26382:318:::2;;;26527:12;::::0;26507:17:::2;::::0;26527:33:::2;::::0;26544:15:::2;26527:16;:33::i;:::-;26507:53;;26575:16;26594:25;26608:10;;26594:9;:13;;:25;;;;:::i;:::-;26672:15;::::0;26575:44;;-1:-1:-1;26647:41:0::2;::::0;:20:::2;:6:::0;26575:44;26647:10:::2;:20::i;:41::-;26634:10;:54:::0;-1:-1:-1;;26382:318:0::2;26728:12;::::0;:37:::2;::::0;;-1:-1:-1;;;26728:37:0;;26759:4:::2;26728:37;::::0;::::2;::::0;;;26710:15:::2;::::0;-1:-1:-1;;;;;26728:12:0::2;::::0;:22:::2;::::0;:37;;;;;::::2;::::0;;;;;;;;:12;:37;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;26728:37:0;26824:15:::2;::::0;26728:37;;-1:-1:-1;26812:28:0::2;::::0;26728:37;;26812:11:::2;:28::i;:::-;26798:10;;:42;;26776:116;;;::::0;;-1:-1:-1;;;26776:116:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;26920:15;26903:14;:32:::0;;;26981:15:::2;::::0;26961:36:::2;::::0;26920:15;26961:19:::2;:36::i;:::-;26946:12;:51:::0;27013:19:::2;::::0;;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;28268:1;10880::::1;26283:757:::0;:::o;20918:112::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;9513:7:::1;::::0;::::1;;9505:40;;;::::0;;-1:-1:-1;;;9505:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9505:40:0;;;;;;;;;;;;;::::1;;20976:10:::2;:8;:10::i;:::-;21002:20;::::0;;21011:10:::2;21002:20:::0;;;;::::2;::::0;;;;::::2;::::0;;::::2;20918:112::o:0;16001:23::-;;;;:::o;22113:142::-;22181:7;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;22201:8:0::1;:20:::0;;;;22113:142::o;8919:78::-;8982:7;;;;8919:78;:::o;15421:31::-;;;-1:-1:-1;;;;;15421:31:0;;:::o;17861:112::-;-1:-1:-1;;;;;17947:18:0;17920:7;17947:18;;;:9;:18;;;;;;;17861:112::o;11240:148::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;11331:6:::1;::::0;11310:40:::1;::::0;11347:1:::1;::::0;11331:6:::1;::::0;::::1;-1:-1:-1::0;;;;;11331:6:0::1;::::0;11310:40:::1;::::0;11347:1;;11310:40:::1;11361:6;:19:::0;;-1:-1:-1;;;;;;11361:19:0::1;::::0;;11240:148::o;15542:26::-;;;-1:-1:-1;;;;;15542:26:0;;:::o;24409:332::-;24545:7;;24555:3;;;24560:7;;:14;;;-1:-1:-1;;;24560:14:0;;;;24471:4;;;;24508:67;;-1:-1:-1;;;;;24545:7:0;;;;24555:3;;;;24560:7;;;:12;;:14;;;;;;;;;;;;:7;:14;;;;;;;;;;24508:67;24488:87;;;24586:10;24641:12;;;;;;;;;-1:-1:-1;;;;;24641:12:0;-1:-1:-1;;;;;24618:49:0;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24618:51:0;24611:4;24599:16;;24618:51;24599:70;;;;;24672:1;24599:74;24586:87;;24722:11;;24708;;24699:6;24691:5;:14;:28;:42;;;;21963:142;22031:7;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;22051:8:0::1;:20:::0;;;;21963:142::o;18871:104::-;18927:7;18958:1;18954;:5;:13;;18966:1;18954:13;;;18962:1;18954:13;18947:20;18871:104;-1:-1:-1;;;18871:104:0:o;15675:29::-;;;;:::o;15459:18::-;;;-1:-1:-1;;;;;15459:18:0;;:::o;17981:126::-;18038:7;18065:34;18069:15;18086:12;;18065:3;:34::i;20801:109::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;9237:7:::1;::::0;::::1;;9236:8;9228:37;;;::::0;;-1:-1:-1;;;9228:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;;::::1;;20860:8:::2;:6;:8::i;:::-;20884:18;::::0;;20891:10:::2;20884:18:::0;;;;::::2;::::0;;;;::::2;::::0;;::::2;20801:109::o:0;17372:339::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;9513:7:::1;::::0;::::1;;9505:40;;;::::0;;-1:-1:-1;;;9505:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9505:40:0;;;;;;;;;;;;;::::1;;17521:6:::2;:13;17498:12;:19;:36;17490:45;;;::::0;::::2;;17565:19:::0;;17548:14:::2;17614:90;17628:6;17624:1;:10;17614:90;;;17683:6;17690:1;17683:9;;;;;;;;;;;;;;17656:7;:24;17664:12;17677:1;17664:15;;;;;;;;;::::0;;::::2;::::0;;;;;;;-1:-1:-1;;;;;17656:24:0::2;::::0;;;::::2;::::0;;;;;;-1:-1:-1;17656:24:0;:36;17636:3:::2;;17614:90;;;9556:1;;17372:339:::0;;:::o;27048:478::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;27255:12:::1;::::0;-1:-1:-1;;;;;27231:37:0;;::::1;27255:12:::0;::::1;27231:37;::::0;::::1;::::0;:95:::1;;-1:-1:-1::0;27313:12:0::1;::::0;-1:-1:-1;;;;;27289:37:0;;::::1;27313:12:::0;::::1;27289:37;;27231:95;27209:190;;;;-1:-1:-1::0;;;27209:190:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27417:12;-1:-1:-1::0;;;;;27410:29:0::1;;27440:4;-1:-1:-1::0;;;;;27440:10:0::1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27440:12:0;27410:56:::1;::::0;;-1:-1:-1;;;;;;27410:56:0::1;::::0;;;;;;-1:-1:-1;;;;;27410:56:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;27440:12:::1;::::0;27410:56;;;;;;;-1:-1:-1;27410:56:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;27482:36:0::1;::::0;;-1:-1:-1;;;;;27482:36:0;::::1;::::0;;27410:56:::1;27482:36:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;27048:478:::0;;:::o;16239:57::-;;;;;;;;;;;;;:::o;10598:79::-;10663:6;;;;;-1:-1:-1;;;;;10663:6:0;;10598:79::o;16133:27::-;;;;:::o;21478:219::-;21571:7;21580;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;;21600:8:0::1;:20:::0;;;21631:8:::1;:20:::0;;;21600;;21478:219::o;15921:43::-;;;;:::o;22861:503::-;12671:1;13277:7;;:19;;13269:63;;;;;-1:-1:-1;;;13269:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13269:63:0;;;;;;;;;;;;;;;12671:1;13410:7;:18;9237:7:::1;::::0;::::1;;9236:8;9228:37;;;::::0;;-1:-1:-1;;;9228:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;;::::1;;22941:10:::2;28020:16;:14;:16::i;:::-;27997:20;:39:::0;28064:26:::2;:24;:26::i;:::-;28047:14;:43:::0;-1:-1:-1;;;;;28105:21:0;::::2;::::0;28101:157:::2;;28162:15;28169:7;28162:6;:15::i;:::-;-1:-1:-1::0;;;;;28143:16:0;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:34;;;;28226:20:::2;::::0;28192:22:::2;:31:::0;;;;;;:54;28101:157:::2;22981:1:::3;22972:6;:10;22964:37;;;::::0;;-1:-1:-1;;;22964:37:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;22964:37:0;;;;;;;;;;;;;::::3;;23057:5;::::0;23030:10:::3;23020:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;23046:6;23020:25:::3;:33::i;:::-;:42;;:88;;;;-1:-1:-1::0;23103:5:0::3;::::0;23076:10:::3;23066:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;23092:6;23066:25:::3;:33::i;:::-;:42;;23020:88;23012:113;;;::::0;;-1:-1:-1;;;23012:113:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;23012:113:0;;;;;;;;;;;;;::::3;;23151:12;::::0;:24:::3;::::0;23168:6;23151:16:::3;:24::i;:::-;23136:12;:39:::0;23220:10:::3;23210:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;23236:6;23210:25:::3;:33::i;:::-;23196:10;23186:21;::::0;;;:9:::3;:21;::::0;;;;;;;:57;;;;23254:12:::3;::::0;:60;;-1:-1:-1;;;23254:60:0;;::::3;::::0;::::3;::::0;;;;23300:4:::3;23254:60:::0;;;;;;;;;;;;-1:-1:-1;;;;;23254:12:0;;::::3;::::0;:25:::3;::::0;:60;;;;;;;;;;;;;:12;:60;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;;23330:26:0::3;::::0;;;;;;;23337:10:::3;::::0;23330:26:::3;::::0;;;;;23254:60:::3;23330:26:::0;;::::3;-1:-1:-1::0;;12627:1:0;13589:7;:22;22861:503::o;22609:137::-;22675:7;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;22695:7:0::1;:18:::0;;;;22609:137::o;22754:99::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;22820:8:::1;::::0;:25:::1;::::0;-1:-1:-1;;;;;22820:8:0;;::::1;::::0;:25;::::1;;;::::0;22838:6;;22820:8:::1;:25:::0;:8;:25;22838:6;22820:8;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22754:99:::0;:::o;15872:42::-;;;;:::o;15837:28::-;;;;:::o;15605:23::-;;;-1:-1:-1;;;;;15605:23:0;;:::o;21038:432::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;21228:8:::1;:20:::0;;-1:-1:-1;;;;;;21228:20:0;;::::1;-1:-1:-1::0;;;;;21228:20:0;;::::1;;::::0;;;21259:3:::1;:10:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;21280:3:::1;:10:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;21301:12:::1;:36:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;21348:12:::1;:36:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;21395:7:::1;:28:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;21434:7:::1;:28:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;21038:432::o;15759:29::-;;;;:::o;27534:360::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;27658:12:::1;;27640:15;:30;27618:168;;;;-1:-1:-1::0;;;27618:168:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27797:15;:34:::0;;;27847:39:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;27534:360:::0;:::o;18115:346::-;18162:7;18186:12;;18202:1;18186:17;18182:77;;;-1:-1:-1;18227:20:0;;18220:27;;18182:77;18289:164;18332:106;18427:10;;18332:68;18385:14;;18332:26;:24;:26::i;:68::-;:94;;:106::i;:::-;18289:20;;;:24;:164::i;15509:26::-;;;-1:-1:-1;;;;;15509:26:0;;:::o;22412:189::-;22493:7;22502;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;;22522:5:0::1;:14:::0;;;22547:5:::1;:14:::0;;;22522;;22412:189::o;25276:943::-;12671:1;13277:7;;:19;;13269:63;;;;;-1:-1:-1;;;13269:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13269:63:0;;;;;;;;;;;;;;;12671:1;13410:7;:18;9237:7:::1;::::0;::::1;;9236:8;9228:37;;;::::0;;-1:-1:-1;;;9228:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;;::::1;;25421:3:::2;::::0;25397:49:::2;::::0;;-1:-1:-1;;;25397:49:0;;::::2;::::0;::::2;::::0;;;;;25363:14:::2;::::0;;;-1:-1:-1;;;;;25421:3:0;;::::2;::::0;25397:40:::2;::::0;:49;;;;;::::2;::::0;;;;;;;;;25421:3;25397:49;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;25397:49:0;;;;;;;;;;;-1:-1:-1;25397:49:0;-1:-1:-1;25457:13:0::2;25495:1;25485:11:::0;::::2;25481:204;;;25521:20;25534:6;25521:12;:20::i;:::-;25513:28;;25481:204;;;25563:6;25573:1;25563:11;25559:126;;;25599:23;25615:6;25599:15;:23::i;25559:126::-;25655:18;::::0;;-1:-1:-1;;;25655:18:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;25655:18:0;;;;;;;;;;;;;::::2;25559:126;25716:5;25703:9;:18;;25695:42;;;::::0;;-1:-1:-1;;;25695:42:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;25695:42:0;;;;;;;;;;;;;::::2;;25748:8;25771;;25759:9;:20;;;;;25790:8;::::0;:22:::2;::::0;25759:20;;;::::2;::::0;-1:-1:-1;;;;;;25790:8:0::2;::::0;:22;::::2;;;::::0;25759:20;;25790:8:::2;:22:::0;:8;:22;25759:20;25790:8;:22;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;25823:14;25860:1;25853:3;25841:9;:15;25840:21;;;;;25924:3;::::0;25840:21;;::::2;::::0;-1:-1:-1;25872:16:0::2;::::0;25891:38:::2;::::0;25840:21;;-1:-1:-1;;;;;25924:3:0::2;25891:13;:38::i;:::-;25872:57;;25940:32;25962:9;25940:21;:32::i;:::-;26026:7;;26012:11;:21;;;;;;25997:11;:37;25983:51;;26082:7;;26070:9;:19;;;;;;26057:33:::0;;::::2;::::0;26101:50:::2;26117:11:::0;26147:3:::2;26142:2;26130:14:::0;::::2;:20;26101:15;:50::i;:::-;26178:3;::::0;26162:49:::2;::::0;;-1:-1:-1;;;26162:49:0;;26188:10:::2;26162:49;::::0;::::2;::::0;;;;;;;26178:3;26162:49;;;;;;-1:-1:-1;;;;;26178:3:0;;::::2;::::0;26162:25:::2;::::0;:49;;;;;26178:3:::2;::::0;26162:49;;;;;;;;26178:3;;26162:49;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;12627:1:0;13589:7;:22;-1:-1:-1;;;;;;;;;25276:943:0:o;24749:519::-;12671:1;13277:7;;:19;;13269:63;;;;;-1:-1:-1;;;13269:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13269:63:0;;;;;;;;;;;;;;;12671:1;13410:7;:18;9237:7:::1;::::0;::::1;;9236:8;9228:37;;;::::0;;-1:-1:-1;;;9228:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;;::::1;;24829:10:::2;28020:16;:14;:16::i;:::-;27997:20;:39:::0;28064:26:::2;:24;:26::i;:::-;28047:14;:43:::0;-1:-1:-1;;;;;28105:21:0;::::2;::::0;28101:157:::2;;28162:15;28169:7;28162:6;:15::i;:::-;-1:-1:-1::0;;;;;28143:16:0;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:34;;;;28226:20:::2;::::0;28192:22:::2;:31:::0;;;;;;:54;28101:157:::2;24903:3:::3;::::0;24879:49:::3;::::0;;-1:-1:-1;;;24879:49:0;;::::3;::::0;::::3;::::0;;;;;24857:17:::3;::::0;-1:-1:-1;;;;;24903:3:0::3;::::0;24879:40:::3;::::0;:49;;;;;::::3;::::0;;;;;;;;24903:3;24879:49;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;24879:49:0;;;;-1:-1:-1;24947:13:0;24939:43:::3;;;::::0;;-1:-1:-1;;;24939:43:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;24939:43:0;;;;;;;;;;;;;::::3;;25018:10;24993:14;25010:19:::0;;;:7:::3;:19;::::0;;;;;25048;;::::3;;25040:47;;;::::0;;-1:-1:-1;;;25040:47:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;25040:47:0;;;;;;;;;;;;;::::3;;25128:10;25120:19;::::0;;;:7:::3;:19;::::0;;;;;:34:::3;::::0;25144:9;25120:23:::3;:34::i;:::-;25106:10;25098:19;::::0;;;:7:::3;:19;::::0;;;;;:56;;;;25181:3:::3;::::0;25165:49;;-1:-1:-1;;;25165:49:0;;::::3;::::0;::::3;::::0;;;;;;;;;;25181:3;25165:49;;;;;;-1:-1:-1;;;;;25181:3:0;;::::3;::::0;25165:25:::3;::::0;:49;;;;;25098:19;25165:49;;;;;;25098:19;25181:3;25165:49;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;25230:30:0::3;::::0;;;;;;;25241:10:::3;::::0;-1:-1:-1;25230:30:0::3;::::0;-1:-1:-1;25230:30:0;;;;::::3;::::0;;::::3;-1:-1:-1::0;;12627:1:0;13589:7;:22;-1:-1:-1;;24749:519:0:o;15795:35::-;;;;:::o;15484:18::-;;;-1:-1:-1;;;;;15484:18:0;;:::o;23987:75::-;24042:10;24032:21;;;;:9;:21;;;;;;24023:31;;:8;:31::i;:::-;23987:75::o;15637:31::-;;;;:::o;11543:244::-;10820:12;:10;:12::i;:::-;10810:6;;;;;-1:-1:-1;;;;;10810:6:0;;;:22;;;10802:67;;;;;-1:-1:-1;;;10802:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10802:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11632:22:0;::::1;11624:73;;;;-1:-1:-1::0;;;11624:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11734:6;::::0;11713:38:::1;::::0;-1:-1:-1;;;;;11713:38:0;;::::1;::::0;11734:6:::1;::::0;::::1;;::::0;11713:38:::1;::::0;;;::::1;11762:6;:17:::0;;-1:-1:-1;;;;;11762:17:0;;::::1;;;-1:-1:-1::0;;;;;;11762:17:0;;::::1;::::0;;;::::1;::::0;;11543:244::o;789:136::-;847:7;874:43;878:1;881;874:43;;;;;;;;;;;;;;;;;:3;:43::i;1679:471::-;1737:7;1982:6;1978:47;;-1:-1:-1;2012:1:0;2005:8;;1978:47;2049:5;;;2053:1;2049;:5;:1;2073:5;;;;;:10;2065:56;;;;-1:-1:-1;;;2065:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2626:132;2684:7;2711:39;2715:1;2718;2711:39;;;;;;;;;;;;;;;;;:3;:39::i;325:181::-;383:7;415:5;;;439:6;;;;431:46;;;;;-1:-1:-1;;;431:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8028:106;8116:10;8028:106;:::o;5929:391::-;6022:13;6037;6064:14;6083:26;6094:6;6102;6083:10;:26::i;:::-;6063:46;;;6121:13;6136;6169:32;6177:7;6186:6;6194;6169:7;:32::i;:::-;-1:-1:-1;;;;;6154:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6154:62:0;;;;;;;6120:96;;;;;-1:-1:-1;6120:96:0;;-1:-1:-1;;;;;;6250:16:0;;;;;;;:62;;6293:8;6303;6250:62;;;6270:8;6280;6250:62;6227:85;;;;-1:-1:-1;5929:391:0;-1:-1:-1;;;;;;;5929:391:0:o;9968:120::-;9513:7;;;;9505:40;;;;;-1:-1:-1;;;9505:40:0;;;;;;;;;;;;-1:-1:-1;;;9505:40:0;;;;;;;;;;;;;;;10027:7:::1;:15:::0;;-1:-1:-1;;10027:15:0::1;::::0;;10058:22:::1;10067:12;:10;:12::i;:::-;10058:22;::::0;;-1:-1:-1;;;;;10058:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;9968:120::o:0;9709:118::-;9237:7;;;;9236:8;9228:37;;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;-1:-1:-1;;;9228:37:0;;;;;;;;;;;;;;;9779:4:::1;9769:14:::0;;-1:-1:-1;;9769:14:0::1;::::0;::::1;::::0;;9799:20:::1;9806:12;:10;:12::i;19126:289::-:0;19241:7;;19200:4;;19217:21;;-1:-1:-1;;;;;19241:7:0;:21;19263:6;19271:27;19292:5;19271:20;:27::i;:::-;19241:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19241:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19241:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19241:58:0;;;;;;;;;;;;-1:-1:-1;19241:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19217:82;;19310:24;19345:7;19370:1;19353:7;:14;:18;19345:27;;;;;;;;;;;;;;19310:63;;19391:16;19384:23;;;;19126:289;;;;:::o;19659:191::-;19726:7;;19805:3;;-1:-1:-1;;;;;19726:7:0;;;;:29;;19762:9;;19726:7;;19776:34;;19805:3;19776:20;:34::i;:::-;19820:4;19833:8;;19827:3;:14;19726:116;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19726:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19726:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19726:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19726:116:0;;;;;;;;;;;;-1:-1:-1;19726:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19659:191;:::o;19858:431::-;19951:3;;;19972:7;;19944:57;;;-1:-1:-1;;;19944:57:0;;-1:-1:-1;;;;;19972:7:0;;;19944:57;;;;;;;;;;;;;;19951:3;;;19944:19;;:57;;;;;;;;;;;;;;19951:3;;19944:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20059:3:0;;20012:19;;20034:29;;20048:9;;-1:-1:-1;;;;;20059:3:0;20034:13;:29::i;:::-;20012:51;;20075:19;20099:32;20105:14;20121:9;20099:5;:32::i;:::-;-1:-1:-1;20142:7:0;;20201:3;;;20272:8;;20142:139;;;-1:-1:-1;;;20142:139:0;;-1:-1:-1;;;;;20201:3:0;;;20142:139;;;;;;;;;;;;;;;;;;;;;;;;;:7;:139;;;;20266:3;:14;;;20142:139;;;;;20074:57;;-1:-1:-1;20142:7:0;;;;:23;;20172:9;;20142:139;;;;;;;;;;;;;;20172:9;20142:7;:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19858:431:0:o;1228:192::-;1314:7;1350:12;1342:6;;;;1334:29;;;;-1:-1:-1;;;1334:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1386:5:0;;;1228:192::o;3254:278::-;3340:7;3375:12;3368:5;3360:28;;;;-1:-1:-1;;;3360:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3399:9;3415:1;3411;:5;;;;;;;3254:278;-1:-1:-1;;;;;3254:278:0:o;4952:349::-;5027:14;5043;5088:6;-1:-1:-1;;;;;5078:16:0;:6;-1:-1:-1;;;;;5078:16:0;;;5070:66;;;;-1:-1:-1;;;5070:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5175:6;-1:-1:-1;;;;;5166:15:0;:6;-1:-1:-1;;;;;5166:15:0;;:53;;5204:6;5212;5166:53;;;5185:6;5193;5166:53;5147:72;;-1:-1:-1;5147:72:0;-1:-1:-1;;;;;;5238:20:0;;5230:63;;;;;-1:-1:-1;;;5230:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5393:478;5482:12;5508:14;5524;5542:26;5553:6;5561;5542:10;:26::i;:::-;5706:32;;;-1:-1:-1;;5706:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5696:43;;;;;;-1:-1:-1;;;;;;5609:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5599:262;;;;;;;;;5393:478;-1:-1:-1;;;;;5393:478:0:o;19423:228::-;19544:16;;;19558:1;19544:16;;;19491;19544;;;;;19491;;;19544;19558:1;19544:16;;;;;;;;-1:-1:-1;;19581:7:0;;:14;;;-1:-1:-1;;;19581:14:0;;;;19520:40;;-1:-1:-1;;;;;;19581:7:0;;;;:12;;-1:-1:-1;19581:14:0;;;;;;;;;;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19581:14:0;19571:7;;:4;;19576:1;;19571:7;;;;;;;;;:24;-1:-1:-1;;;;;19571:24:0;;;-1:-1:-1;;;;;19571:24:0;;;;;19616:5;19606:4;19611:1;19606:7;;;;;;;;-1:-1:-1;;;;;19606:15:0;;;:7;;;;;;;;;;;:15;19639:4;-1:-1:-1;19423:228:0;;;:::o;20297:442::-;20469:7;;20479:3;;;20484:7;;:14;;;-1:-1:-1;;;20484:14:0;;;;20376:4;;;;;;;;20432:67;;-1:-1:-1;;;;;20469:7:0;;;;20479:3;;;;20484:7;;;;:12;;:14;;;;;;;;;;;;:7;:14;;;;;;;;;;20432:67;20399:100;;;;20510:19;20532:58;20555:14;20571:8;20581;20532:22;:58::i;:::-;20510:80;;20601:19;20623:58;20646:14;20662:8;20672;20623:22;:58::i;:::-;20700:14;;;;-1:-1:-1;20297:442:0;;-1:-1:-1;;;;;;20297:442:0:o;6433:321::-;6515:12;6558:1;6548:7;:11;6540:61;;;;-1:-1:-1;;;6540:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6631:1;6620:8;:12;:28;;;;;6647:1;6636:8;:12;6620:28;6612:81;;;;-1:-1:-1;;;6612:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6738:8;6714:21;:7;6726:8;6714:11;:21::i;:::-;:32;;;

Swarm Source

ipfs://8b09ebf4d7089ba0de49438a95dde251408eb25e26bf20b0826a49ab42b5881b

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
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.