ETH Price: $3,667.71 (-0.99%)

Contract

0xDa719fE5443a2EFD5a61Ceb11fcb2a02FCeb8923
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Withdraw Staking127436862021-07-01 19:44:311249 days ago1625168671IN
0xDa719fE5...2FCeb8923
0 ETH0.004096223
Withdraw Staking126887122021-06-23 6:00:031258 days ago1624428003IN
0xDa719fE5...2FCeb8923
0 ETH0.0020085216.5
Withdraw Staking126466672021-06-16 16:48:011264 days ago1623862081IN
0xDa719fE5...2FCeb8923
0 ETH0.0039183722
Withdraw Staking126315312021-06-14 8:34:161266 days ago1623659656IN
0xDa719fE5...2FCeb8923
0 ETH0.0012171710
Withdraw Staking125563072021-06-02 16:59:441278 days ago1622653184IN
0xDa719fE5...2FCeb8923
0 ETH0.0056606829
Withdraw Staking125530852021-06-02 5:11:351279 days ago1622610695IN
0xDa719fE5...2FCeb8923
0 ETH0.0016740616
Withdraw Staking125435342021-05-31 17:51:051280 days ago1622483465IN
0xDa719fE5...2FCeb8923
0 ETH0.0062462732
Withdraw Staking125319932021-05-29 22:35:241282 days ago1622327724IN
0xDa719fE5...2FCeb8923
0 ETH0.0035621620
Withdraw Staking125199172021-05-28 1:36:381284 days ago1622165798IN
0xDa719fE5...2FCeb8923
0 ETH0.0063051929.7
Withdraw Staking125044882021-05-25 16:05:191286 days ago1621958719IN
0xDa719fE5...2FCeb8923
0 ETH0.008399369
Withdraw Staking124976472021-05-24 14:54:361287 days ago1621868076IN
0xDa719fE5...2FCeb8923
0 ETH0.0066145962
Withdraw Staking124912072021-05-23 14:54:261288 days ago1621781666IN
0xDa719fE5...2FCeb8923
0 ETH0.034584240
Withdraw Staking124885732021-05-23 5:03:331289 days ago1621746213IN
0xDa719fE5...2FCeb8923
0 ETH0.0072489940.7
Withdraw Staking124884512021-05-23 4:34:351289 days ago1621744475IN
0xDa719fE5...2FCeb8923
0 ETH0.0045035237
Withdraw Staking124748682021-05-21 1:47:071291 days ago1621561627IN
0xDa719fE5...2FCeb8923
0 ETH0.0059647249
Withdraw Staking124549262021-05-17 23:35:431294 days ago1621294543IN
0xDa719fE5...2FCeb8923
0 ETH0.0093590173.7
Withdraw Staking124435302021-05-16 5:00:011296 days ago1621141201IN
0xDa719fE5...2FCeb8923
0 ETH0.0098080746.2
Withdraw Staking124411522021-05-15 20:22:141296 days ago1621110134IN
0xDa719fE5...2FCeb8923
0 ETH0.0064834770
Withdraw Staking124407132021-05-15 18:45:401296 days ago1621104340IN
0xDa719fE5...2FCeb8923
0 ETH0.0101765483.6
Withdraw Staking124387922021-05-15 11:47:011296 days ago1621079221IN
0xDa719fE5...2FCeb8923
0 ETH0.0016247968
Withdraw Staking124387922021-05-15 11:47:011296 days ago1621079221IN
0xDa719fE5...2FCeb8923
0 ETH0.0121105268
Withdraw Staking124382892021-05-15 9:56:221296 days ago1621072582IN
0xDa719fE5...2FCeb8923
0 ETH0.0077914264
Withdraw Staking124382152021-05-15 9:38:001296 days ago1621071480IN
0xDa719fE5...2FCeb8923
0 ETH0.0075471962
Withdraw Staking124348482021-05-14 21:00:041297 days ago1621026004IN
0xDa719fE5...2FCeb8923
0 ETH0.01431785135.3
Withdraw Staking124342952021-05-14 19:02:521297 days ago1621018972IN
0xDa719fE5...2FCeb8923
0 ETH0.0261124123.00000145
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StakingPool

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2021-04-08
*/

/**
 *Submitted for verification at Etherscan.io on 2021-03-30
*/

pragma solidity 0.4.25;

/**
 * token contract functions
*/
contract Ierc20 {
    function balanceOf(address who) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function approveAndCall(address spender, uint tokens, bytes data) external returns (bool success);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    require(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a / b;
    return c;
  }

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

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

  function ceil(uint256 a, uint256 m) internal pure returns (uint256) {
    uint256 c = add(a,m);
    uint256 d = sub(c,1);
    return mul(div(d,m),m);
  }
}

contract Owned {
        address public owner;
        event OwnerChanges(address newOwner);
        
        constructor() public {
            owner = msg.sender;
        }

        modifier onlyOwner {
            require(msg.sender == owner);
            _;
        }

        function transferOwnership(address newOwner) onlyOwner external {
            require(newOwner != address(0), "New owner is the zero address");
            owner = newOwner;
            emit OwnerChanges(newOwner);
        }
}

contract StakingPool is Owned {
    using SafeMath for uint256;
    
    Ierc20 public tswap;
    Ierc20 public rewardToken;
    uint256 poolDuration;
    uint256 totalRewards;
    uint256 rewardsWithdrawn;
    uint256 poolStartTime;
    uint256 poolEndTime;
    uint256 totalStaked;
    // Represents a single stake for a user. A user may have multiple.
    struct Stake {
        uint256 amount;
        uint256 stakingTime;
        uint256 lastWithdrawTime;
    }
    mapping (address => Stake[]) public userStaking;
    
    // Represents total staking of an user
    struct UserTotals {
        uint256 totalStaking;
        uint256 totalStakingTIme;
    }
    mapping (address => UserTotals) public userTotalStaking;
    
    struct Ris3Rewards {
        uint256 totalWithdrawn;
        uint256 lastWithdrawTime;
    }
    mapping(address => Ris3Rewards) public userRewardInfo;
    
    event OwnerSetReward(uint256 amount);
    event Staked(address userAddress, uint256 amount);
    event StakingWithdrawal(address userAddress, uint256 amount);
    event RewardWithdrawal(address userAddress, uint256 amount);
    event PoolDurationChange(uint256 poolDuration);
    
    /**
     * Constrctor function
    */
    constructor() public {
        tswap = Ierc20(0xCC4304A31d09258b0029eA7FE63d032f52e44EFe);
        rewardToken = Ierc20(0x8D717AB5eaC1016b64C2A7fD04720Fd2D27D1B86);
        poolDuration = 720 hours;
    }
    
    //Set pool rewards
    function ownerSetPoolRewards(uint256 _rewardAmount) external onlyOwner {
        require(poolStartTime == 0, "Pool rewards already set");
        require(_rewardAmount > 0, "Cannot create pool with zero amount");
        
        //set total rewards value
        totalRewards = _rewardAmount;
        
        poolStartTime = now;
        poolEndTime = now + poolDuration;
        
        //transfer tokens to contract
        rewardToken.transferFrom(msg.sender, this, _rewardAmount);
        emit OwnerSetReward(_rewardAmount);
    }
    
    //Stake function for users to stake SWAP token
    function stake(uint256 amount) external {
        require(amount > 0, "Cannot stake 0");
        require(now < poolEndTime, "Staking pool is closed"); //staking pool is closed for staking
        
        //add value in staking
        userTotalStaking[msg.sender].totalStaking = userTotalStaking[msg.sender].totalStaking.add(amount);
        
        //add new stake
        Stake memory newStake = Stake(amount, now, 0);
        userStaking[msg.sender].push(newStake);
        
        //add to total staked
        totalStaked = totalStaked.add(amount);
        
        tswap.transferFrom(msg.sender, this, amount);
        emit Staked(msg.sender, amount);
    }
    
    //compute rewards
    function computeNewReward(uint256 _rewardAmount, uint256 _stakedAmount, uint256 _stakeTimeSec) private view returns (uint256 _reward) {
        uint256 rewardPerSecond = totalRewards.mul(1 ether);
        if (rewardPerSecond != 0 ) {
            rewardPerSecond = rewardPerSecond.div(poolDuration);
        }
        
        if (rewardPerSecond > 0) {
            uint256 rewardPerSecForEachTokenStaked = rewardPerSecond.div(totalStaked);
            uint256 userRewards = rewardPerSecForEachTokenStaked.mul(_stakedAmount).mul(_stakeTimeSec);
                    userRewards = userRewards.div(1 ether);
            
            return _rewardAmount.add(userRewards);
        } else {
            return 0;
        }
    }
    
    //calculate your rewards
    function calculateReward(address _userAddress) public view returns (uint256 _reward) {
        // all user stakes
        Stake[] storage accountStakes = userStaking[_userAddress];
        
        // Redeem from most recent stake and go backwards in time.
        uint256 rewardAmount = 0;
        uint256 i = accountStakes.length;
        while (i > 0) {
            Stake storage userStake = accountStakes[i - 1];
            uint256 stakeTimeSec;
            
            //check if current time is more than pool ending time
            if (now > poolEndTime) {
                stakeTimeSec = poolEndTime.sub(userStake.stakingTime);
                if(userStake.lastWithdrawTime != 0){
                    stakeTimeSec = poolEndTime.sub(userStake.lastWithdrawTime);
                }
            } else {
                stakeTimeSec = now.sub(userStake.stakingTime);
                if(userStake.lastWithdrawTime != 0){
                    stakeTimeSec = now.sub(userStake.lastWithdrawTime);
                }
            }
            
            // fully redeem a past stake
            rewardAmount = computeNewReward(rewardAmount, userStake.amount, stakeTimeSec);
            i--;
        }
        
        return rewardAmount;
    }
    
    //Withdraw staking and rewards
    function withdrawStaking(uint256 amount) external {
        require(amount > 0, "Amount can not be zero");
        require(userTotalStaking[msg.sender].totalStaking >= amount, "You are trying to withdaw more than your stake");
        
        // 1. User Accounting
        Stake[] storage accountStakes = userStaking[msg.sender];
        
        // Redeem from most recent stake and go backwards in time.
        uint256 sharesLeftToBurn = amount;
        uint256 rewardAmount = 0;
        while (sharesLeftToBurn > 0) {
            Stake storage lastStake = accountStakes[accountStakes.length - 1];
            uint256 stakeTimeSec;
            //check if current time is more than pool ending time
            if (now > poolEndTime) {
                stakeTimeSec = poolEndTime.sub(lastStake.stakingTime);
                if(lastStake.lastWithdrawTime != 0){
                    stakeTimeSec = poolEndTime.sub(lastStake.lastWithdrawTime);
                }
            } else {
                stakeTimeSec = now.sub(lastStake.stakingTime);
                if(lastStake.lastWithdrawTime != 0){
                    stakeTimeSec = now.sub(lastStake.lastWithdrawTime);
                }
            }
            
            if (lastStake.amount <= sharesLeftToBurn) {
                // fully redeem a past stake
                rewardAmount = computeNewReward(rewardAmount, lastStake.amount, stakeTimeSec);
                sharesLeftToBurn = sharesLeftToBurn.sub(lastStake.amount);
                accountStakes.length--;
            } else {
                // partially redeem a past stake
                rewardAmount = computeNewReward(rewardAmount, sharesLeftToBurn, stakeTimeSec);
                lastStake.amount = lastStake.amount.sub(sharesLeftToBurn);
                lastStake.lastWithdrawTime = now;
                sharesLeftToBurn = 0;
            }
        }
        
        //substract value in staking
        userTotalStaking[msg.sender].totalStaking = userTotalStaking[msg.sender].totalStaking.sub(amount);
        
        //substract from total staked
        totalStaked = totalStaked.sub(amount);
        
        //update user rewards info
        userRewardInfo[msg.sender].totalWithdrawn = userRewardInfo[msg.sender].totalWithdrawn.add(rewardAmount);
        userRewardInfo[msg.sender].lastWithdrawTime = now;
        
        //update total rewards withdrawn
        rewardsWithdrawn = rewardsWithdrawn.add(rewardAmount);
        
        //transfer rewards and tokens
        rewardToken.transfer(msg.sender, rewardAmount);
        tswap.transfer(msg.sender, amount);
        
        emit RewardWithdrawal(msg.sender, rewardAmount);
        emit StakingWithdrawal(msg.sender, amount);
    }
    
    //Withdraw rewards
    function withdrawRewardsOnly() external {
        uint256 _rwdAmount = calculateReward(msg.sender);
        require(_rwdAmount > 0, "You do not have enough rewards");
        
        // 1. User Accounting
        Stake[] storage accountStakes = userStaking[msg.sender];
        
        // Redeem from most recent stake and go backwards in time.
        uint256 rewardAmount = 0;
        uint256 i = accountStakes.length;
        while (i > 0) {
            Stake storage userStake = accountStakes[i - 1];
            uint256 stakeTimeSec;
            
            //check if current time is more than pool ending time
            if (now > poolEndTime) {
                stakeTimeSec = poolEndTime.sub(userStake.stakingTime);
                if(userStake.lastWithdrawTime != 0){
                    stakeTimeSec = poolEndTime.sub(userStake.lastWithdrawTime);
                }
            } else {
                stakeTimeSec = now.sub(userStake.stakingTime);
                if(userStake.lastWithdrawTime != 0){
                    stakeTimeSec = now.sub(userStake.lastWithdrawTime);
                }
            }
            
            // fully redeem a past stake
            rewardAmount = computeNewReward(rewardAmount, userStake.amount, stakeTimeSec);
            userStake.lastWithdrawTime = now;
            i--;
        }
        
        //update user rewards info
        userRewardInfo[msg.sender].totalWithdrawn = userRewardInfo[msg.sender].totalWithdrawn.add(rewardAmount);
        userRewardInfo[msg.sender].lastWithdrawTime = now;
        
        //update total rewards withdrawn
        rewardsWithdrawn = rewardsWithdrawn.add(rewardAmount);
        
        //transfer rewards
        rewardToken.transfer(msg.sender, rewardAmount);
        emit RewardWithdrawal(msg.sender, rewardAmount);
    }
    
    //get staking details by user address
    function getStakingAmount(address _userAddress) external constant returns (uint256 _stakedAmount) {
        return userTotalStaking[_userAddress].totalStaking;
    }
    
    //get total rewards collected by user
    function getTotalRewardCollectedByUser(address userAddress) view external returns (uint256 _totalRewardCollected) 
    {
        return userRewardInfo[userAddress].totalWithdrawn;
    }
    
    //get total SWAP token staked in the contract
    function getTotalStaked() external constant returns ( uint256 _totalStaked) {
        return totalStaked;
    }
    
    //get total rewards in the contract
    function getTotalRewards() external constant returns ( uint256 _totalRewards) {
        return totalRewards;
    }
    
    //get pool details
    function getPoolDetails() external view returns (address _baseToken, address _pairedToken, uint256 _totalRewards, uint256 _rewardsWithdrawn, uint256 _poolStartTime, uint256 _poolEndTime) {
        return (address(tswap),address(rewardToken),totalRewards,rewardsWithdrawn,poolStartTime,poolEndTime);
    }
    
    //get duration of pools
    function getPoolDuration() external constant returns (uint256 _poolDuration) {
        return poolDuration;
    }

    //set duration of pools by owner in seconds
    function setPoolDuration(uint256 _poolDuration) external onlyOwner {
        poolDuration = _poolDuration;
        poolEndTime = poolStartTime + _poolDuration;
        emit PoolDurationChange(_poolDuration);
    }
    
    //get SWAP token address
    function getSwapAddress() external constant returns (address _swapAddress) {
        return address(tswap);
    }
    
    //set tswap address
    function setTswapAddress(address _address) external onlyOwner {
        tswap = Ierc20(_address);
    }
    
    //set reward token address
    function setRewardTokenAddress(address _address) external onlyOwner {
        rewardToken = Ierc20(_address);
    }
    
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_poolDuration","type":"uint256"}],"name":"setPoolDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalStaked","outputs":[{"name":"_totalStaked","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawRewardsOnly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdrawStaking","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userRewardInfo","outputs":[{"name":"totalWithdrawn","type":"uint256"},{"name":"lastWithdrawTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_userAddress","type":"address"}],"name":"getStakingAmount","outputs":[{"name":"_stakedAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSwapAddress","outputs":[{"name":"_swapAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userTotalStaking","outputs":[{"name":"totalStaking","type":"uint256"},{"name":"totalStakingTIme","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userStaking","outputs":[{"name":"amount","type":"uint256"},{"name":"stakingTime","type":"uint256"},{"name":"lastWithdrawTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setRewardTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setTswapAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"userAddress","type":"address"}],"name":"getTotalRewardCollectedByUser","outputs":[{"name":"_totalRewardCollected","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPoolDetails","outputs":[{"name":"_baseToken","type":"address"},{"name":"_pairedToken","type":"address"},{"name":"_totalRewards","type":"uint256"},{"name":"_rewardsWithdrawn","type":"uint256"},{"name":"_poolStartTime","type":"uint256"},{"name":"_poolEndTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tswap","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_userAddress","type":"address"}],"name":"calculateReward","outputs":[{"name":"_reward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalRewards","outputs":[{"name":"_totalRewards","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPoolDuration","outputs":[{"name":"_poolDuration","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rewardAmount","type":"uint256"}],"name":"ownerSetPoolRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"OwnerSetReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"StakingWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"RewardWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"poolDuration","type":"uint256"}],"name":"PoolDurationChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanges","type":"event"}]

608060405234801561001057600080fd5b5060008054600160a060020a0319908116331790915560018054821673cc4304a31d09258b0029ea7fe63d032f52e44efe17905560028054909116738d717ab5eac1016b64c2a7fd04720fd2d27d1b8617905562278d006003556114db806100796000396000f3006080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302a01dc2811461012c5780630917e77614610146578063176089691461016d5780632e0b78f614610182578063360b8ed91461019a57806374363daa146101d457806385811fbf146101f55780638da5cb5b146102265780638db6c1191461023b578063908163021461025c5780639a6acf201461029e5780639ebde781146102bf578063a694fc3a146102e0578063a6b240fe146102f8578063aca34c1114610319578063c9e486531461036d578063d82e396214610382578063e627f2db146103a3578063f2fde38b146103b8578063f7c618c1146103d9578063f7d57b81146103ee578063fbc14bfb14610403575b600080fd5b34801561013857600080fd5b5061014460043561041b565b005b34801561015257600080fd5b5061015b610475565b60408051918252519081900360200190f35b34801561017957600080fd5b5061014461047c565b34801561018e57600080fd5b50610144600435610703565b3480156101a657600080fd5b506101bb600160a060020a0360043516610b75565b6040805192835260208301919091528051918290030190f35b3480156101e057600080fd5b5061015b600160a060020a0360043516610b8e565b34801561020157600080fd5b5061020a610ba9565b60408051600160a060020a039092168252519081900360200190f35b34801561023257600080fd5b5061020a610bb8565b34801561024757600080fd5b506101bb600160a060020a0360043516610bc7565b34801561026857600080fd5b50610280600160a060020a0360043516602435610be0565b60408051938452602084019290925282820152519081900360600190f35b3480156102aa57600080fd5b50610144600160a060020a0360043516610c21565b3480156102cb57600080fd5b50610144600160a060020a0360043516610c67565b3480156102ec57600080fd5b50610144600435610cad565b34801561030457600080fd5b5061015b600160a060020a0360043516610ee1565b34801561032557600080fd5b5061032e610efc565b60408051600160a060020a039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b34801561037957600080fd5b5061020a610f27565b34801561038e57600080fd5b5061015b600160a060020a0360043516610f36565b3480156103af57600080fd5b5061015b611030565b3480156103c457600080fd5b50610144600160a060020a0360043516611036565b3480156103e557600080fd5b5061020a61110e565b3480156103fa57600080fd5b5061015b61111d565b34801561040f57600080fd5b50610144600435611123565b600054600160a060020a0316331461043257600080fd5b600381905560065481016007556040805182815290517f93202f612f7aeb2a12b92bc5e92cd9600b71bbe0605f654cc7ce95e0025f22709181900360200190a150565b6008545b90565b60008060008060008061048e33610f36565b9550600086116104e8576040805160e560020a62461bcd02815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820726577617264730000604482015290519081900360640190fd5b336000908152600960205260408120805490965090945092505b60008311156105d857846001840381548110151561051c57fe5b9060005260206000209060030201915060075442111561057957600182015460075461054d9163ffffffff6112f716565b6002830154909150156105745760028201546007546105719163ffffffff6112f716565b90505b6105b5565b600182015461058f90429063ffffffff6112f716565b6002830154909150156105b55760028201546105b290429063ffffffff6112f716565b90505b6105c48483600001548361130c565b426002840155935060001990920191610502565b336000908152600b60205260409020546105f8908563ffffffff6113cf16565b336000908152600b6020526040902090815542600190910155600554610624908563ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018790529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b15801561069457600080fd5b505af11580156106a8573d6000803e3d6000fd5b505050506040513d60208110156106be57600080fd5b5050604080513381526020810186905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1505050505050565b600080808080808611610760576040805160e560020a62461bcd02815260206004820152601660248201527f416d6f756e742063616e206e6f74206265207a65726f00000000000000000000604482015290519081900360640190fd5b336000908152600a60205260409020548611156107ed576040805160e560020a62461bcd02815260206004820152602e60248201527f596f752061726520747279696e6720746f2077697468646177206d6f7265207460448201527f68616e20796f7572207374616b65000000000000000000000000000000000000606482015290519081900360840190fd5b336000908152600960205260408120955086945092505b60008411156109305784548590600019810190811061081f57fe5b9060005260206000209060030201915060075442111561087c5760018201546007546108509163ffffffff6112f716565b6002830154909150156108775760028201546007546108749163ffffffff6112f716565b90505b6108b8565b600182015461089290429063ffffffff6112f716565b6002830154909150156108b85760028201546108b590429063ffffffff6112f716565b90505b815484106108fe576108cf8383600001548361130c565b82549093506108e590859063ffffffff6112f716565b85549094506108f8866000198301611431565b5061092b565b61090983858361130c565b825490935061091e908563ffffffff6112f716565b8255426002830155600093505b610804565b336000908152600a6020526040902054610950908763ffffffff6112f716565b336000908152600a6020526040902055600854610973908763ffffffff6112f716565b600855336000908152600b6020526040902054610996908463ffffffff6113cf16565b336000908152600b60205260409020908155426001909101556005546109c2908463ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610a3257600080fd5b505af1158015610a46573d6000803e3d6000fd5b505050506040513d6020811015610a5c57600080fd5b5050600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018990529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5050604080513381526020810185905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1604080513381526020810188905281517f5322e8325014aeb0f999c341770ee4939af85cc55c4f5e03547373cabe18978a929181900390910190a1505050505050565b600b602052600090815260409020805460019091015482565b600160a060020a03166000908152600a602052604090205490565b600154600160a060020a031690565b600054600160a060020a031681565b600a602052600090815260409020805460019091015482565b600960205281600052604060002081815481101515610bfb57fe5b600091825260209091206003909102018054600182015460029092015490935090915083565b600054600160a060020a03163314610c3857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610c7e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610cb5611462565b60008211610d0d576040805160e560020a62461bcd02815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6007544210610d66576040805160e560020a62461bcd02815260206004820152601660248201527f5374616b696e6720706f6f6c20697320636c6f73656400000000000000000000604482015290519081900360640190fd5b336000908152600a6020526040902054610d86908363ffffffff6113cf16565b336000818152600a6020908152604080832094909455835160608101855286815242818301908152818601848152948452600983529483208054600181810183559185529290932081516003909302019182559351918101919091559051600290910155600854909150610e00908363ffffffff6113cf16565b600855600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b158015610e7657600080fd5b505af1158015610e8a573d6000803e3d6000fd5b505050506040513d6020811015610ea057600080fd5b5050604080513381526020810184905281517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d929181900390910190a15050565b600160a060020a03166000908152600b602052604090205490565b600154600254600454600554600654600754600160a060020a03958616959490941693909192939495565b600154600160a060020a031681565b600160a060020a03811660009081526009602052604081208054829081805b6000831115611025578460018403815481101515610f6f57fe5b90600052602060002090600302019150600754421115610fcc576001820154600754610fa09163ffffffff6112f716565b600283015490915015610fc7576002820154600754610fc49163ffffffff6112f716565b90505b611008565b6001820154610fe290429063ffffffff6112f716565b60028301549091501561100857600282015461100590429063ffffffff6112f716565b90505b6110178483600001548361130c565b935060001990920191610f55565b509195945050505050565b60045490565b600054600160a060020a0316331461104d57600080fd5b600160a060020a03811615156110ad576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b60008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fe181e59d45ee426a055928ff3e7e85526d4ef2532db1b20262d9bb5d5263d4549181900360200190a150565b600254600160a060020a031681565b60035490565b600054600160a060020a0316331461113a57600080fd5b60065415611192576040805160e560020a62461bcd02815260206004820152601860248201527f506f6f6c207265776172647320616c7265616479207365740000000000000000604482015290519081900360640190fd5b60008111611210576040805160e560020a62461bcd02815260206004820152602360248201527f43616e6e6f742063726561746520706f6f6c2077697468207a65726f20616d6f60448201527f756e740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600481815542600681905560035401600755600254604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233938101939093523060248401526044830184905251600160a060020a03909116916323b872dd9160648083019260209291908290030181600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b505050506040513d60208110156112bf57600080fd5b50506040805182815290517f9995276a5cbceb87f6c2a87b816fb85911a01e6eec7c9380558cbaaca1d62bdf9181900360200190a150565b60008282111561130657600080fd5b50900390565b60008060008061132f670de0b6b3a76400006004546113ec90919063ffffffff16565b9250821561134e5760035461134b90849063ffffffff61141a16565b92505b60008311156113c05760085461136b90849063ffffffff61141a16565b915061138d85611381848963ffffffff6113ec16565b9063ffffffff6113ec16565b90506113a781670de0b6b3a764000063ffffffff61141a16565b90506113b9878263ffffffff6113cf16565b93506113c5565b600093505b5050509392505050565b6000828201838110156113e157600080fd5b8091505b5092915050565b6000808315156113ff57600091506113e5565b5082820282848281151561140f57fe5b04146113e157600080fd5b600080828481151561142857fe5b04949350505050565b81548183558181111561145d5760030281600302836000526020600020918201910161145d9190611484565b505050565b6060604051908101604052806000815260200160008152602001600081525090565b61047991905b808211156114ab57600080825560018201819055600282015560030161148a565b50905600a165627a7a723058206df58f27ba58e027253c43b541312eb8c5c4424fcd49cd54fc89b3b8c2be0d7d0029

Deployed Bytecode

0x6080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302a01dc2811461012c5780630917e77614610146578063176089691461016d5780632e0b78f614610182578063360b8ed91461019a57806374363daa146101d457806385811fbf146101f55780638da5cb5b146102265780638db6c1191461023b578063908163021461025c5780639a6acf201461029e5780639ebde781146102bf578063a694fc3a146102e0578063a6b240fe146102f8578063aca34c1114610319578063c9e486531461036d578063d82e396214610382578063e627f2db146103a3578063f2fde38b146103b8578063f7c618c1146103d9578063f7d57b81146103ee578063fbc14bfb14610403575b600080fd5b34801561013857600080fd5b5061014460043561041b565b005b34801561015257600080fd5b5061015b610475565b60408051918252519081900360200190f35b34801561017957600080fd5b5061014461047c565b34801561018e57600080fd5b50610144600435610703565b3480156101a657600080fd5b506101bb600160a060020a0360043516610b75565b6040805192835260208301919091528051918290030190f35b3480156101e057600080fd5b5061015b600160a060020a0360043516610b8e565b34801561020157600080fd5b5061020a610ba9565b60408051600160a060020a039092168252519081900360200190f35b34801561023257600080fd5b5061020a610bb8565b34801561024757600080fd5b506101bb600160a060020a0360043516610bc7565b34801561026857600080fd5b50610280600160a060020a0360043516602435610be0565b60408051938452602084019290925282820152519081900360600190f35b3480156102aa57600080fd5b50610144600160a060020a0360043516610c21565b3480156102cb57600080fd5b50610144600160a060020a0360043516610c67565b3480156102ec57600080fd5b50610144600435610cad565b34801561030457600080fd5b5061015b600160a060020a0360043516610ee1565b34801561032557600080fd5b5061032e610efc565b60408051600160a060020a039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b34801561037957600080fd5b5061020a610f27565b34801561038e57600080fd5b5061015b600160a060020a0360043516610f36565b3480156103af57600080fd5b5061015b611030565b3480156103c457600080fd5b50610144600160a060020a0360043516611036565b3480156103e557600080fd5b5061020a61110e565b3480156103fa57600080fd5b5061015b61111d565b34801561040f57600080fd5b50610144600435611123565b600054600160a060020a0316331461043257600080fd5b600381905560065481016007556040805182815290517f93202f612f7aeb2a12b92bc5e92cd9600b71bbe0605f654cc7ce95e0025f22709181900360200190a150565b6008545b90565b60008060008060008061048e33610f36565b9550600086116104e8576040805160e560020a62461bcd02815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820726577617264730000604482015290519081900360640190fd5b336000908152600960205260408120805490965090945092505b60008311156105d857846001840381548110151561051c57fe5b9060005260206000209060030201915060075442111561057957600182015460075461054d9163ffffffff6112f716565b6002830154909150156105745760028201546007546105719163ffffffff6112f716565b90505b6105b5565b600182015461058f90429063ffffffff6112f716565b6002830154909150156105b55760028201546105b290429063ffffffff6112f716565b90505b6105c48483600001548361130c565b426002840155935060001990920191610502565b336000908152600b60205260409020546105f8908563ffffffff6113cf16565b336000908152600b6020526040902090815542600190910155600554610624908563ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018790529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b15801561069457600080fd5b505af11580156106a8573d6000803e3d6000fd5b505050506040513d60208110156106be57600080fd5b5050604080513381526020810186905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1505050505050565b600080808080808611610760576040805160e560020a62461bcd02815260206004820152601660248201527f416d6f756e742063616e206e6f74206265207a65726f00000000000000000000604482015290519081900360640190fd5b336000908152600a60205260409020548611156107ed576040805160e560020a62461bcd02815260206004820152602e60248201527f596f752061726520747279696e6720746f2077697468646177206d6f7265207460448201527f68616e20796f7572207374616b65000000000000000000000000000000000000606482015290519081900360840190fd5b336000908152600960205260408120955086945092505b60008411156109305784548590600019810190811061081f57fe5b9060005260206000209060030201915060075442111561087c5760018201546007546108509163ffffffff6112f716565b6002830154909150156108775760028201546007546108749163ffffffff6112f716565b90505b6108b8565b600182015461089290429063ffffffff6112f716565b6002830154909150156108b85760028201546108b590429063ffffffff6112f716565b90505b815484106108fe576108cf8383600001548361130c565b82549093506108e590859063ffffffff6112f716565b85549094506108f8866000198301611431565b5061092b565b61090983858361130c565b825490935061091e908563ffffffff6112f716565b8255426002830155600093505b610804565b336000908152600a6020526040902054610950908763ffffffff6112f716565b336000908152600a6020526040902055600854610973908763ffffffff6112f716565b600855336000908152600b6020526040902054610996908463ffffffff6113cf16565b336000908152600b60205260409020908155426001909101556005546109c2908463ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610a3257600080fd5b505af1158015610a46573d6000803e3d6000fd5b505050506040513d6020811015610a5c57600080fd5b5050600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018990529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5050604080513381526020810185905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1604080513381526020810188905281517f5322e8325014aeb0f999c341770ee4939af85cc55c4f5e03547373cabe18978a929181900390910190a1505050505050565b600b602052600090815260409020805460019091015482565b600160a060020a03166000908152600a602052604090205490565b600154600160a060020a031690565b600054600160a060020a031681565b600a602052600090815260409020805460019091015482565b600960205281600052604060002081815481101515610bfb57fe5b600091825260209091206003909102018054600182015460029092015490935090915083565b600054600160a060020a03163314610c3857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610c7e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610cb5611462565b60008211610d0d576040805160e560020a62461bcd02815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6007544210610d66576040805160e560020a62461bcd02815260206004820152601660248201527f5374616b696e6720706f6f6c20697320636c6f73656400000000000000000000604482015290519081900360640190fd5b336000908152600a6020526040902054610d86908363ffffffff6113cf16565b336000818152600a6020908152604080832094909455835160608101855286815242818301908152818601848152948452600983529483208054600181810183559185529290932081516003909302019182559351918101919091559051600290910155600854909150610e00908363ffffffff6113cf16565b600855600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b158015610e7657600080fd5b505af1158015610e8a573d6000803e3d6000fd5b505050506040513d6020811015610ea057600080fd5b5050604080513381526020810184905281517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d929181900390910190a15050565b600160a060020a03166000908152600b602052604090205490565b600154600254600454600554600654600754600160a060020a03958616959490941693909192939495565b600154600160a060020a031681565b600160a060020a03811660009081526009602052604081208054829081805b6000831115611025578460018403815481101515610f6f57fe5b90600052602060002090600302019150600754421115610fcc576001820154600754610fa09163ffffffff6112f716565b600283015490915015610fc7576002820154600754610fc49163ffffffff6112f716565b90505b611008565b6001820154610fe290429063ffffffff6112f716565b60028301549091501561100857600282015461100590429063ffffffff6112f716565b90505b6110178483600001548361130c565b935060001990920191610f55565b509195945050505050565b60045490565b600054600160a060020a0316331461104d57600080fd5b600160a060020a03811615156110ad576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b60008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fe181e59d45ee426a055928ff3e7e85526d4ef2532db1b20262d9bb5d5263d4549181900360200190a150565b600254600160a060020a031681565b60035490565b600054600160a060020a0316331461113a57600080fd5b60065415611192576040805160e560020a62461bcd02815260206004820152601860248201527f506f6f6c207265776172647320616c7265616479207365740000000000000000604482015290519081900360640190fd5b60008111611210576040805160e560020a62461bcd02815260206004820152602360248201527f43616e6e6f742063726561746520706f6f6c2077697468207a65726f20616d6f60448201527f756e740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600481815542600681905560035401600755600254604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233938101939093523060248401526044830184905251600160a060020a03909116916323b872dd9160648083019260209291908290030181600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b505050506040513d60208110156112bf57600080fd5b50506040805182815290517f9995276a5cbceb87f6c2a87b816fb85911a01e6eec7c9380558cbaaca1d62bdf9181900360200190a150565b60008282111561130657600080fd5b50900390565b60008060008061132f670de0b6b3a76400006004546113ec90919063ffffffff16565b9250821561134e5760035461134b90849063ffffffff61141a16565b92505b60008311156113c05760085461136b90849063ffffffff61141a16565b915061138d85611381848963ffffffff6113ec16565b9063ffffffff6113ec16565b90506113a781670de0b6b3a764000063ffffffff61141a16565b90506113b9878263ffffffff6113cf16565b93506113c5565b600093505b5050509392505050565b6000828201838110156113e157600080fd5b8091505b5092915050565b6000808315156113ff57600091506113e5565b5082820282848281151561140f57fe5b04146113e157600080fd5b600080828481151561142857fe5b04949350505050565b81548183558181111561145d5760030281600302836000526020600020918201910161145d9190611484565b505050565b6060604051908101604052806000815260200160008152602001600081525090565b61047991905b808211156114ab57600080825560018201819055600282015560030161148a565b50905600a165627a7a723058206df58f27ba58e027253c43b541312eb8c5c4424fcd49cd54fc89b3b8c2be0d7d0029

Deployed Bytecode Sourcemap

1950:11672:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12936:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12936:217:0;;;;;;;12099:113;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12099:113:0;;;;;;;;;;;;;;;;;;;;9707:1864;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9707:1864:0;;;;6888:2783;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6888:2783:0;;;;;2809:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2809:53:0;-1:-1:-1;;;;;2809:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11626:167;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11626:167:0;-1:-1:-1;;;;;11626:167:0;;;;;13195:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13195:115:0;;;;;;;;-1:-1:-1;;;;;13195:115:0;;;;;;;;;;;;;;1447:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1447:20:0;;;;2640:55;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2640:55:0;-1:-1:-1;;;;;2640:55:0;;;;;2438:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2438:47:0;-1:-1:-1;;;;;2438:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13496:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13496:117:0;-1:-1:-1;;;;;13496:117:0;;;;;13347:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13347:105:0;-1:-1:-1;;;;;13347:105:0;;;;;4069:682;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4069:682:0;;;;;11848:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11848:188:0;-1:-1:-1;;;;;11848:188:0;;;;;12417:306;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12417:306:0;;;;;;;;-1:-1:-1;;;;;12417:306:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2026:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2026:19:0;;;;5565:1275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5565:1275:0;-1:-1:-1;;;;;5565:1275:0;;;;;12265:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12265:116:0;;;;1715:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1715:228:0;-1:-1:-1;;;;;1715:228:0;;;;;2052:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2052:25:0;;;;12764:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12764:115:0;;;;3455:550;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3455:550:0;;;;;12936:217;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;13014:12;:28;;;13067:13;;:29;;13053:11;:43;13112:33;;;;;;;;;;;;;;;;;12936:217;:::o;12099:113::-;12193:11;;12099:113;;:::o;9707:1864::-;9758:18;9926:29;10070:20;10105:9;10177:23;10238:20;9779:27;9795:10;9779:15;:27::i;:::-;9758:48;-1:-1:-1;9838:1:0;9825:14;;9817:57;;;;;-1:-1:-1;;;;;9817:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9970:10;9958:23;;;;:11;:23;;;;;10117:20;;9958:23;;-1:-1:-1;9958:23:0;;-1:-1:-1;10117:20:0;-1:-1:-1;10148:927:0;10159:1;10155;:5;10148:927;;;10203:13;10221:1;10217;:5;10203:20;;;;;;;;;;;;;;;;;;;;10177:46;;10364:11;;10358:3;:17;10354:497;;;10427:21;;;;10411:11;;:38;;;:15;:38;:::i;:::-;10471:26;;;;10396:53;;-1:-1:-1;10471:31:0;10468:136;;10557:26;;;;10541:11;;:43;;;:15;:43;:::i;:::-;10526:58;;10468:136;10354:497;;;10667:21;;;;10659:30;;:3;;:30;:7;:30;:::i;:::-;10711:26;;;;10644:45;;-1:-1:-1;10711:31:0;10708:128;;10789:26;;;;10781:35;;:3;;:35;:7;:35;:::i;:::-;10766:50;;10708:128;10936:62;10953:12;10967:9;:16;;;10985:12;10936:16;:62::i;:::-;11042:3;11013:26;;;:32;10921:77;-1:-1:-1;;;11060:3:0;;;;10148:927;;;11190:10;11175:26;;;;:14;:26;;;;;:41;:59;;11221:12;11175:59;:45;:59;:::i;:::-;11146:10;11131:26;;;;:14;:26;;;;;:103;;;11291:3;11245:43;;;;:49;11376:16;;:34;;11397:12;11376:34;:20;:34;:::i;:::-;11357:16;:53;11459:11;;:46;;;;;;11480:10;11459:46;;;;;;;;;;;;-1:-1:-1;;;;;11459:11:0;;;;:20;;:46;;;;;;;;;;;;;;;:11;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;11459:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11459:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;11521:42:0;;;11538:10;11521:42;;11459:46;11521:42;;;;;;;;;;;;;;;;;;9707:1864;;;;;;:::o;6888:2783::-;7167:29;;;;;6957:10;;;6949:45;;;;;-1:-1:-1;;;;;6949:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7030:10;7013:28;;;;:16;:28;;;;;:41;:51;-1:-1:-1;7013:51:0;7005:110;;;;;-1:-1:-1;;;;;7005:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7211:10;7199:23;;;;:11;:23;;;;;;-1:-1:-1;7338:6:0;;-1:-1:-1;7199:23:0;-1:-1:-1;7390:1413:0;7416:1;7397:16;:20;7390:1413;;;7474:20;;7460:13;;-1:-1:-1;;7474:24:0;;;7460:39;;;;;;;;;;;;;;;;7434:65;;7626:11;;7620:3;:17;7616:497;;;7689:21;;;;7673:11;;:38;;;:15;:38;:::i;:::-;7733:26;;;;7658:53;;-1:-1:-1;7733:31:0;7730:136;;7819:26;;;;7803:11;;:43;;;:15;:43;:::i;:::-;7788:58;;7730:136;7616:497;;;7929:21;;;;7921:30;;:3;;:30;:7;:30;:::i;:::-;7973:26;;;;7906:45;;-1:-1:-1;7973:31:0;7970:128;;8051:26;;;;8043:35;;:3;;:35;:7;:35;:::i;:::-;8028:50;;7970:128;8145:16;;:36;-1:-1:-1;8141:651:0;;8263:62;8280:12;8294:9;:16;;;8312:12;8263:16;:62::i;:::-;8384:16;;8248:77;;-1:-1:-1;8363:38:0;;:16;;:38;:20;:38;:::i;:::-;8420:22;;8344:57;;-1:-1:-1;8420:22:0;:13;-1:-1:-1;;8420:22:0;;;:::i;:::-;;8141:651;;;8548:62;8565:12;8579:16;8597:12;8548:16;:62::i;:::-;8648:16;;8533:77;;-1:-1:-1;8648:38:0;;8669:16;8648:38;:20;:38;:::i;:::-;8629:57;;8734:3;8705:26;;;:32;8629:16;;-1:-1:-1;8141:651:0;7390:1413;;;8922:10;8905:28;;;;:16;:28;;;;;:41;:53;;8951:6;8905:53;:45;:53;:::i;:::-;8878:10;8861:28;;;;:16;:28;;;;;:97;9032:11;;:23;;9048:6;9032:23;:15;:23;:::i;:::-;9018:11;:37;9171:10;9156:26;;;;:14;:26;;;;;:41;:59;;9202:12;9156:59;:45;:59;:::i;:::-;9127:10;9112:26;;;;:14;:26;;;;;:103;;;9272:3;9226:43;;;;:49;9357:16;;:34;;9378:12;9357:34;:20;:34;:::i;:::-;9338:16;:53;9451:11;;:46;;;;;;9472:10;9451:46;;;;;;;;;;;;-1:-1:-1;;;;;9451:11:0;;;;:20;;:46;;;;;;;;;;;;;;;:11;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;9451:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9451:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;9508:5:0;;:34;;;;;;9523:10;9508:34;;;;;;;;;;;;-1:-1:-1;;;;;9508:5:0;;;;:14;;:34;;;;;9451:46;;9508:34;;;;;;;;:5;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;9508:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9508:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;9568:42:0;;;9585:10;9568:42;;9508:34;9568:42;;;;;;;;;;;;;;;;;;9626:37;;;9644:10;9626:37;;;;;;;;;;;;;;;;;;;;;6888:2783;;;;;;:::o;2809:53::-;;;;;;;;;;;;;;;;;;;:::o;11626:167::-;-1:-1:-1;;;;;11742:30:0;11701:21;11742:30;;;:16;:30;;;;;:43;;11626:167::o;13195:115::-;13296:5;;-1:-1:-1;;;;;13296:5:0;13195:115;:::o;1447:20::-;;;-1:-1:-1;;;;;1447:20:0;;:::o;2640:55::-;;;;;;;;;;;;;;;;;;;:::o;2438:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2438:47:0;;-1:-1:-1;2438:47:0;:::o;13496:117::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;13575:11;:30;;-1:-1:-1;;13575:30:0;-1:-1:-1;;;;;13575:30:0;;;;;;;;;;13496:117::o;13347:105::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;13420:5;:24;;-1:-1:-1;;13420:24:0;-1:-1:-1;;;;;13420:24:0;;;;;;;;;;13347:105::o;4069:682::-;4453:21;;:::i;:::-;4137:1;4128:10;;4120:37;;;;;-1:-1:-1;;;;;4120:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4182:11;;4176:3;:17;4168:52;;;;;-1:-1:-1;;;;;4168:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4371:10;4354:28;;;;:16;:28;;;;;:41;:53;;4400:6;4354:53;:45;:53;:::i;:::-;4327:10;4310:28;;;;:16;:28;;;;;;;;:97;;;;4477:21;;;;;;;;;;4491:3;4477:21;;;;;;;;;;;;4509:23;;;:11;:23;;;;;27:10:-1;;39:1;23:18;;;45:23;;4509:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4613:11;;4477:21;;-1:-1:-1;4613:23:0;;4483:6;4613:23;:15;:23;:::i;:::-;4599:11;:37;4657:5;;:44;;;;;;4676:10;4657:44;;;;4688:4;4657:44;;;;;;;;;;;;-1:-1:-1;;;;;4657:5:0;;;;:18;;:44;;;;;;;;;;;;;;;:5;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;4657:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4657:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;4717:26:0;;;4724:10;4717:26;;4657:44;4717:26;;;;;;;;;;;;;;;;;;4069:682;;:::o;11848:188::-;-1:-1:-1;;;;;11986:27:0;11931:29;11986:27;;;:14;:27;;;;;:42;;11848:188::o;12417:306::-;12631:5;;12646:11;;12659:12;;12672:16;;12689:13;;12703:11;;-1:-1:-1;;;;;12631:5:0;;;;12646:11;;;;;12417:306;;;;;;:::o;2026:19::-;;;-1:-1:-1;;;;;2026:19:0;;:::o;5565:1275::-;-1:-1:-1;;;;;5721:25:0;;5633:15;5721:25;;;:11;:25;;;;;5882:20;;5633:15;;;;5913:880;5924:1;5920;:5;5913:880;;;5968:13;5986:1;5982;:5;5968:20;;;;;;;;;;;;;;;;;;;;5942:46;;6129:11;;6123:3;:17;6119:497;;;6192:21;;;;6176:11;;:38;;;:15;:38;:::i;:::-;6236:26;;;;6161:53;;-1:-1:-1;6236:31:0;6233:136;;6322:26;;;;6306:11;;:43;;;:15;:43;:::i;:::-;6291:58;;6233:136;6119:497;;;6432:21;;;;6424:30;;:3;;:30;:7;:30;:::i;:::-;6476:26;;;;6409:45;;-1:-1:-1;6476:31:0;6473:128;;6554:26;;;;6546:35;;:3;;:35;:7;:35;:::i;:::-;6531:50;;6473:128;6701:62;6718:12;6732:9;:16;;;6750:12;6701:16;:62::i;:::-;6686:77;-1:-1:-1;;;6778:3:0;;;;5913:880;;;-1:-1:-1;6820:12:0;;5565:1275;-1:-1:-1;;;;;5565:1275:0:o;12265:116::-;12361:12;;12265:116;:::o;1715:228::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;-1:-1:-1;;;;;1802:22:0;;;;1794:64;;;;;-1:-1:-1;;;;;1794:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1873:5;:16;;-1:-1:-1;;;;;1873:16:0;;-1:-1:-1;;1873:16:0;;;;;;;;1909:22;;;;;;;;;;;;;;;;1715:228;:::o;2052:25::-;;;-1:-1:-1;;;;;2052:25:0;;:::o;12764:115::-;12859:12;;12764:115;:::o;3455:550::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;3545:13;;:18;3537:55;;;;;-1:-1:-1;;;;;3537:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3627:1;3611:17;;3603:65;;;;;-1:-1:-1;;;;;3603:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3724:12;:28;;;3789:3;3773:13;:19;;;3823:12;;3817:18;3803:11;:32;3895:11;;:57;;;;;;3920:10;3895:57;;;;;;;3932:4;3895:57;;;;;;;;;;;-1:-1:-1;;;;;3895:11:0;;;;:24;;:57;;;;;;;;;;;;;;-1:-1:-1;3895:11:0;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;3895:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3895:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;3968:29:0;;;;;;;;;;;;;3895:57;3968:29;;;3455:550;:::o;997:114::-;1055:7;1079:6;;;;1071:15;;;;;;-1:-1:-1;1100:5:0;;;997:114::o;4786:737::-;4903:15;4931:23;5158:38;5246:19;4957:25;4974:7;4957:12;;:16;;:25;;;;:::i;:::-;4931:51;-1:-1:-1;4997:20:0;;4993:105;;5073:12;;5053:33;;:15;;:33;:19;:33;:::i;:::-;5035:51;;4993:105;5140:1;5122:15;:19;5118:398;;;5219:11;;5199:32;;:15;;:32;:19;:32;:::i;:::-;5158:73;-1:-1:-1;5268:68:0;5322:13;5268:49;5158:73;5303:13;5268:49;:34;:49;:::i;:::-;:53;:68;:53;:68;:::i;:::-;5246:90;-1:-1:-1;5373:24:0;5246:90;5389:7;5373:24;:15;:24;:::i;:::-;5359:38;-1:-1:-1;5433:30:0;:13;5359:38;5433:30;:17;:30;:::i;:::-;5426:37;;;;5118:398;5503:1;5496:8;;5118:398;4786:737;;;;;;;;:::o;1117:134::-;1175:7;1203:5;;;1223:6;;;;1215:15;;;;;;1244:1;1237:8;;1117:134;;;;;;:::o;692:181::-;750:7;;770:6;;766:37;;;794:1;787:8;;;;766:37;-1:-1:-1;821:5:0;;;825:1;821;:5;841;;;;;;;;:10;833:19;;;;;879:112;937:7;953:9;969:1;965;:5;;;;;;;;;879:112;-1:-1:-1;;;;879:112:0:o;1950:11672::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://6df58f27ba58e027253c43b541312eb8c5c4424fcd49cd54fc89b3b8c2be0d7d

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  ]

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.