ETH Price: $2,554.12 (-2.27%)

Contract

0xea4376766502B4Ae82aFf2Ad1C2438920Cb7a073
 

Overview

ETH Balance

0.002331193036852922 ETH

Eth Value

$5.95 (@ $2,554.12/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Reward123473292021-05-01 8:55:121271 days ago1619859312IN
0xea437676...20Cb7a073
0 ETH0.0026069333
Unstake123208272021-04-27 6:42:411275 days ago1619505761IN
0xea437676...20Cb7a073
0 ETH0.0050395747
Update Score Eth123208182021-04-27 6:40:091275 days ago1619505609IN
0xea437676...20Cb7a073
0 ETH0.0009748433.8125
Update Score Eth123207712021-04-27 6:32:041275 days ago1619505124IN
0xea437676...20Cb7a073
0 ETH0.0020172644
Update Offer123207592021-04-27 6:29:531275 days ago1619504993IN
0xea437676...20Cb7a073
0 ETH0.0013976241.20000138
Stake123207542021-04-27 6:29:091275 days ago1619504949IN
0xea437676...20Cb7a073
0 ETH0.005304550
Update Offer123207502021-04-27 6:28:121275 days ago1619504892IN
0xea437676...20Cb7a073
0 ETH0.0016979550
Update Offer123207452021-04-27 6:27:201275 days ago1619504840IN
0xea437676...20Cb7a073
0 ETH0.0014179841.8
Stake123207372021-04-27 6:25:541275 days ago1619504754IN
0xea437676...20Cb7a073
0 ETH0.0054105951
Update Offer123207322021-04-27 6:25:171275 days ago1619504717IN
0xea437676...20Cb7a073
0 ETH0.0015884951
Update Offer123207302021-04-27 6:24:461275 days ago1619504686IN
0xea437676...20Cb7a073
0 ETH0.0017312951
Update Score Eth123205842021-04-27 5:50:391276 days ago1619502639IN
0xea437676...20Cb7a073
0 ETH0.0005373637.4
Update Score Eth123205142021-04-27 5:33:411276 days ago1619501621IN
0xea437676...20Cb7a073
0 ETH0.0012073742
Unstake123204972021-04-27 5:30:421276 days ago1619501442IN
0xea437676...20Cb7a073
0 ETH0.0038641636.05
Update Score Eth123204892021-04-27 5:28:491276 days ago1619501329IN
0xea437676...20Cb7a073
0 ETH0.0013262246
Unstake123191472021-04-27 0:23:301276 days ago1619483010IN
0xea437676...20Cb7a073
0 ETH0.0049832652
Unstake123190922021-04-27 0:10:501276 days ago1619482250IN
0xea437676...20Cb7a073
0 ETH0.004901451
Claim Reward123190922021-04-27 0:10:501276 days ago1619482250IN
0xea437676...20Cb7a073
0 ETH0.0049009951
Claim Reward123189402021-04-26 23:29:301276 days ago1619479770IN
0xea437676...20Cb7a073
0 ETH0.0022595836.505
Claim Reward123189382021-04-26 23:29:121276 days ago1619479752IN
0xea437676...20Cb7a073
0 ETH0.0028838236.505
Claim Reward123173432021-04-26 17:39:561276 days ago1619458796IN
0xea437676...20Cb7a073
0 ETH0.0043328670.00000112
Claim Score Eth123172672021-04-26 17:21:321276 days ago1619457692IN
0xea437676...20Cb7a073
0 ETH0.0036993581
Claim Score Eth123145222021-04-26 7:13:131276 days ago1619421193IN
0xea437676...20Cb7a073
0 ETH0.0017829939.04
Claim Reward123136152021-04-26 3:54:241277 days ago1619409264IN
0xea437676...20Cb7a073
0 ETH0.0026616143
Claim Score Eth123132072021-04-26 2:20:321277 days ago1619403632IN
0xea437676...20Cb7a073
0 ETH0.0021008646
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
123191472021-04-27 0:23:301276 days ago1619483010
0xea437676...20Cb7a073
0.00001429 ETH
123190922021-04-27 0:10:501276 days ago1619482250
0xea437676...20Cb7a073
0.07635799 ETH
123172672021-04-26 17:21:321276 days ago1619457692
0xea437676...20Cb7a073
0.03091334 ETH
123145222021-04-26 7:13:131276 days ago1619421193
0xea437676...20Cb7a073
0.02396075 ETH
123132072021-04-26 2:20:321277 days ago1619403632
0xea437676...20Cb7a073
0.07998874 ETH
123065862021-04-25 1:59:441278 days ago1619315984
0xea437676...20Cb7a073
0.01425189 ETH
123013232021-04-24 6:33:181278 days ago1619245998
0xea437676...20Cb7a073
0.01448608 ETH
122934252021-04-23 1:08:001280 days ago1619140080
0xea437676...20Cb7a073
0.05313561 ETH
122929882021-04-22 23:26:161280 days ago1619133976
0xea437676...20Cb7a073
0.03214641 ETH
122864102021-04-21 22:54:271281 days ago1619045667
0xea437676...20Cb7a073
0.00000037 ETH
122863902021-04-21 22:52:131281 days ago1619045533
0xea437676...20Cb7a073
0.01681366 ETH
122642702021-04-18 13:12:481284 days ago1618751568
0xea437676...20Cb7a073
0.03019732 ETH
122639132021-04-18 11:51:031284 days ago1618746663
0xea437676...20Cb7a073
0.00283762 ETH
122635522021-04-18 10:30:571284 days ago1618741857
0xea437676...20Cb7a073
0.15414576 ETH
122571462021-04-17 10:46:571285 days ago1618656417
0xea437676...20Cb7a073
0.06097183 ETH
122553212021-04-17 3:59:291286 days ago1618631969
0xea437676...20Cb7a073
0.0127995 ETH
122540212021-04-16 23:08:251286 days ago1618614505
0xea437676...20Cb7a073
0.03317075 ETH
122477792021-04-15 23:52:531287 days ago1618530773
0xea437676...20Cb7a073
0.06614816 ETH
122346552021-04-13 23:14:441289 days ago1618355684
0xea437676...20Cb7a073
0.00590631 ETH
122275562021-04-12 20:57:001290 days ago1618261020
0xea437676...20Cb7a073
0.0003711 ETH
122263702021-04-12 16:48:501290 days ago1618246130
0xea437676...20Cb7a073
0.00561391 ETH
122230312021-04-12 4:17:371291 days ago1618201057
0xea437676...20Cb7a073
0.00389812 ETH
122173012021-04-11 7:38:491291 days ago1618126729
0xea437676...20Cb7a073
0.02803411 ETH
122136152021-04-10 17:49:091292 days ago1618076949
0xea437676...20Cb7a073
0.22865046 ETH
122113512021-04-10 9:31:561292 days ago1618047116
0xea437676...20Cb7a073
0.21388494 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PRDZstakingV2

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

/**
 *Submitted for verification at Etherscan.io on 2020-12-10
*/

pragma solidity 0.6.12;

// SPDX-License-Identifier: No License

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256`
 * (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }


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


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) onlyOwner public {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
}


interface Token {
    function transferFrom(address, address, uint) external returns (bool);
    function transfer(address, uint) external returns (bool);
}

contract PRDZstakingV2 is Ownable {
    using SafeMath for uint;
    using EnumerableSet for EnumerableSet.AddressSet;
    
    event RewardsClaimed(address indexed  holder, uint amount , uint indexed  time);
    event TokenStaked(address indexed  holder, uint amount, uint indexed  time);
    event AllTokenStaked(uint amount, uint indexed  time);
    event OfferStaked(uint amount, uint indexed  time);
    
    event AllTokenUnStaked(uint amount, uint indexed  time);
    event AllTokenClaimed(uint amount, uint indexed  time);
    event TokenUnstaked(address indexed  holder, uint amount, uint indexed  time);
    event TokenBurned(uint amount, uint indexed  time);
    event EthClaimed(address indexed  holder, uint amount, uint indexed  time);
    
    // PRDZ token contract address
    address public constant tokenAddress = 0x4e085036A1b732cBe4FfB1C12ddfDd87E7C3664d;
    address public constant burnAddress = 0x0000000000000000000000000000000000000000;
    
    // reward rate 80.00% per year
    uint public constant rewardRate = 8000;
    uint public constant scoreRate = 1000;
    
    uint public constant rewardInterval = 365 days;
    uint public constant scoreInterval = 3 days;
    

    uint public scoreEth = 1000;
    
      // unstaking fee 2.00 percent
    uint public constant unstakingFeeRate = 250;
    
    // unstaking possible after 72 hours
    uint public constant cliffTime = 72 hours;
    
    uint public totalClaimedRewards = 0;
    uint public totalStakedToken = 0;
    uint public totalUnstakedToken = 0;
    uint public totalEthDeposited = 0;
    uint public totalEthClaimed = 0;
    uint public totalFeeCollected = 0;
    uint public totalOfferRaise = 0;
    
    
    uint public stakingOffer = 1607878800;
    uint public stakingOfferRaise = 250;

    

    EnumerableSet.AddressSet private holders;
    
    mapping (address => uint) public depositedTokens;
    mapping (address => uint) public stakingTime;
    mapping (address => uint) public lastClaimedTime;
    mapping (address => uint) public totalEarnedTokens;
    mapping (address => uint) public totalScore;
    mapping (address => uint) public totalOfferUser;
    mapping (address => uint) public lastScoreTime;
  
    /* Updates Total Reward and transfer User Reward on Stake and Unstake. */

    function updateAccount(address account) private {
        uint pendingDivs = getPendingReward(account);
        if (pendingDivs > 0) {
            require(Token(tokenAddress).transfer(account, pendingDivs), "Could not transfer tokens.");
            totalEarnedTokens[account] = totalEarnedTokens[account].add(pendingDivs);
            totalClaimedRewards = totalClaimedRewards.add(pendingDivs);
            emit RewardsClaimed(account, pendingDivs, now);
            emit AllTokenClaimed(totalClaimedRewards, now);
        }
        lastClaimedTime[account] = now;
    }


    /* Updates Last Score Time for Users. */
    
    function updateLastScoreTime(address _holder) private  {
           if(lastScoreTime[_holder] > 0){
               uint timeDiff = 0 ;
               timeDiff = now.sub(lastScoreTime[_holder]).div(2); 
               lastScoreTime[_holder] = now.sub(timeDiff) ;
           }else{
              lastScoreTime[_holder] = now ;
           }         
       
    }


    /* Calculate realtime ETH Reward based on User Score. */


   function getScoreEth(address _holder) public view returns (uint) {
        uint timeDiff = 0 ;
       
        if(lastScoreTime[_holder] > 0){
            timeDiff = now.sub(lastScoreTime[_holder]).div(2);            
           }

        uint stakedAmount = depositedTokens[_holder];
       
       
        uint score = stakedAmount
                            .mul(scoreRate)
                            .mul(timeDiff)
                            .div(scoreInterval)
                            .div(1e4);
       
        uint eth = score.div(scoreEth);
        
        return eth;
        

    }

    /* Calculate realtime  User Score. */


    function getStakingScore(address _holder) public view returns (uint) {
           uint timeDiff = 0 ;
           if(lastScoreTime[_holder] > 0){
            timeDiff = now.sub(lastScoreTime[_holder]).div(2);            
           }

            uint stakedAmount = depositedTokens[_holder];
       
       
            uint score = stakedAmount
                            .mul(scoreRate)
                            .mul(timeDiff)
                            .div(scoreInterval)
                            .div(1e4);
        return score;
    }
    
    /* Calculate realtime User Staking Score. */

    
    function getPendingReward(address _holder) public view returns (uint) {
        if (!holders.contains(_holder)) return 0;
        if (depositedTokens[_holder] == 0) return 0;

        uint timeDiff = now.sub(lastClaimedTime[_holder]);
        uint stakedAmount = depositedTokens[_holder];
        
        uint pendingDivs = stakedAmount
                            .mul(rewardRate)
                            .mul(timeDiff)
                            .div(rewardInterval)
                            .div(1e4);
            
        return pendingDivs;
    }
    
    
    
    /* Fetch realtime Number of Token Claimed. */


    function getTotalClaimed() public view returns (uint) {
        return totalClaimedRewards;
    }

    /* Fetch realtime Number of User Staked. */


    function getNumberOfHolders() public view returns (uint) {
        return holders.length();
    }

    /* Fetch realtime Token  User Staked. */

      function getTotalStaked() public view returns (uint) {
        return totalStakedToken;
    }

     /* Fetch realtime Token  User UnStaked. */

      function getTotalUnStaked() public view returns (uint) {
        return totalUnstakedToken;
    }

    
    /* Fetch realtime Token Gain from UnstakeFee. */

      function getTotalFeeCollected() public view returns (uint) {
        return totalFeeCollected;
    }
    
    /* Record Staking with Offer check. */

    
    function stake(uint amountToStake) public {
        require(amountToStake > 0, "Cannot deposit 0 Tokens");
        require(Token(tokenAddress).transferFrom(msg.sender, address(this), amountToStake), "Insufficient Token Allowance");
        emit TokenStaked(msg.sender, amountToStake, now);
        
        updateAccount(msg.sender);
        updateLastScoreTime(msg.sender);
        totalStakedToken = totalStakedToken.add(amountToStake);
        
        if(stakingOffer > now){
            uint offerRaise = amountToStake.mul(stakingOfferRaise).div(1e4);          
            totalOfferRaise = totalOfferRaise.add(offerRaise);
            totalOfferUser[msg.sender] = offerRaise ;
            emit OfferStaked(totalStakedToken, now);

            amountToStake = amountToStake.add(offerRaise);
        }

            emit AllTokenStaked(totalStakedToken, now);


        depositedTokens[msg.sender] = depositedTokens[msg.sender].add(amountToStake);

        if (!holders.contains(msg.sender)) {
            holders.add(msg.sender);
            stakingTime[msg.sender] = now;
        }
    }
    
     
    /* Record UnStaking. */
     


    function unstake(uint amountToWithdraw) public {

        require(depositedTokens[msg.sender] >= amountToWithdraw, "Invalid amount to withdraw");        
         
        updateAccount(msg.sender);
        
        uint fee = amountToWithdraw.mul(unstakingFeeRate).div(1e4);
        uint amountAfterFee = amountToWithdraw.sub(fee);
        
        require(Token(tokenAddress).transfer(msg.sender, amountAfterFee), "Could not transfer tokens.");
        emit TokenUnstaked(msg.sender, amountAfterFee,now);
     
        require(Token(tokenAddress).transfer(burnAddress, fee), "Could not burn fee.");
        emit TokenBurned(fee,now);
       
        totalUnstakedToken = totalUnstakedToken.add(amountAfterFee);
        totalFeeCollected = totalFeeCollected.add(fee);
        emit AllTokenUnStaked(totalUnstakedToken, now);
        
        uint timeDiff = 0 ;
        
        if(lastScoreTime[msg.sender] > 0){
            timeDiff = now.sub(lastScoreTime[msg.sender]).div(2);            
        }
      
        uint score = amountAfterFee
                            .mul(scoreRate)
                            .mul(timeDiff)
                            .div(scoreInterval)
                            .div(1e4);
            
        
         
        uint eth = score.div(scoreEth);     
        totalEthClaimed = totalEthClaimed.add(eth);

        msg.sender.transfer(eth);
        emit EthClaimed(msg.sender ,eth,now);

        lastScoreTime[msg.sender] = now;

        depositedTokens[msg.sender] = depositedTokens[msg.sender].sub(amountToWithdraw);
        
        if (holders.contains(msg.sender) && depositedTokens[msg.sender] == 0) {
            holders.remove(msg.sender);
        }
    }


    /* Claim Reward. */

    
    function claimReward() public {
        updateAccount(msg.sender);
    }


  
    /* Claim ETH Equivalent to Score. */
  
    function claimScoreEth() public {
        uint timeDiff = 0 ;
        
        if(lastScoreTime[msg.sender] > 0){
            timeDiff = now.sub(lastScoreTime[msg.sender]).div(2);            
        }

        uint stakedAmount = depositedTokens[msg.sender];       
       
        uint score = stakedAmount
                            .mul(scoreRate)
                            .mul(timeDiff)
                            .div(scoreInterval)
                            .div(1e4);                    
         
        uint eth = score.div(scoreEth);     
        totalEthClaimed = totalEthClaimed.add(eth);
        msg.sender.transfer(eth);
        emit EthClaimed(msg.sender , eth,now);
 
        
        lastScoreTime[msg.sender] = now;
    
    }
    

    function deposit() payable public {
        totalEthDeposited = totalEthDeposited.add(msg.value);         
    }
    
    function updateScoreEth(uint _amount) public onlyOwner {
            scoreEth = _amount ;
    }
    

       function updateOffer(uint time, uint raise) public onlyOwner {
            stakingOffer = time ;
            stakingOfferRaise = raise ;
    }
 
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"AllTokenClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"AllTokenStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"AllTokenUnStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"EthClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"OfferStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"TokenBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"TokenStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"TokenUnstaked","type":"event"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimScoreEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cliffTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getPendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getScoreEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getStakingScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalUnStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastScoreTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scoreEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scoreInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scoreRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToStake","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingOffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingOfferRaise","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalEarnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalOfferRaise","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalOfferUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUnstakedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakingFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"raise","type":"uint256"}],"name":"updateOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateScoreEth","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526103e86001556000600255600060035560006004556000600555600060065560006007556000600855635fd6489060095560fa600a5534801561004657600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612968806100966000396000f3fe6080604052600436106102515760003560e01c806393bcb5a311610139578063c7c09074116100b6578063d578ceab1161007a578063d578ceab14610a75578063d816c7d514610aa0578063eae6754a14610acb578063f2fde38b14610af6578063f3f91fa014610b47578063f509ea6614610bac57610251565b8063c7c09074146109bf578063cb6d8ee6146109ea578063ccb9891e14610a15578063ce40453d14610a40578063d0e30db014610a6b57610251565b8063af900492116100fd578063af900492146108c2578063b88a802f146108ed578063b9b2b5cd14610904578063bec4de3f1461092f578063c326bf4f1461095a57610251565b806393bcb5a31461078f5780639d76ea58146107a6578063a694fc3a146107e7578063a84e9dee14610822578063a967b72c1461088757610251565b80634df9d6ba116101d257806374c8c6111161019657806374c8c611146106035780637b0a47ee1461062e57806384eda6621461065957806385b6b621146106be57806387285587146106e95780638da5cb5b1461074e57610251565b80634df9d6ba14610468578063583d42fd146104cd5780636270cd181461053257806370d5ae0514610597578063736a83a1146105d857610251565b80632e17de78116102195780632e17de7814610347578063308feec31461038257806335b4f8a3146103ad57806335d8f62f146103d85780633a5ec6531461043d57610251565b806301779c9d146102565780630917e776146102815780630b7b925b146102ac5780630f1a6444146102f15780632a4cc2f01461031c575b600080fd5b34801561026257600080fd5b5061026b610c11565b6040518082815260200191505060405180910390f35b34801561028d57600080fd5b50610296610c17565b6040518082815260200191505060405180910390f35b3480156102b857600080fd5b506102ef600480360360408110156102cf57600080fd5b810190808035906020019092919080359060200190929190505050610c21565b005b3480156102fd57600080fd5b50610306610c8b565b6040518082815260200191505060405180910390f35b34801561032857600080fd5b50610331610c92565b6040518082815260200191505060405180910390f35b34801561035357600080fd5b506103806004803603602081101561036a57600080fd5b8101908080359060200190929190505050610c98565b005b34801561038e57600080fd5b5061039761141f565b6040518082815260200191505060405180910390f35b3480156103b957600080fd5b506103c2611430565b6040518082815260200191505060405180910390f35b3480156103e457600080fd5b50610427600480360360208110156103fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061143a565b6040518082815260200191505060405180910390f35b34801561044957600080fd5b506104526115ae565b6040518082815260200191505060405180910390f35b34801561047457600080fd5b506104b76004803603602081101561048b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115b5565b6040518082815260200191505060405180910390f35b3480156104d957600080fd5b5061051c600480360360208110156104f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611724565b6040518082815260200191505060405180910390f35b34801561053e57600080fd5b506105816004803603602081101561055557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061173c565b6040518082815260200191505060405180910390f35b3480156105a357600080fd5b506105ac611754565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105e457600080fd5b506105ed611759565b6040518082815260200191505060405180910390f35b34801561060f57600080fd5b50610618611763565b6040518082815260200191505060405180910390f35b34801561063a57600080fd5b50610643611769565b6040518082815260200191505060405180910390f35b34801561066557600080fd5b506106a86004803603602081101561067c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061176f565b6040518082815260200191505060405180910390f35b3480156106ca57600080fd5b506106d3611787565b6040518082815260200191505060405180910390f35b3480156106f557600080fd5b506107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061178d565b6040518082815260200191505060405180910390f35b34801561075a57600080fd5b506107636118e7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561079b57600080fd5b506107a461190b565b005b3480156107b257600080fd5b506107bb611b68565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107f357600080fd5b506108206004803603602081101561080a57600080fd5b8101908080359060200190929190505050611b80565b005b34801561082e57600080fd5b506108716004803603602081101561084557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fed565b6040518082815260200191505060405180910390f35b34801561089357600080fd5b506108c0600480360360208110156108aa57600080fd5b8101908080359060200190929190505050612005565b005b3480156108ce57600080fd5b506108d7612067565b6040518082815260200191505060405180910390f35b3480156108f957600080fd5b50610902612071565b005b34801561091057600080fd5b5061091961207c565b6040518082815260200191505060405180910390f35b34801561093b57600080fd5b50610944612082565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b506109a96004803603602081101561097d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061208a565b6040518082815260200191505060405180910390f35b3480156109cb57600080fd5b506109d46120a2565b6040518082815260200191505060405180910390f35b3480156109f657600080fd5b506109ff6120a8565b6040518082815260200191505060405180910390f35b348015610a2157600080fd5b50610a2a6120ae565b6040518082815260200191505060405180910390f35b348015610a4c57600080fd5b50610a556120b4565b6040518082815260200191505060405180910390f35b610a736120ba565b005b348015610a8157600080fd5b50610a8a6120d7565b6040518082815260200191505060405180910390f35b348015610aac57600080fd5b50610ab56120dd565b6040518082815260200191505060405180910390f35b348015610ad757600080fd5b50610ae06120e2565b6040518082815260200191505060405180910390f35b348015610b0257600080fd5b50610b4560048036036020811015610b1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120e8565b005b348015610b5357600080fd5b50610b9660048036036020811015610b6a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612237565b6040518082815260200191505060405180910390f35b348015610bb857600080fd5b50610bfb60048036036020811015610bcf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061224f565b6040518082815260200191505060405180910390f35b600a5481565b6000600354905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7957600080fd5b8160098190555080600a819055505050565b6203f48081565b60045481565b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b610d5633612267565b6000610d80612710610d7260fa8561253190919063ffffffff16565b61256090919063ffffffff16565b90506000610d97828461257990919063ffffffff16565b9050734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b505050506040513d6020811015610e4857600080fd5b8101908080519060200190929190505050610ecb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b423373ffffffffffffffffffffffffffffffffffffffff167f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf836040518082815260200191505060405180910390a3734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fa057600080fd5b505af1158015610fb4573d6000803e3d6000fd5b505050506040513d6020811015610fca57600080fd5b810190808051906020019092919050505061104d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f436f756c64206e6f74206275726e206665652e0000000000000000000000000081525060200191505060405180910390fd5b427f43ce8febc9822756d8f34b35cd628db23dc57fe810cb077080d7c740fcc6988f836040518082815260200191505060405180910390a261109a8160045461259090919063ffffffff16565b6004819055506110b58260075461259090919063ffffffff16565b600781905550427fa15f07f56600a91570db6667e7c35b836d5d4258237cc82400dc5a7d8784eda56004546040518082815260200191505060405180910390a2600080601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111a6576111a36002611195601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b61256090919063ffffffff16565b90505b60006111f86127106111ea6203f4806111dc866111ce6103e88a61253190919063ffffffff16565b61253190919063ffffffff16565b61256090919063ffffffff16565b61256090919063ffffffff16565b905060006112116001548361256090919063ffffffff16565b90506112288160065461259090919063ffffffff16565b6006819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611274573d6000803e3d6000fd5b50423373ffffffffffffffffffffffffffffffffffffffff167ff4c8e3a141f402733f36011a62cef94385bf3bc2905fca8df9bab1a429e5199e836040518082815260200191505060405180910390a342601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061135a86600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113b133600b6125ac90919063ffffffff16565b80156113fc57506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156114175761141533600b6125dc90919063ffffffff16565b505b505050505050565b600061142b600b61260c565b905090565b6000600754905090565b600080600090506000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156114f1576114ee60026114e0601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b61256090919063ffffffff16565b90505b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006115876127106115796203f48061156b8761155d6103e88961253190919063ffffffff16565b61253190919063ffffffff16565b61256090919063ffffffff16565b61256090919063ffffffff16565b905060006115a06001548361256090919063ffffffff16565b905080945050505050919050565b6203f48081565b60006115cb82600b6125ac90919063ffffffff16565b6115d8576000905061171f565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611629576000905061171f565b600061167d600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b90506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006117166127106117086301e133806116fa876116ec611f408961253190919063ffffffff16565b61253190919063ffffffff16565b61256090919063ffffffff16565b61256090919063ffffffff16565b90508093505050505b919050565b600e6020528060005260406000206000915090505481565b60106020528060005260406000206000915090505481565b600081565b6000600254905090565b60065481565b611f4081565b60116020528060005260406000206000915090505481565b60085481565b600080600090506000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611844576118416002611833601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b61256090919063ffffffff16565b90505b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006118da6127106118cc6203f4806118be876118b06103e88961253190919063ffffffff16565b61253190919063ffffffff16565b61256090919063ffffffff16565b61256090919063ffffffff16565b9050809350505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156119bc576119b960026119ab601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b61256090919063ffffffff16565b90505b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611a52612710611a446203f480611a3687611a286103e88961253190919063ffffffff16565b61253190919063ffffffff16565b61256090919063ffffffff16565b61256090919063ffffffff16565b90506000611a6b6001548361256090919063ffffffff16565b9050611a828160065461259090919063ffffffff16565b6006819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ace573d6000803e3d6000fd5b50423373ffffffffffffffffffffffffffffffffffffffff167ff4c8e3a141f402733f36011a62cef94385bf3bc2905fca8df9bab1a429e5199e836040518082815260200191505060405180910390a342601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d81565b60008111611bf6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c9957600080fd5b505af1158015611cad573d6000803e3d6000fd5b505050506040513d6020811015611cc357600080fd5b8101908080519060200190929190505050611d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b423373ffffffffffffffffffffffffffffffffffffffff167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d2836040518082815260200191505060405180910390a3611d9e33612267565b611da733612621565b611dbc8160035461259090919063ffffffff16565b600381905550426009541115611ea9576000611df7612710611de9600a548561253190919063ffffffff16565b61256090919063ffffffff16565b9050611e0e8160085461259090919063ffffffff16565b60088190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550427f572884873248ee7e04cba5e3859e101ba1e2ce191c450ae4711720174a8d7b766003546040518082815260200191505060405180910390a2611ea5818361259090919063ffffffff16565b9150505b427f1bb5608a984ccf66cb52c29035f05db8c8b2cf6da66ea824e485eb74e6fb5e2a6003546040518082815260200191505060405180910390a2611f3581600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259090919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f8c33600b6125ac90919063ffffffff16565b611fea57611fa433600b61277690919063ffffffff16565b5042600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b60136020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461205d57600080fd5b8060018190555050565b6000600454905090565b61207a33612267565b565b60075481565b6301e1338081565b600d6020528060005260406000206000915090505481565b6103e881565b60035481565b60095481565b60015481565b6120cf3460055461259090919063ffffffff16565b600581905550565b60025481565b60fa81565b60055481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461214057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561217a57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f6020528060005260406000206000915090505481565b60126020528060005260406000206000915090505481565b6000612272826115b5565b905060008111156124e957734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561230257600080fd5b505af1158015612316573d6000803e3d6000fd5b505050506040513d602081101561232c57600080fd5b81019080805190602001909291905050506123af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b61240181601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259090919063ffffffff16565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124598160025461259090919063ffffffff16565b600281905550428273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325836040518082815260200191505060405180910390a3427f1d2034b794f7eb0f4a3f72d353be055f83bb53bc3bd2d8629ba87452047d237d6002546040518082815260200191505060405180910390a25b42600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000808284029050600084148061255057508284828161254d57fe5b04145b61255657fe5b8091505092915050565b60008082848161256c57fe5b0490508091505092915050565b60008282111561258557fe5b818303905092915050565b6000808284019050838110156125a257fe5b8091505092915050565b60006125d4836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6127a6565b905092915050565b6000612604836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6127c9565b905092915050565b600061261a826000016128b1565b9050919050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561272e5760006126d060026126c2601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b61256090919063ffffffff16565b90506126e5814261257990919063ffffffff16565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050612773565b42601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b600061279e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6128c2565b905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146128a5576000600182039050600060018660000180549050039050600086600001828154811061281457fe5b906000526020600020015490508087600001848154811061283157fe5b906000526020600020018190555060018301876001016000838152602001908152602001600020819055508660000180548061286957fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506128ab565b60009150505b92915050565b600081600001805490509050919050565b60006128ce83836127a6565b61292757826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061292c565b600090505b9291505056fea26469706673582212205641a33f73d999b39c69e289aaa2c5490914c7c8fb24c87d7eee2b6e5bf3fba864736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102515760003560e01c806393bcb5a311610139578063c7c09074116100b6578063d578ceab1161007a578063d578ceab14610a75578063d816c7d514610aa0578063eae6754a14610acb578063f2fde38b14610af6578063f3f91fa014610b47578063f509ea6614610bac57610251565b8063c7c09074146109bf578063cb6d8ee6146109ea578063ccb9891e14610a15578063ce40453d14610a40578063d0e30db014610a6b57610251565b8063af900492116100fd578063af900492146108c2578063b88a802f146108ed578063b9b2b5cd14610904578063bec4de3f1461092f578063c326bf4f1461095a57610251565b806393bcb5a31461078f5780639d76ea58146107a6578063a694fc3a146107e7578063a84e9dee14610822578063a967b72c1461088757610251565b80634df9d6ba116101d257806374c8c6111161019657806374c8c611146106035780637b0a47ee1461062e57806384eda6621461065957806385b6b621146106be57806387285587146106e95780638da5cb5b1461074e57610251565b80634df9d6ba14610468578063583d42fd146104cd5780636270cd181461053257806370d5ae0514610597578063736a83a1146105d857610251565b80632e17de78116102195780632e17de7814610347578063308feec31461038257806335b4f8a3146103ad57806335d8f62f146103d85780633a5ec6531461043d57610251565b806301779c9d146102565780630917e776146102815780630b7b925b146102ac5780630f1a6444146102f15780632a4cc2f01461031c575b600080fd5b34801561026257600080fd5b5061026b610c11565b6040518082815260200191505060405180910390f35b34801561028d57600080fd5b50610296610c17565b6040518082815260200191505060405180910390f35b3480156102b857600080fd5b506102ef600480360360408110156102cf57600080fd5b810190808035906020019092919080359060200190929190505050610c21565b005b3480156102fd57600080fd5b50610306610c8b565b6040518082815260200191505060405180910390f35b34801561032857600080fd5b50610331610c92565b6040518082815260200191505060405180910390f35b34801561035357600080fd5b506103806004803603602081101561036a57600080fd5b8101908080359060200190929190505050610c98565b005b34801561038e57600080fd5b5061039761141f565b6040518082815260200191505060405180910390f35b3480156103b957600080fd5b506103c2611430565b6040518082815260200191505060405180910390f35b3480156103e457600080fd5b50610427600480360360208110156103fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061143a565b6040518082815260200191505060405180910390f35b34801561044957600080fd5b506104526115ae565b6040518082815260200191505060405180910390f35b34801561047457600080fd5b506104b76004803603602081101561048b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115b5565b6040518082815260200191505060405180910390f35b3480156104d957600080fd5b5061051c600480360360208110156104f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611724565b6040518082815260200191505060405180910390f35b34801561053e57600080fd5b506105816004803603602081101561055557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061173c565b6040518082815260200191505060405180910390f35b3480156105a357600080fd5b506105ac611754565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105e457600080fd5b506105ed611759565b6040518082815260200191505060405180910390f35b34801561060f57600080fd5b50610618611763565b6040518082815260200191505060405180910390f35b34801561063a57600080fd5b50610643611769565b6040518082815260200191505060405180910390f35b34801561066557600080fd5b506106a86004803603602081101561067c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061176f565b6040518082815260200191505060405180910390f35b3480156106ca57600080fd5b506106d3611787565b6040518082815260200191505060405180910390f35b3480156106f557600080fd5b506107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061178d565b6040518082815260200191505060405180910390f35b34801561075a57600080fd5b506107636118e7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561079b57600080fd5b506107a461190b565b005b3480156107b257600080fd5b506107bb611b68565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107f357600080fd5b506108206004803603602081101561080a57600080fd5b8101908080359060200190929190505050611b80565b005b34801561082e57600080fd5b506108716004803603602081101561084557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fed565b6040518082815260200191505060405180910390f35b34801561089357600080fd5b506108c0600480360360208110156108aa57600080fd5b8101908080359060200190929190505050612005565b005b3480156108ce57600080fd5b506108d7612067565b6040518082815260200191505060405180910390f35b3480156108f957600080fd5b50610902612071565b005b34801561091057600080fd5b5061091961207c565b6040518082815260200191505060405180910390f35b34801561093b57600080fd5b50610944612082565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b506109a96004803603602081101561097d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061208a565b6040518082815260200191505060405180910390f35b3480156109cb57600080fd5b506109d46120a2565b6040518082815260200191505060405180910390f35b3480156109f657600080fd5b506109ff6120a8565b6040518082815260200191505060405180910390f35b348015610a2157600080fd5b50610a2a6120ae565b6040518082815260200191505060405180910390f35b348015610a4c57600080fd5b50610a556120b4565b6040518082815260200191505060405180910390f35b610a736120ba565b005b348015610a8157600080fd5b50610a8a6120d7565b6040518082815260200191505060405180910390f35b348015610aac57600080fd5b50610ab56120dd565b6040518082815260200191505060405180910390f35b348015610ad757600080fd5b50610ae06120e2565b6040518082815260200191505060405180910390f35b348015610b0257600080fd5b50610b4560048036036020811015610b1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120e8565b005b348015610b5357600080fd5b50610b9660048036036020811015610b6a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612237565b6040518082815260200191505060405180910390f35b348015610bb857600080fd5b50610bfb60048036036020811015610bcf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061224f565b6040518082815260200191505060405180910390f35b600a5481565b6000600354905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7957600080fd5b8160098190555080600a819055505050565b6203f48081565b60045481565b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b610d5633612267565b6000610d80612710610d7260fa8561253190919063ffffffff16565b61256090919063ffffffff16565b90506000610d97828461257990919063ffffffff16565b9050734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b505050506040513d6020811015610e4857600080fd5b8101908080519060200190929190505050610ecb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b423373ffffffffffffffffffffffffffffffffffffffff167f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf836040518082815260200191505060405180910390a3734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fa057600080fd5b505af1158015610fb4573d6000803e3d6000fd5b505050506040513d6020811015610fca57600080fd5b810190808051906020019092919050505061104d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f436f756c64206e6f74206275726e206665652e0000000000000000000000000081525060200191505060405180910390fd5b427f43ce8febc9822756d8f34b35cd628db23dc57fe810cb077080d7c740fcc6988f836040518082815260200191505060405180910390a261109a8160045461259090919063ffffffff16565b6004819055506110b58260075461259090919063ffffffff16565b600781905550427fa15f07f56600a91570db6667e7c35b836d5d4258237cc82400dc5a7d8784eda56004546040518082815260200191505060405180910390a2600080601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111a6576111a36002611195601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b61256090919063ffffffff16565b90505b60006111f86127106111ea6203f4806111dc866111ce6103e88a61253190919063ffffffff16565b61253190919063ffffffff16565b61256090919063ffffffff16565b61256090919063ffffffff16565b905060006112116001548361256090919063ffffffff16565b90506112288160065461259090919063ffffffff16565b6006819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611274573d6000803e3d6000fd5b50423373ffffffffffffffffffffffffffffffffffffffff167ff4c8e3a141f402733f36011a62cef94385bf3bc2905fca8df9bab1a429e5199e836040518082815260200191505060405180910390a342601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061135a86600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113b133600b6125ac90919063ffffffff16565b80156113fc57506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156114175761141533600b6125dc90919063ffffffff16565b505b505050505050565b600061142b600b61260c565b905090565b6000600754905090565b600080600090506000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156114f1576114ee60026114e0601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b61256090919063ffffffff16565b90505b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006115876127106115796203f48061156b8761155d6103e88961253190919063ffffffff16565b61253190919063ffffffff16565b61256090919063ffffffff16565b61256090919063ffffffff16565b905060006115a06001548361256090919063ffffffff16565b905080945050505050919050565b6203f48081565b60006115cb82600b6125ac90919063ffffffff16565b6115d8576000905061171f565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611629576000905061171f565b600061167d600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b90506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006117166127106117086301e133806116fa876116ec611f408961253190919063ffffffff16565b61253190919063ffffffff16565b61256090919063ffffffff16565b61256090919063ffffffff16565b90508093505050505b919050565b600e6020528060005260406000206000915090505481565b60106020528060005260406000206000915090505481565b600081565b6000600254905090565b60065481565b611f4081565b60116020528060005260406000206000915090505481565b60085481565b600080600090506000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611844576118416002611833601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b61256090919063ffffffff16565b90505b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006118da6127106118cc6203f4806118be876118b06103e88961253190919063ffffffff16565b61253190919063ffffffff16565b61256090919063ffffffff16565b61256090919063ffffffff16565b9050809350505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156119bc576119b960026119ab601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b61256090919063ffffffff16565b90505b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611a52612710611a446203f480611a3687611a286103e88961253190919063ffffffff16565b61253190919063ffffffff16565b61256090919063ffffffff16565b61256090919063ffffffff16565b90506000611a6b6001548361256090919063ffffffff16565b9050611a828160065461259090919063ffffffff16565b6006819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ace573d6000803e3d6000fd5b50423373ffffffffffffffffffffffffffffffffffffffff167ff4c8e3a141f402733f36011a62cef94385bf3bc2905fca8df9bab1a429e5199e836040518082815260200191505060405180910390a342601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d81565b60008111611bf6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c9957600080fd5b505af1158015611cad573d6000803e3d6000fd5b505050506040513d6020811015611cc357600080fd5b8101908080519060200190929190505050611d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b423373ffffffffffffffffffffffffffffffffffffffff167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d2836040518082815260200191505060405180910390a3611d9e33612267565b611da733612621565b611dbc8160035461259090919063ffffffff16565b600381905550426009541115611ea9576000611df7612710611de9600a548561253190919063ffffffff16565b61256090919063ffffffff16565b9050611e0e8160085461259090919063ffffffff16565b60088190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550427f572884873248ee7e04cba5e3859e101ba1e2ce191c450ae4711720174a8d7b766003546040518082815260200191505060405180910390a2611ea5818361259090919063ffffffff16565b9150505b427f1bb5608a984ccf66cb52c29035f05db8c8b2cf6da66ea824e485eb74e6fb5e2a6003546040518082815260200191505060405180910390a2611f3581600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259090919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f8c33600b6125ac90919063ffffffff16565b611fea57611fa433600b61277690919063ffffffff16565b5042600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b60136020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461205d57600080fd5b8060018190555050565b6000600454905090565b61207a33612267565b565b60075481565b6301e1338081565b600d6020528060005260406000206000915090505481565b6103e881565b60035481565b60095481565b60015481565b6120cf3460055461259090919063ffffffff16565b600581905550565b60025481565b60fa81565b60055481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461214057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561217a57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f6020528060005260406000206000915090505481565b60126020528060005260406000206000915090505481565b6000612272826115b5565b905060008111156124e957734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561230257600080fd5b505af1158015612316573d6000803e3d6000fd5b505050506040513d602081101561232c57600080fd5b81019080805190602001909291905050506123af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b61240181601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259090919063ffffffff16565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124598160025461259090919063ffffffff16565b600281905550428273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325836040518082815260200191505060405180910390a3427f1d2034b794f7eb0f4a3f72d353be055f83bb53bc3bd2d8629ba87452047d237d6002546040518082815260200191505060405180910390a25b42600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000808284029050600084148061255057508284828161254d57fe5b04145b61255657fe5b8091505092915050565b60008082848161256c57fe5b0490508091505092915050565b60008282111561258557fe5b818303905092915050565b6000808284019050838110156125a257fe5b8091505092915050565b60006125d4836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6127a6565b905092915050565b6000612604836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6127c9565b905092915050565b600061261a826000016128b1565b9050919050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561272e5760006126d060026126c2601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261257990919063ffffffff16565b61256090919063ffffffff16565b90506126e5814261257990919063ffffffff16565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050612773565b42601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b600061279e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6128c2565b905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146128a5576000600182039050600060018660000180549050039050600086600001828154811061281457fe5b906000526020600020015490508087600001848154811061283157fe5b906000526020600020018190555060018301876001016000838152602001908152602001600020819055508660000180548061286957fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506128ab565b60009150505b92915050565b600081600001805490509050919050565b60006128ce83836127a6565b61292757826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061292c565b600090505b9291505056fea26469706673582212205641a33f73d999b39c69e289aaa2c5490914c7c8fb24c87d7eee2b6e5bf3fba864736f6c634300060c0033

Deployed Bytecode Sourcemap

10242:10509:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12038:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15970:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20600:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11650:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11785:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17642:1751;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15813:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16297:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13690:623;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11417:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15000:574;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12198:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12304:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11140:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15653:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11866:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11269:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12361:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11944:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14368:562;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9273:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19570:776;;;;;;;;;;;;;:::i;:::-;;11052:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16463:1120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12465:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20486:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16126:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19436:74;;;;;;;;;;;;;:::i;:::-;;11904:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11364:46;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12143:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11314:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11746:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11994:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11475:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20360:114;;;:::i;:::-;;11704:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11552:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11826:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9892:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12249:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12411:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12038:35;;;;:::o;15970:95::-;16017:4;16041:16;;16034:23;;15970:95;:::o;20600:145::-;9703:5;;;;;;;;;;9689:19;;:10;:19;;;9681:28;;;;;;20691:4:::1;20676:12;:19;;;;20731:5;20711:17;:25;;;;20600:145:::0;;:::o;11650:41::-;11683:8;11650:41;:::o;11785:34::-;;;;:::o;17642:1751::-;17741:16;17710:15;:27;17726:10;17710:27;;;;;;;;;;;;;;;;:47;;17702:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17818:25;17832:10;17818:13;:25::i;:::-;17864:8;17875:47;17918:3;17875:38;11592:3;17875:16;:20;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;17864:58;;17933:19;17955:25;17976:3;17955:16;:20;;:25;;;;:::i;:::-;17933:47;;11091:42;18009:28;;;18038:10;18050:14;18009:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18001:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18153:3;18126:10;18112:45;;;18138:14;18112:45;;;;;;;;;;;;;;;;;;11091:42;18183:28;;;11178:42;18225:3;18183:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18175:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18285:3;18269:20;18281:3;18269:20;;;;;;;;;;;;;;;;;;18330:38;18353:14;18330:18;;:22;;:38;;;;:::i;:::-;18309:18;:59;;;;18399:26;18421:3;18399:17;;:21;;:26;;;;:::i;:::-;18379:17;:46;;;;18478:3;18441:41;18458:18;;18441:41;;;;;;;;;;;;;;;;;;18503:13;18573:1;18545:13;:25;18559:10;18545:25;;;;;;;;;;;;;;;;:29;18542:124;;;18601:41;18640:1;18601:34;18609:13;:25;18623:10;18609:25;;;;;;;;;;;;;;;;18601:3;:7;;:34;;;;:::i;:::-;:38;;:41;;;;:::i;:::-;18590:52;;18542:124;18684:10;18697:191;18884:3;18697:152;11454:6;18697:103;18791:8;18697:59;11347:4;18697:14;:48;;:59;;;;:::i;:::-;:93;;:103;;;;:::i;:::-;:137;;:152;;;;:::i;:::-;:186;;:191;;;;:::i;:::-;18684:204;;18934:8;18945:19;18955:8;;18945:5;:9;;:19;;;;:::i;:::-;18934:30;;18998:24;19018:3;18998:15;;:19;;:24;;;;:::i;:::-;18980:15;:42;;;;19035:10;:19;;:24;19055:3;19035:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19102:3;19086:10;19075:31;;;19098:3;19075:31;;;;;;;;;;;;;;;;;;19147:3;19119:13;:25;19133:10;19119:25;;;;;;;;;;;;;;;:31;;;;19193:49;19225:16;19193:15;:27;19209:10;19193:27;;;;;;;;;;;;;;;;:31;;:49;;;;:::i;:::-;19163:15;:27;19179:10;19163:27;;;;;;;;;;;;;;;:79;;;;19267:28;19284:10;19267:7;:16;;:28;;;;:::i;:::-;:64;;;;;19330:1;19299:15;:27;19315:10;19299:27;;;;;;;;;;;;;;;;:32;19267:64;19263:123;;;19348:26;19363:10;19348:7;:14;;:26;;;;:::i;:::-;;19263:123;17642:1751;;;;;;:::o;15813:99::-;15864:4;15888:16;:7;:14;:16::i;:::-;15881:23;;15813:99;:::o;16297:102::-;16350:4;16374:17;;16367:24;;16297:102;:::o;13690:623::-;13749:4;13766:13;13782:1;13766:17;;13832:1;13807:13;:22;13821:7;13807:22;;;;;;;;;;;;;;;;:26;13804:121;;;13860:38;13896:1;13860:31;13868:13;:22;13882:7;13868:22;;;;;;;;;;;;;;;;13860:3;:7;;:31;;;;:::i;:::-;:35;;:38;;;;:::i;:::-;13849:49;;13804:121;13937:17;13957:15;:24;13973:7;13957:24;;;;;;;;;;;;;;;;13937:44;;14010:10;14023:189;14208:3;14023:150;11454:6;14023:101;14115:8;14023:57;11347:4;14023:12;:46;;:57;;;;:::i;:::-;:91;;:101;;;;:::i;:::-;:135;;:150;;;;:::i;:::-;:184;;:189;;;;:::i;:::-;14010:202;;14232:8;14243:19;14253:8;;14243:5;:9;;:19;;;;:::i;:::-;14232:30;;14290:3;14283:10;;;;;;13690:623;;;:::o;11417:43::-;11454:6;11417:43;:::o;15000:574::-;15064:4;15086:25;15103:7;15086;:16;;:25;;;;:::i;:::-;15081:40;;15120:1;15113:8;;;;15081:40;15164:1;15136:15;:24;15152:7;15136:24;;;;;;;;;;;;;;;;:29;15132:43;;;15174:1;15167:8;;;;15132:43;15188:13;15204:33;15212:15;:24;15228:7;15212:24;;;;;;;;;;;;;;;;15204:3;:7;;:33;;;;:::i;:::-;15188:49;;15248:17;15268:15;:24;15284:7;15268:24;;;;;;;;;;;;;;;;15248:44;;15313:16;15332:191;15519:3;15332:152;11402:8;15332:102;15425:8;15332:58;11303:4;15332:12;:46;;:58;;;;:::i;:::-;:92;;:102;;;;:::i;:::-;:136;;:152;;;;:::i;:::-;:186;;:191;;;;:::i;:::-;15313:210;;15555:11;15548:18;;;;;15000:574;;;;:::o;12198:44::-;;;;;;;;;;;;;;;;;:::o;12304:50::-;;;;;;;;;;;;;;;;;:::o;11140:80::-;11178:42;11140:80;:::o;15653:99::-;15701:4;15725:19;;15718:26;;15653:99;:::o;11866:31::-;;;;:::o;11269:38::-;11303:4;11269:38;:::o;12361:43::-;;;;;;;;;;;;;;;;;:::o;11944:31::-;;;;:::o;14368:562::-;14431:4;14451:13;14467:1;14451:17;;14511:1;14486:13;:22;14500:7;14486:22;;;;;;;;;;;;;;;;:26;14483:121;;;14539:38;14575:1;14539:31;14547:13;:22;14561:7;14547:22;;;;;;;;;;;;;;;;14539:3;:7;;:31;;;;:::i;:::-;:35;;:38;;;;:::i;:::-;14528:49;;14483:121;14620:17;14640:15;:24;14656:7;14640:24;;;;;;;;;;;;;;;;14620:44;;14697:10;14710:189;14895:3;14710:150;11454:6;14710:101;14802:8;14710:57;11347:4;14710:12;:46;;:57;;;;:::i;:::-;:91;;:101;;;;:::i;:::-;:135;;:150;;;;:::i;:::-;:184;;:189;;;;:::i;:::-;14697:202;;14917:5;14910:12;;;;;14368:562;;;:::o;9273:20::-;;;;;;;;;;;;:::o;19570:776::-;19613:13;19683:1;19655:13;:25;19669:10;19655:25;;;;;;;;;;;;;;;;:29;19652:124;;;19711:41;19750:1;19711:34;19719:13;:25;19733:10;19719:25;;;;;;;;;;;;;;;;19711:3;:7;;:34;;;;:::i;:::-;:38;;:41;;;;:::i;:::-;19700:52;;19652:124;19788:17;19808:15;:27;19824:10;19808:27;;;;;;;;;;;;;;;;19788:47;;19862:10;19875:189;20060:3;19875:150;11454:6;19875:101;19967:8;19875:57;11347:4;19875:12;:46;;:57;;;;:::i;:::-;:91;;:101;;;;:::i;:::-;:135;;:150;;;;:::i;:::-;:184;;:189;;;;:::i;:::-;19862:202;;20106:8;20117:19;20127:8;;20117:5;:9;;:19;;;;:::i;:::-;20106:30;;20170:24;20190:3;20170:15;;:19;;:24;;;;:::i;:::-;20152:15;:42;;;;20205:10;:19;;:24;20225:3;20205:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20273:3;20256:10;20245:32;;;20269:3;20245:32;;;;;;;;;;;;;;;;;;20329:3;20301:13;:25;20315:10;20301:25;;;;;;;;;;;;;;;:31;;;;19570:776;;;;:::o;11052:81::-;11091:42;11052:81;:::o;16463:1120::-;16540:1;16524:13;:17;16516:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11091:42;16588:32;;;16621:10;16641:4;16648:13;16588:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16580:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16750:3;16723:10;16711:43;;;16735:13;16711:43;;;;;;;;;;;;;;;;;;16775:25;16789:10;16775:13;:25::i;:::-;16811:31;16831:10;16811:19;:31::i;:::-;16872:35;16893:13;16872:16;;:20;;:35;;;;:::i;:::-;16853:16;:54;;;;16946:3;16931:12;;:18;16928:357;;;16965:15;16983:45;17024:3;16983:36;17001:17;;16983:13;:17;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;16965:63;;17071:31;17091:10;17071:15;;:19;;:31;;;;:::i;:::-;17053:15;:49;;;;17146:10;17117:14;:26;17132:10;17117:26;;;;;;;;;;;;;;;:39;;;;17207:3;17177:34;17189:16;;17177:34;;;;;;;;;;;;;;;;;;17244:29;17262:10;17244:13;:17;;:29;;;;:::i;:::-;17228:45;;16928:357;;17339:3;17306:37;17321:16;;17306:37;;;;;;;;;;;;;;;;;;17388:46;17420:13;17388:15;:27;17404:10;17388:27;;;;;;;;;;;;;;;;:31;;:46;;;;:::i;:::-;17358:15;:27;17374:10;17358:27;;;;;;;;;;;;;;;:76;;;;17452:28;17469:10;17452:7;:16;;:28;;;;:::i;:::-;17447:129;;17497:23;17509:10;17497:7;:11;;:23;;;;:::i;:::-;;17561:3;17535:11;:23;17547:10;17535:23;;;;;;;;;;;;;;;:29;;;;17447:129;16463:1120;:::o;12465:46::-;;;;;;;;;;;;;;;;;:::o;20486:97::-;9703:5;;;;;;;;;;9689:19;;:10;:19;;;9681:28;;;;;;20567:7:::1;20556:8;:18;;;;20486:97:::0;:::o;16126:99::-;16175:4;16199:18;;16192:25;;16126:99;:::o;19436:74::-;19477:25;19491:10;19477:13;:25::i;:::-;19436:74::o;11904:33::-;;;;:::o;11364:46::-;11402:8;11364:46;:::o;12143:48::-;;;;;;;;;;;;;;;;;:::o;11314:37::-;11347:4;11314:37;:::o;11746:32::-;;;;:::o;11994:37::-;;;;:::o;11475:27::-;;;;:::o;20360:114::-;20425:32;20447:9;20425:17;;:21;;:32;;;;:::i;:::-;20405:17;:52;;;;20360:114::o;11704:35::-;;;;:::o;11552:43::-;11592:3;11552:43;:::o;11826:33::-;;;;:::o;9892:178::-;9703:5;;;;;;;;;;9689:19;;:10;:19;;;9681:28;;;;;;9989:1:::1;9969:22;;:8;:22;;;;9961:31;;;::::0;::::1;;10032:8;10004:37;;10025:5;::::0;::::1;;;;;;;;10004:37;;;;;;;;;;;;10056:8;10048:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;9892:178:::0;:::o;12249:48::-;;;;;;;;;;;;;;;;;:::o;12411:47::-;;;;;;;;;;;;;;;;;:::o;12603:581::-;12662:16;12681:25;12698:7;12681:16;:25::i;:::-;12662:44;;12735:1;12721:11;:15;12717:419;;;11091:42;12761:28;;;12790:7;12799:11;12761:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12753:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12886:43;12917:11;12886:17;:26;12904:7;12886:26;;;;;;;;;;;;;;;;:30;;:43;;;;:::i;:::-;12857:17;:26;12875:7;12857:26;;;;;;;;;;;;;;;:72;;;;12966:36;12990:11;12966:19;;:23;;:36;;;;:::i;:::-;12944:19;:58;;;;13059:3;13037:7;13022:41;;;13046:11;13022:41;;;;;;;;;;;;;;;;;;13120:3;13083:41;13099:19;;13083:41;;;;;;;;;;;;;;;;;;12717:419;13173:3;13146:15;:24;13162:7;13146:24;;;;;;;;;;;;;;;:30;;;;12603:581;;:::o;398:147::-;456:7;472:9;488:1;484;:5;472:17;;508:1;503;:6;:20;;;;522:1;517;513;:5;;;;;;:10;503:20;496:28;;;;538:1;531:8;;;398:147;;;;:::o;551:270::-;609:7;700:9;716:1;712;:5;;;;;;700:17;;814:1;807:8;;;551:270;;;;:::o;827:113::-;885:7;913:1;908;:6;;901:14;;;;933:1;929;:5;922:12;;827:113;;;;:::o;946:133::-;1004:7;1020:9;1036:1;1032;:5;1020:17;;1056:1;1051;:6;;1044:14;;;;1072:1;1065:8;;;946:133;;;;:::o;6588:158::-;6668:4;6692:46;6702:3;:10;;6730:5;6722:14;;6714:23;;6692:9;:46::i;:::-;6685:53;;6588:158;;;;:::o;6353:149::-;6426:4;6450:44;6458:3;:10;;6486:5;6478:14;;6470:23;;6450:7;:44::i;:::-;6443:51;;6353:149;;;;:::o;6832:117::-;6895:7;6922:19;6930:3;:10;;6922:7;:19::i;:::-;6915:26;;6832:117;;;:::o;13246:369::-;13343:1;13318:13;:22;13332:7;13318:22;;;;;;;;;;;;;;;;:26;13315:275;;;13363:13;13410:38;13446:1;13410:31;13418:13;:22;13432:7;13418:22;;;;;;;;;;;;;;;;13410:3;:7;;:31;;;;:::i;:::-;:35;;:38;;;;:::i;:::-;13399:49;;13492:17;13500:8;13492:3;:7;;:17;;;;:::i;:::-;13467:13;:22;13481:7;13467:22;;;;;;;;;;;;;;;:42;;;;13315:275;;;;13571:3;13546:13;:22;13560:7;13546:22;;;;;;;;;;;;;;;:28;;;;13315:275;13246:369;:::o;6034:143::-;6104:4;6128:41;6133:3;:10;;6161:5;6153:14;;6145:23;;6128:4;:41::i;:::-;6121:48;;6034:143;;;;:::o;4908:129::-;4981:4;5028:1;5005:3;:12;;:19;5018:5;5005:19;;;;;;;;;;;;:24;;4998:31;;4908:129;;;;:::o;3278:1544::-;3344:4;3462:18;3483:3;:12;;:19;3496:5;3483:19;;;;;;;;;;;;3462:40;;3533:1;3519:10;:15;3515:1300;;3881:21;3918:1;3905:10;:14;3881:38;;3934:17;3975:1;3954:3;:11;;:18;;;;:22;3934:42;;4221:17;4241:3;:11;;4253:9;4241:22;;;;;;;;;;;;;;;;4221:42;;4387:9;4358:3;:11;;4370:13;4358:26;;;;;;;;;;;;;;;:38;;;;4506:1;4490:13;:17;4464:3;:12;;:23;4477:9;4464:23;;;;;;;;;;;:43;;;;4616:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;4711:3;:12;;:19;4724:5;4711:19;;;;;;;;;;;4704:26;;;4754:4;4747:11;;;;;;;;3515:1300;4798:5;4791:12;;;3278:1544;;;;;:::o;5123:109::-;5179:7;5206:3;:11;;:18;;;;5199:25;;5123:109;;;:::o;2688:414::-;2751:4;2773:21;2783:3;2788:5;2773:9;:21::i;:::-;2768:327;;2811:3;:11;;2828:5;2811:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2994:3;:11;;:18;;;;2972:3;:12;;:19;2985:5;2972:19;;;;;;;;;;;:40;;;;3034:4;3027:11;;;;2768:327;3078:5;3071:12;;2688:414;;;;;:::o

Swarm Source

ipfs://5641a33f73d999b39c69e289aaa2c5490914c7c8fb24c87d7eee2b6e5bf3fba8

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.