ETH Price: $3,235.94 (+1.57%)
Gas: 19 Gwei

Token

 

Overview

Max Total Supply

0

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Staking

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-14
*/

// File: contracts/library/ERC20.sol

pragma solidity ^0.4.24;

interface ERC20 {

    function totalSupply() public view returns (uint);
    function balanceOf(address owner) public view returns (uint);
    function allowance(address owner, address spender) public view returns (uint);
    function transfer(address to, uint value) public returns (bool);
    function transferFrom(address from, address to, uint value) public returns (bool);
    function approve(address spender, uint value) public returns (bool);

}

// File: contracts/library/Ownable.sol

pragma solidity ^0.4.24;

contract Ownable {

    address public owner;

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

    function Ownable() public {
        owner = msg.sender;
    }

    function transferOwnership(address _newOwner) public onlyOwner {
        owner = _newOwner;
    }

    function isOwner(address _address) public view returns (bool) {
        return owner == _address;
    }
}

// File: contracts/library/SafeMath.sol

pragma solidity ^0.4.24;

library SafeMath {

    function mul(uint a, uint b) internal pure returns (uint) {
        uint c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function div(uint a, uint b) internal pure returns (uint) {
        assert(b > 0);
        uint c = a / b;
        assert(a == b * c + a % b);
        return c;
    }

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

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

    function max64(uint64 a, uint64 b) internal pure returns (uint64) {
        return a >= b ? a : b;
    }

    function min64(uint64 a, uint64 b) internal pure returns (uint64) {
        return a < b ? a : b;
    }

    function max256(uint a, uint b) internal pure returns (uint) {
        return a >= b ? a : b;
    }

    function min256(uint a, uint b) internal pure returns (uint) {
        return a < b ? a : b;
    }
}

// File: contracts/library/Pausable.sol

pragma solidity ^0.4.24;


/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    emit Unpause();
  }
}

// File: contracts/library/Whitelist.sol

pragma solidity ^0.4.24;



/**
 * @title Whitelist
 * @dev The Whitelist contract has a whitelist of addresses, and provides basic authorization control functions.
 * @dev This simplifies the implementation of "user permissions".
 */
contract Whitelist is Ownable {
  mapping(address => bool) public whitelist;

  event WhitelistedAddressAdded(address addr);
  event WhitelistedAddressRemoved(address addr);

  /**
   * @dev Throws if called by any account that's not whitelisted.
   */
  modifier onlyWhitelisted() {
    require(whitelist[msg.sender]);
    _;
  }

  /**
   * @dev add an address to the whitelist
   * @param addr address
   * @return true if the address was added to the whitelist, false if the address was already in the whitelist
   */
  function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) {
    if (!whitelist[addr]) {
      whitelist[addr] = true;
      emit WhitelistedAddressAdded(addr);
      success = true;
    }
  }

  /**
   * @dev add addresses to the whitelist
   * @param addrs addresses
   * @return true if at least one address was added to the whitelist,
   * false if all addresses were already in the whitelist
   */
  function addAddressesToWhitelist(address[] addrs) onlyOwner public returns(bool success) {
    for (uint256 i = 0; i < addrs.length; i++) {
      if (addAddressToWhitelist(addrs[i])) {
        success = true;
      }
    }
  }

  /**
   * @dev remove an address from the whitelist
   * @param addr address
   * @return true if the address was removed from the whitelist,
   * false if the address wasn't in the whitelist in the first place
   */
  function removeAddressFromWhitelist(address addr) onlyOwner public returns(bool success) {
    if (whitelist[addr]) {
      whitelist[addr] = false;
      emit WhitelistedAddressRemoved(addr);
      success = true;
    }
  }

  /**
   * @dev remove addresses from the whitelist
   * @param addrs addresses
   * @return true if at least one address was removed from the whitelist,
   * false if all addresses weren't in the whitelist in the first place
   */
  function removeAddressesFromWhitelist(address[] addrs) onlyOwner public returns(bool success) {
    for (uint256 i = 0; i < addrs.length; i++) {
      if (removeAddressFromWhitelist(addrs[i])) {
        success = true;
      }
    }
  }

}

// File: contracts/Staking.sol

pragma solidity ^0.4.24;






/**
 * @title Staking and voting contract.
 * @author IoTeX Team
 *
 */
contract Staking is Pausable, Whitelist {
    using SafeMath for uint256;

    // Events to be emitted
    event BucketCreated(uint256 bucketIndex, bytes12 canName, uint256 amount, uint256 stakeDuration, bool nonDecay, bytes data);
    event BucketUpdated(uint256 bucketIndex, bytes12 canName, uint256 stakeDuration, uint256 stakeStartTime, bool nonDecay, address bucketOwner, bytes data);
    event BucketUnstake(uint256 bucketIndex, bytes12 canName, uint256 amount, bytes data);
    event BucketWithdraw(uint256 bucketIndex, bytes12 canName, uint256 amount, bytes data);
    // TODO add change owner event which is not covered by BucketUpdated event

    // IOTX used for staking
    ERC20 stakingToken;

    // Unit is epoch
    uint256 public constant minStakeDuration = 0;
    uint256 public constant maxStakeDuration = 350;
    uint256 public constant minStakeAmount = 100 * 10 ** 18;
    uint256 public constant unStakeDuration = 3;

    uint256 public constant maxBucketsPerAddr = 500;
    uint256 public constant secondsPerEpoch = 86400;

    // Core data structure to track staking/voting status
    struct Bucket {
        bytes12 canName;            // Candidate name, which maps to public keys by NameRegistration.sol
        uint256 stakedAmount;       // Number of tokens
        uint256 stakeDuration;      // Stake duration, unit: second since epoch
        uint256 stakeStartTime;     // Staking start time, unit: second since epoch
        bool nonDecay;              // Nondecay staking -- staking for N epochs consistently without decaying
        uint256 unstakeStartTime;   // unstake timestamp, unit: second since epoch
        address bucketOwner;        // Owner of this bucket, usually the one who created it but can be someone else
        uint256 createTime;         // bucket firstly create time
        uint256 prev;               // Prev non-zero bucket index
        uint256 next;               // Next non-zero bucket index
    }
    mapping(uint256 => Bucket) public buckets;
    uint256 bucketCount; // number of total buckets. used to track the last used index for the bucket

    // Map from owner address to array of bucket indexes.
    mapping(address => uint256[]) public stakeholders;

    /**
     * @dev Modifier that checks that this given bucket can be updated/deleted by msg.sender
     * @param _address address to transfer tokens from
     * @param _bucketIndex uint256 the index of the bucket
     */
    modifier canTouchBucket(address _address, uint256 _bucketIndex) {
        require(_address != address(0));
        require(buckets[_bucketIndex].bucketOwner == msg.sender, "sender is not the owner.");
        _;
    }

    /**
     * @dev Modifier that check if a duration meets requirement
     * @param _duration uint256 duration to check
     */
    modifier checkStakeDuration(uint256 _duration) {
        require(_duration >= minStakeDuration && _duration <= maxStakeDuration, "The stake duration is too small or large");
        require(_duration % 7 == 0, "The stake duration should be multiple of 7");
        _;
    }

    /**
     * @dev Constructor function
     * @param _stakingTokenAddr address The address of the token contract used for staking
     */
    constructor(address _stakingTokenAddr) public {
        stakingToken = ERC20(_stakingTokenAddr);
        // create one bucket to initialize the double linked list
        buckets[0] = Bucket("", 1, 0, block.timestamp, true, 0, msg.sender, block.timestamp, 0, 0);
        stakeholders[msg.sender].push(0);
        bucketCount = 1;
    }

    function getActiveBucketIdxImpl(uint256 _prevIndex, uint256 _limit) internal returns(uint256 count, uint256[] indexes) {
        require (_limit > 0 && _limit < 5000);
        Bucket memory bucket = buckets[_prevIndex];
        require(bucket.next > 0, "cannot find bucket based on input index.");

        indexes = new uint256[](_limit);
        uint256 i = 0;
        for (i = 0; i < _limit; i++) {
            while (bucket.next > 0 && buckets[bucket.next].unstakeStartTime > 0) { // unstaked.
                bucket = buckets[bucket.next]; // skip
            }
            if (bucket.next == 0) { // no new bucket
                break;
            }
            indexes[i] = bucket.next;
            bucket = buckets[bucket.next];
        }
        return (i, indexes);
    }

    function getActiveBucketIdx(uint256 _prevIndex, uint256 _limit) external view returns(uint256 count, uint256[] indexes) {
        return getActiveBucketIdxImpl(_prevIndex, _limit);
    }

    /**
     * @dev Get active buckets for a range of indexes
     * @param _prevIndex uint256 the starting index. starting from 0, ending at the last. (putting 0,2 will return 1,2.)
     * @param _limit uint256 the number of non zero buckets to fetch after the start index
     * @return (uint256, uint256[], uint256[], uint256[], uint256[], bytes, address[])
     *  count, index array, stakeStartTime array, duration array, decay array, stakedAmount array, concat stakedFor, ownerAddress array
     */
    function getActiveBuckets(uint256 _prevIndex, uint256 _limit) external view returns(uint256 count,
            uint256[] indexes, uint256[] stakeStartTimes, uint256[] stakeDurations, bool[] decays, uint256[] stakedAmounts, bytes12[] canNames, address[] owners) {

        (count, indexes) = getActiveBucketIdxImpl(_prevIndex, _limit);
        stakeStartTimes = new uint256[](count);
        stakeDurations = new uint256[](count);
        decays = new bool[](count);
        stakedAmounts = new uint256[](count);
        canNames = new bytes12[](count);
        owners = new address[](count);

        for (uint256 i = 0; i < count; i++) {
            Bucket memory bucket = buckets[indexes[i]];
            stakeStartTimes[i] = bucket.stakeStartTime;
            stakeDurations[i] = bucket.stakeDuration;
            decays[i] = !bucket.nonDecay;
            stakedAmounts[i] = bucket.stakedAmount;
            canNames[i] = bucket.canName;
            owners[i] = bucket.bucketOwner;

        }

        return (count, indexes, stakeStartTimes, stakeDurations, decays, stakedAmounts, canNames, owners);
    }


    function getActiveBucketCreateTimes(uint256 _prevIndex, uint256 _limit) external view returns(uint256 count,
            uint256[] indexes, uint256[] createTimes) {
        (count, indexes) = getActiveBucketIdxImpl(_prevIndex, _limit);
        createTimes = new uint256[](count);
        for (uint256 i = 0; i < count; i++) {
            createTimes[i] = buckets[indexes[i]].createTime;
        }
        return (count, indexes, createTimes);
    }

    /**
     * @dev Get bucket indexes from a given address
     * @param _owner address onwer of the buckets
     * @return (uint256[])
     */
    function getBucketIndexesByAddress(address _owner) external view returns(uint256[]) {
        return stakeholders[_owner];
    }

    /**
     * @notice Extend the stake to stakeDuration from current time and/or set nonDecay.
     * @notice MUST trigger BucketUpdated event
     * @param _bucketIndex uint256 the index of the bucket
     * @param _stakeDuration uint256 the desired duration of staking.
     * @param _nonDecay bool if auto restake
     * @param _data bytes optional data to include in the emitted event
     */
    function restake(uint256 _bucketIndex, uint256 _stakeDuration, bool _nonDecay, bytes _data)
            external whenNotPaused canTouchBucket(msg.sender, _bucketIndex) checkStakeDuration(_stakeDuration) {
        require(block.timestamp.add(_stakeDuration * secondsPerEpoch) >=
                buckets[_bucketIndex].stakeStartTime.add(buckets[_bucketIndex].stakeDuration * secondsPerEpoch),
                "current stake duration not finished.");
        if (buckets[_bucketIndex].nonDecay) {
          require(_stakeDuration >= buckets[_bucketIndex].stakeDuration, "cannot reduce the stake duration.");
        }
        buckets[_bucketIndex].stakeDuration = _stakeDuration;
        buckets[_bucketIndex].stakeStartTime = block.timestamp;
        buckets[_bucketIndex].nonDecay = _nonDecay;
        buckets[_bucketIndex].unstakeStartTime = 0;
        emitBucketUpdated(_bucketIndex, _data);
    }

    /*
     * @notice Vote for another candidate with the tokens that are already staked in the given bucket
     * @notice MUST trigger BucketUpdated event
     * @param _bucketIndex uint256 the index of the bucket
     * @param canName bytes the IoTeX address of the candidate the tokens are staked for
     * @param _data bytes optional data to include in the emitted event
     */
    function revote(uint256 _bucketIndex, bytes12 _canName, bytes _data)
            external whenNotPaused canTouchBucket(msg.sender, _bucketIndex) {
        require(buckets[_bucketIndex].unstakeStartTime == 0, "cannot revote during unstaking.");
        buckets[_bucketIndex].canName = _canName;
        emitBucketUpdated(_bucketIndex, _data);
    }

    /*
     * @notice Set the new owner of a given bucket, the sender must be whitelisted to do so to avoid spam
     * @notice MUST trigger BucketUpdated event
     * @param _name bytes12 the name of the candidate the tokens are staked for
     * @param _bucketIndex uint256 optional data to include in the Stake event
     * @param _data bytes optional data to include in the emitted event
     */
    function setBucketOwner(uint256 _bucketIndex, address _newOwner, bytes _data)
            external whenNotPaused onlyWhitelisted canTouchBucket(msg.sender, _bucketIndex) {
        removeBucketIndex(_bucketIndex);
        buckets[_bucketIndex].bucketOwner = _newOwner;
        stakeholders[_newOwner].push(_bucketIndex);
        // TODO split event.
        emitBucketUpdated(_bucketIndex, _data);
    }

    /**
     * @notice Unstake a certain amount of tokens from a given bucket.
     * @notice MUST trigger BucketUnstake event
     * @param _bucketIndex uint256 the index of the bucket
     * @param _data bytes optional data to include in the emitted event
     */
    function unstake(uint256 _bucketIndex, bytes _data)
            external whenNotPaused canTouchBucket(msg.sender, _bucketIndex) {
        require(_bucketIndex > 0, "bucket 0 cannot be unstaked and withdrawn.");
        require(!buckets[_bucketIndex].nonDecay, "Cannot unstake with nonDecay flag. Need to disable non-decay mode first.");
        require(buckets[_bucketIndex].stakeStartTime.add(buckets[_bucketIndex].stakeDuration * secondsPerEpoch) <= block.timestamp,
            "Staking time does not expire yet. Please wait until staking expires.");
        require(buckets[_bucketIndex].unstakeStartTime == 0, "Unstaked already. No need to unstake again.");
        buckets[_bucketIndex].unstakeStartTime = block.timestamp;
        emit BucketUnstake(_bucketIndex, buckets[_bucketIndex].canName, buckets[_bucketIndex].stakedAmount, _data);
    }

    /**
     * @notice this SHOULD return the given amount of tokens to the user, if unstaking is currently not possible the function MUST revert
     * @notice MUST trigger BucketWithdraw event
     * @param _bucketIndex uint256 the index of the bucket
     * @param _data bytes optional data to include in the emitted event
     */
    function withdraw(uint256 _bucketIndex, bytes _data)
            external whenNotPaused canTouchBucket(msg.sender, _bucketIndex) {
        require(buckets[_bucketIndex].unstakeStartTime > 0, "Please unstake first before withdraw.");
        require(
            buckets[_bucketIndex].unstakeStartTime.add(unStakeDuration * secondsPerEpoch) <= block.timestamp,
            "Stakeholder needs to wait for 3 days before withdrawing tokens.");

        // fix double linked list
        uint256 prev = buckets[_bucketIndex].prev;
        uint256 next = buckets[_bucketIndex].next;
        buckets[prev].next = next;
        buckets[next].prev = prev;

        uint256 amount = buckets[_bucketIndex].stakedAmount;
        bytes12 canName = buckets[_bucketIndex].canName;
        address bucketowner = buckets[_bucketIndex].bucketOwner;
        buckets[_bucketIndex].stakedAmount = 0;
        removeBucketIndex(_bucketIndex);
        delete buckets[_bucketIndex];

        require(stakingToken.transfer(bucketowner, amount), "Unable to withdraw stake");
        emit BucketWithdraw(_bucketIndex, canName, amount, _data);
    }

    /**
     * @notice Returns the total of tokens staked from all addresses
     * @return uint256 The number of tokens staked from all addresses
     */
    function totalStaked() public view returns (uint256) {
        return stakingToken.balanceOf(this);
    }

    /**
     * @notice Address of the token being used by the staking interface
     * @return address The address of the ERC20 token used for staking
     */
    function token() public view returns(address) {
        return stakingToken;
    }

    /**
     * @notice Emit BucketUpdated event
     */
    function emitBucketUpdated(uint256 _bucketIndex, bytes _data) internal {
        Bucket memory b = buckets[_bucketIndex];
        emit BucketUpdated(_bucketIndex, b.canName, b.stakeDuration, b.stakeStartTime, b.nonDecay, b.bucketOwner, _data);
    }

    /**
     * @dev  Create a bucket and vote for a given canName.
     * @param _canName bytes The IoTeX address of the candidate the stake is being created for
     * @param _amount uint256 The duration to lock the tokens for
     * @param _stakeDuration bytes the desired duration of the staking
     * @param _nonDecay bool if auto restake
     * @param _data bytes optional data to include in the emitted event
     * @return uint236 the index of new bucket
     */
    function createBucket(bytes12 _canName, uint256 _amount, uint256 _stakeDuration, bool _nonDecay, bytes _data)
            external whenNotPaused checkStakeDuration(_stakeDuration) returns (uint256) {
        require(_amount >= minStakeAmount, "amount should >= 100.");
        require(stakeholders[msg.sender].length <= maxBucketsPerAddr, "One address can have up limited buckets");
        require(stakingToken.transferFrom(msg.sender, this, _amount), "Stake required"); // transfer token to contract
        // add a new bucket to the end of buckets array and fix the double linked list.
        buckets[bucketCount] = Bucket(_canName, _amount, _stakeDuration, block.timestamp, _nonDecay, 0, msg.sender, block.timestamp, buckets[0].prev, 0);
        buckets[buckets[0].prev].next = bucketCount;
        buckets[0].prev = bucketCount;
        stakeholders[msg.sender].push(bucketCount);
        bucketCount++;
        emit BucketCreated(bucketCount-1, _canName, _amount, _stakeDuration, _nonDecay, _data);
        return bucketCount-1;
    }

    /**
     * @dev Remove the bucket index from stakeholders map
     * @param _bucketidx uint256 the bucket index
     */
    function removeBucketIndex(uint256 _bucketidx) internal {
        address owner = buckets[_bucketidx].bucketOwner;
        require(stakeholders[owner].length > 0, "Expect the owner has at least one bucket index");

        uint256 i = 0;
        for (; i < stakeholders[owner].length; i++) {
          if(stakeholders[owner][i] == _bucketidx) {
                break;
          }
        }
        for (; i < stakeholders[owner].length - 1; i++) {
          stakeholders[owner][i] = stakeholders[owner][i + 1];
        }
        stakeholders[owner].length--;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_bucketIndex","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_prevIndex","type":"uint256"},{"name":"_limit","type":"uint256"}],"name":"getActiveBuckets","outputs":[{"name":"count","type":"uint256"},{"name":"indexes","type":"uint256[]"},{"name":"stakeStartTimes","type":"uint256[]"},{"name":"stakeDurations","type":"uint256[]"},{"name":"decays","type":"bool[]"},{"name":"stakedAmounts","type":"uint256[]"},{"name":"canNames","type":"bytes12[]"},{"name":"owners","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_prevIndex","type":"uint256"},{"name":"_limit","type":"uint256"}],"name":"getActiveBucketCreateTimes","outputs":[{"name":"count","type":"uint256"},{"name":"indexes","type":"uint256[]"},{"name":"createTimes","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"stakeholders","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"secondsPerEpoch","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minStakeDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxStakeDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bucketIndex","type":"uint256"},{"name":"_stakeDuration","type":"uint256"},{"name":"_nonDecay","type":"bool"},{"name":"_data","type":"bytes"}],"name":"restake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addAddressToWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getBucketIndexesByAddress","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStaked","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_prevIndex","type":"uint256"},{"name":"_limit","type":"uint256"}],"name":"getActiveBucketIdx","outputs":[{"name":"count","type":"uint256"},{"name":"indexes","type":"uint256[]"}],"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":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"buckets","outputs":[{"name":"canName","type":"bytes12"},{"name":"stakedAmount","type":"uint256"},{"name":"stakeDuration","type":"uint256"},{"name":"stakeStartTime","type":"uint256"},{"name":"nonDecay","type":"bool"},{"name":"unstakeStartTime","type":"uint256"},{"name":"bucketOwner","type":"address"},{"name":"createTime","type":"uint256"},{"name":"prev","type":"uint256"},{"name":"next","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bucketIndex","type":"uint256"},{"name":"_newOwner","type":"address"},{"name":"_data","type":"bytes"}],"name":"setBucketOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"unStakeDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bucketIndex","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"unstake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bucketIndex","type":"uint256"},{"name":"_canName","type":"bytes12"},{"name":"_data","type":"bytes"}],"name":"revote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_canName","type":"bytes12"},{"name":"_amount","type":"uint256"},{"name":"_stakeDuration","type":"uint256"},{"name":"_nonDecay","type":"bool"},{"name":"_data","type":"bytes"}],"name":"createBucket","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minStakeAmount","outputs":[{"name":"","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":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxBucketsPerAddr","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_stakingTokenAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bucketIndex","type":"uint256"},{"indexed":false,"name":"canName","type":"bytes12"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"stakeDuration","type":"uint256"},{"indexed":false,"name":"nonDecay","type":"bool"},{"indexed":false,"name":"data","type":"bytes"}],"name":"BucketCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bucketIndex","type":"uint256"},{"indexed":false,"name":"canName","type":"bytes12"},{"indexed":false,"name":"stakeDuration","type":"uint256"},{"indexed":false,"name":"stakeStartTime","type":"uint256"},{"indexed":false,"name":"nonDecay","type":"bool"},{"indexed":false,"name":"bucketOwner","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"BucketUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bucketIndex","type":"uint256"},{"indexed":false,"name":"canName","type":"bytes12"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"BucketUnstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bucketIndex","type":"uint256"},{"indexed":false,"name":"canName","type":"bytes12"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"BucketWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"WhitelistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"WhitelistedAddressRemoved","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]

608060405260008060146101000a81548160ff02191690831515021790555034801561002a57600080fd5b5060405160208061479a83398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061014060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff191681526020016001815260200160008152602001428152602001600115158152602001600081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020014281526020016000815260200160008152506003600080815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff0219169083740100000000000000000000000000000000000000009004021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e0820151816007015561010082015181600801556101208201518160090155905050600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090806001815401808255809150509060018203906000526020600020016000909192909190915055506001600481905550506144c7806102d36000396000f30060806040526004361061018b576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063030ba25d14610190578063042f95bd146101d557806324953eaa14610418578063286dd3f5146104965780632f54bf6e146104f157806337130b931461054c5780633f4ba83a14610627578063423ce1ae1461063e578063580c8f3d1461069f5780635c975abb146106ca5780635fec5c64146106f957806376f70003146107245780637b24a5fd1461074f5780637b9417c8146107aa5780637d0de83114610805578063817b1cd21461089d5780638456cb59146108c85780638b59c5e0146108df5780638da5cb5b146109725780639b19251a146109c95780639b51fb0d14610a245780639cfe346114610b02578063c698d49514610b67578063c8fd6ed014610b92578063d3e41fd214610bd7578063e2ec6ec314610c3d578063eae20f7614610cbb578063f188768414610d4b578063f2fde38b14610d76578063fc0c546a14610db9578063fe8a8b4c14610e10575b600080fd5b34801561019c57600080fd5b506101d360048036038101908080359060200190929190803590602001908201803590602001919091929391929390505050610e3b565b005b3480156101e157600080fd5b5061020a60048036038101908080359060200190929190803590602001909291905050506114cd565b604051808981526020018060200180602001806020018060200180602001806020018060200188810388528f818151815260200191508051906020019060200280838360005b8381101561026b578082015181840152602081019050610250565b5050505090500188810387528e818151815260200191508051906020019060200280838360005b838110156102ad578082015181840152602081019050610292565b5050505090500188810386528d818151815260200191508051906020019060200280838360005b838110156102ef5780820151818401526020810190506102d4565b5050505090500188810385528c818151815260200191508051906020019060200280838360005b83811015610331578082015181840152602081019050610316565b5050505090500188810384528b818151815260200191508051906020019060200280838360005b83811015610373578082015181840152602081019050610358565b5050505090500188810383528a818151815260200191508051906020019060200280838360005b838110156103b557808201518184015260208101905061039a565b50505050905001888103825289818151815260200191508051906020019060200280838360005b838110156103f75780820151818401526020810190506103dc565b505050509050019f5050505050505050505050505050505060405180910390f35b34801561042457600080fd5b5061047c600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506118d7565b604051808215151515815260200191505060405180910390f35b3480156104a257600080fd5b506104d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611939565b604051808215151515815260200191505060405180910390f35b3480156104fd57600080fd5b50610532600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a66565b604051808215151515815260200191505060405180910390f35b34801561055857600080fd5b506105816004803603810190808035906020019092919080359060200190929190505050611abf565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156105ce5780820151818401526020810190506105b3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156106105780820151818401526020810190506105f5565b505050509050019550505050505060405180910390f35b34801561063357600080fd5b5061063c611b7f565b005b34801561064a57600080fd5b50610689600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bf6565b6040518082815260200191505060405180910390f35b3480156106ab57600080fd5b506106b4611c26565b6040518082815260200191505060405180910390f35b3480156106d657600080fd5b506106df611c2d565b604051808215151515815260200191505060405180910390f35b34801561070557600080fd5b5061070e611c40565b6040518082815260200191505060405180910390f35b34801561073057600080fd5b50610739611c45565b6040518082815260200191505060405180910390f35b34801561075b57600080fd5b506107a86004803603810190808035906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001919091929391929390505050611c4b565b005b3480156107b657600080fd5b506107eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612172565b604051808215151515815260200191505060405180910390f35b34801561081157600080fd5b50610846600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061229f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561088957808201518184015260208101905061086e565b505050509050019250505060405180910390f35b3480156108a957600080fd5b506108b2612336565b6040518082815260200191505060405180910390f35b3480156108d457600080fd5b506108dd612435565b005b3480156108eb57600080fd5b5061091460048036038101908080359060200190929190803590602001909291905050506124ae565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561095d578082015181840152602081019050610942565b50505050905001935050505060405180910390f35b34801561097e57600080fd5b506109876124c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109d557600080fd5b50610a0a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ec565b604051808215151515815260200191505060405180910390f35b348015610a3057600080fd5b50610a4f6004803603810190808035906020019092919050505061250c565b604051808b73ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018a8152602001898152602001888152602001871515151581526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019a505050505050505050505060405180910390f35b348015610b0e57600080fd5b50610b6560048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019190919293919293905050506125ae565b005b348015610b7357600080fd5b50610b7c612844565b6040518082815260200191505060405180910390f35b348015610b9e57600080fd5b50610bd560048036038101908080359060200190929190803590602001908201803590602001919091929391929390505050612849565b005b348015610be357600080fd5b50610c3b60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff19169060200190929190803590602001908201803590602001919091929391929390505050612dc0565b005b348015610c4957600080fd5b50610ca160048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050613014565b604051808215151515815260200191505060405180910390f35b348015610cc757600080fd5b50610d35600480360381019080803573ffffffffffffffffffffffffffffffffffffffff191690602001909291908035906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001919091929391929390505050613076565b6040518082815260200191505060405180910390f35b348015610d5757600080fd5b50610d6061381c565b6040518082815260200191505060405180910390f35b348015610d8257600080fd5b50610db7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613829565b005b348015610dc557600080fd5b50610dce613880565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e1c57600080fd5b50610e256138aa565b6040518082815260200191505060405180910390f35b60008060008060008060149054906101000a900460ff16151515610e5e57600080fd5b3388600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610e9c57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b6000600360008c815260200190815260200160002060050154111515611029576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f506c6561736520756e7374616b65206669727374206265666f7265207769746881526020017f647261772e00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b4261105962015180600302600360008e8152602001908152602001600020600501546138b090919063ffffffff16565b111515156110f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001807f5374616b65686f6c646572206e6565647320746f207761697420666f7220332081526020017f64617973206265666f7265207769746864726177696e6720746f6b656e732e0081525060400191505060405180910390fd5b600360008b8152602001908152602001600020600801549650600360008b8152602001908152602001600020600901549550856003600089815260200190815260200160002060090181905550866003600088815260200190815260200160002060080181905550600360008b8152602001908152602001600020600101549450600360008b815260200190815260200160002060000160009054906101000a900474010000000000000000000000000000000000000000029350600360008b815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506000600360008c81526020019081526020016000206001018190555061120e8a6138ce565b600360008b8152602001908152602001600020600080820160006101000a8154906bffffffffffffffffffffffff02191690556001820160009055600282016000905560038201600090556004820160006101000a81549060ff021916905560058201600090556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556007820160009055600882016000905560098201600090555050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561137b57600080fd5b505af115801561138f573d6000803e3d6000fd5b505050506040513d60208110156113a557600080fd5b8101908080519060200190929190505050151561142a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e61626c6520746f207769746864726177207374616b65000000000000000081525060200191505060405180910390fd5b7f2a79739690fe6bf5933c5d812824e30c2b95d43b6ddadd96148a4493d3b565408a85878c8c604051808681526020018573ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018481526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a150505050505050505050565b6000606080606080606080606060006114e46143c7565b6114ee8c8c613c10565b809a50819b505050896040519080825280602002602001820160405280156115255781602001602082028038833980820191505090505b509750896040519080825280602002602001820160405280156115575781602001602082028038833980820191505090505b509650896040519080825280602002602001820160405280156115895781602001602082028038833980820191505090505b509550896040519080825280602002602001820160405280156115bb5781602001602082028038833980820191505090505b509450896040519080825280602002602001820160405280156115ed5781602001602082028038833980820191505090505b5093508960405190808252806020026020018201604052801561161f5781602001602082028038833980820191505090505b509250600091505b898210156118b057600360008a8481518110151561164157fe5b90602001906020020151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505090508060600151888381518110151561178b57fe5b9060200190602002018181525050806040015187838151811015156117ac57fe5b906020019060200201818152505080608001511586838151811015156117ce57fe5b9060200190602002019015159081151581525050806020015185838151811015156117f557fe5b90602001906020020181815250508060000151848381518110151561181657fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff1916908173ffffffffffffffffffffffffffffffffffffffff1916815250508060c00151838381518110151561186757fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508180600101925050611627565b89898989898989899950995099509950995099509950995050509295985092959890939650565b6000806118e333611a66565b15156118ee57600080fd5b600090505b82518110156119335761191c838281518110151561190d57fe5b90602001906020020151611939565b1561192657600191505b80806001019150506118f3565b50919050565b600061194433611a66565b151561194f57600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a61576000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b60008173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006060806000611ad08686613c10565b809450819550505083604051908082528060200260200182016040528015611b075781602001602082028038833980820191505090505b509150600090505b83811015611b6e57600360008483815181101515611b2957fe5b906020019060200201518152602001908152602001600020600701548282815181101515611b5357fe5b90602001906020020181815250508080600101915050611b0f565b838383935093509350509250925092565b611b8833611a66565b1515611b9357600080fd5b600060149054906101000a900460ff161515611bae57600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600560205281600052604060002081815481101515611c1157fe5b90600052602060002001600091509150505481565b6201518081565b600060149054906101000a900460ff1681565b600081565b61015e81565b600060149054906101000a900460ff16151515611c6757600080fd5b3385600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611ca557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611d7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b8560008110158015611d92575061015e8111155b1515611e2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f546865207374616b65206475726174696f6e20697320746f6f20736d616c6c2081526020017f6f72206c6172676500000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600782811515611e3a57fe5b06141515611ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f546865207374616b65206475726174696f6e2073686f756c64206265206d756c81526020017f7469706c65206f6620370000000000000000000000000000000000000000000081525060400191505060405180910390fd5b611f1a62015180600360008b81526020019081526020016000206002015402600360008b8152602001908152602001600020600301546138b090919063ffffffff16565b611f32620151808902426138b090919063ffffffff16565b10151515611fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f63757272656e74207374616b65206475726174696f6e206e6f742066696e697381526020017f6865642e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6003600089815260200190815260200160002060040160009054906101000a900460ff16156120ac57600360008981526020019081526020016000206002015487101515156120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f63616e6e6f742072656475636520746865207374616b65206475726174696f6e81526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b86600360008a81526020019081526020016000206002018190555042600360008a81526020019081526020016000206003018190555085600360008a815260200190815260200160002060040160006101000a81548160ff0219169083151502179055506000600360008a8152602001908152602001600020600501819055506121688886868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b5050505050505050565b600061217d33611a66565b151561218857600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561229a5760018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b6060600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561232a57602002820191906000526020600020905b815481526020019060010190808311612316575b50505050509050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b505050506040513d602081101561241f57600080fd5b8101908080519060200190929190505050905090565b61243e33611a66565b151561244957600080fd5b600060149054906101000a900460ff1615151561246557600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600060606124bc8484613c10565b915091509250929050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b60036020528060005260406000206000915090508060000160009054906101000a90047401000000000000000000000000000000000000000002908060010154908060020154908060030154908060040160009054906101000a900460ff16908060050154908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806007015490806008015490806009015490508a565b600060149054906101000a900460ff161515156125ca57600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561262257600080fd5b3384600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561266057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b612742866138ce565b846003600088815260200190815260200160002060060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002086908060018154018082558091505090600182039060005260206000200160009091929091909150555061283c8685858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b505050505050565b600381565b600060149054906101000a900460ff1615151561286557600080fd5b3383600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156128a357600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561297c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b600085111515612a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6275636b657420302063616e6e6f7420626520756e7374616b656420616e642081526020017f77697468647261776e2e0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6003600086815260200190815260200160002060040160009054906101000a900460ff16151515612aff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260488152602001807f43616e6e6f7420756e7374616b652077697468206e6f6e446563617920666c6181526020017f672e204e65656420746f2064697361626c65206e6f6e2d6465636179206d6f6481526020017f652066697273742e00000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b42612b446201518060036000898152602001908152602001600020600201540260036000898152602001908152602001600020600301546138b090919063ffffffff16565b11151515612c06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260448152602001807f5374616b696e672074696d6520646f6573206e6f74206578706972652079657481526020017f2e20506c65617365207761697420756e74696c207374616b696e67206578706981526020017f7265732e0000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b60006003600087815260200190815260200160002060050154141515612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f556e7374616b656420616c72656164792e204e6f206e65656420746f20756e7381526020017f74616b6520616761696e2e00000000000000000000000000000000000000000081525060400191505060405180910390fd5b4260036000878152602001908152602001600020600501819055507faa192dc938c20fb63756fbd8f4d9f46092c3252f772b2c549c4688c118b6b475856003600088815260200190815260200160002060000160009054906101000a9004740100000000000000000000000000000000000000000260036000898152602001908152602001600020600101548787604051808681526020018573ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018481526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a15050505050565b600060149054906101000a900460ff16151515612ddc57600080fd5b3384600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612e1a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612ef3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b60006003600088815260200190815260200160002060050154141515612f81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f63616e6e6f74207265766f746520647572696e6720756e7374616b696e672e0081525060200191505060405180910390fd5b846003600088815260200190815260200160002060000160006101000a8154816bffffffffffffffffffffffff0219169083740100000000000000000000000000000000000000009004021790555061300c8685858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b505050505050565b60008061302033611a66565b151561302b57600080fd5b600090505b825181101561307057613059838281518110151561304a57fe5b90602001906020020151612172565b1561306357600191505b8080600101915050613030565b50919050565b60008060149054906101000a900460ff1615151561309357600080fd5b84600081101580156130a7575061015e8111155b1515613141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f546865207374616b65206475726174696f6e20697320746f6f20736d616c6c2081526020017f6f72206c6172676500000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600060078281151561314f57fe5b061415156131eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f546865207374616b65206475726174696f6e2073686f756c64206265206d756c81526020017f7469706c65206f6620370000000000000000000000000000000000000000000081525060400191505060405180910390fd5b68056bc75e2d63100000871015151561326c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f616d6f756e742073686f756c64203e3d203130302e000000000000000000000081525060200191505060405180910390fd5b6101f4600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115151561334e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4f6e6520616464726573732063616e2068617665207570206c696d697465642081526020017f6275636b6574730000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33308a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561344757600080fd5b505af115801561345b573d6000803e3d6000fd5b505050506040513d602081101561347157600080fd5b810190808051906020019092919050505015156134f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5374616b6520726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b610140604051908101604052808973ffffffffffffffffffffffffffffffffffffffff191681526020018881526020018781526020014281526020018615158152602001600081526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815260200160036000808152602001908152602001600020600801548152602001600081525060036000600454815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff0219169083740100000000000000000000000000000000000000009004021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070155610100820151816008015561012082015181600901559050506004546003600060036000808152602001908152602001600020600801548152602001908152602001600020600901819055506004546003600080815260200190815260200160002060080181905550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060045490806001815401808255809150509060018203906000526020600020016000909192909190915055506004600081548092919060010191905055507fbecddf0f61f76a4ac94a507fbc32c036d2fb7c4b466cad82dd9a4a2d76b263fe600160045403898989898989604051808881526020018773ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018681526020018581526020018415151515815260200180602001828103825284848281815260200192508082843782019150509850505050505050505060405180910390a16001600454039150509695505050505050565b68056bc75e2d6310000081565b61383233611a66565b151561383d57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6101f481565b60008082840190508381101515156138c457fe5b8091505092915050565b6000806003600084815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115156139ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f45787065637420746865206f776e657220686173206174206c65617374206f6e81526020017f65206275636b657420696e64657800000000000000000000000000000000000081525060400191505060405180910390fd5b600090505b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015613aa95782600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515613a8657fe5b90600052602060002001541415613a9c57613aa9565b80806001019150506139ef565b5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003811015613bb857600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018201815481101515613b4657fe5b9060005260206000200154600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515613b9d57fe5b90600052602060002001819055508080600101915050613aaa565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003613c0a919061444a565b50505050565b60006060613c1c6143c7565b60008085118015613c2e575061138885105b1515613c3957600080fd5b6003600087815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505091506000826101200151111515613e0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f63616e6e6f742066696e64206275636b6574206261736564206f6e20696e707581526020017f7420696e6465782e00000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84604051908082528060200260200182016040528015613e3d5781602001602082028038833980820191505090505b50925060009050600090505b8481101561413c575b6000826101200151118015613e825750600060036000846101200151815260200190815260200160002060050154115b15613fc35760036000836101200151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160078201548152602001600882015481526020016009820154815250509150613e52565b60008261012001511415613fd65761413c565b8161012001518382815181101515613fea57fe5b906020019060200201818152505060036000836101200151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505091508080600101915050613e49565b80839350935050509250929050565b6141536143c7565b6003600084815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505090507e4bbbedd0138c223ffed73fdab05a22a5d22770de54bea694d06661d59d16008382600001518360400151846060015185608001518660c0015188604051808881526020018773ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff19168152602001868152602001858152602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614382578082015181840152602081019050614367565b50505050905090810190601f1680156143af5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a1505050565b61014060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1916815260200160008152602001600081526020016000815260200160001515815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b815481835581811115614471578183600052602060002091820191016144709190614476565b5b505050565b61449891905b8082111561449457600081600090555060010161447c565b5090565b905600a165627a7a7230582070b08503648f3f587cc005b2109e5e13cc170fbaec9a9da2c254685b4247665100290000000000000000000000006fb3e0a217407efff7ca062d46c26e5d60a14d69

Deployed Bytecode

0x60806040526004361061018b576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063030ba25d14610190578063042f95bd146101d557806324953eaa14610418578063286dd3f5146104965780632f54bf6e146104f157806337130b931461054c5780633f4ba83a14610627578063423ce1ae1461063e578063580c8f3d1461069f5780635c975abb146106ca5780635fec5c64146106f957806376f70003146107245780637b24a5fd1461074f5780637b9417c8146107aa5780637d0de83114610805578063817b1cd21461089d5780638456cb59146108c85780638b59c5e0146108df5780638da5cb5b146109725780639b19251a146109c95780639b51fb0d14610a245780639cfe346114610b02578063c698d49514610b67578063c8fd6ed014610b92578063d3e41fd214610bd7578063e2ec6ec314610c3d578063eae20f7614610cbb578063f188768414610d4b578063f2fde38b14610d76578063fc0c546a14610db9578063fe8a8b4c14610e10575b600080fd5b34801561019c57600080fd5b506101d360048036038101908080359060200190929190803590602001908201803590602001919091929391929390505050610e3b565b005b3480156101e157600080fd5b5061020a60048036038101908080359060200190929190803590602001909291905050506114cd565b604051808981526020018060200180602001806020018060200180602001806020018060200188810388528f818151815260200191508051906020019060200280838360005b8381101561026b578082015181840152602081019050610250565b5050505090500188810387528e818151815260200191508051906020019060200280838360005b838110156102ad578082015181840152602081019050610292565b5050505090500188810386528d818151815260200191508051906020019060200280838360005b838110156102ef5780820151818401526020810190506102d4565b5050505090500188810385528c818151815260200191508051906020019060200280838360005b83811015610331578082015181840152602081019050610316565b5050505090500188810384528b818151815260200191508051906020019060200280838360005b83811015610373578082015181840152602081019050610358565b5050505090500188810383528a818151815260200191508051906020019060200280838360005b838110156103b557808201518184015260208101905061039a565b50505050905001888103825289818151815260200191508051906020019060200280838360005b838110156103f75780820151818401526020810190506103dc565b505050509050019f5050505050505050505050505050505060405180910390f35b34801561042457600080fd5b5061047c600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506118d7565b604051808215151515815260200191505060405180910390f35b3480156104a257600080fd5b506104d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611939565b604051808215151515815260200191505060405180910390f35b3480156104fd57600080fd5b50610532600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a66565b604051808215151515815260200191505060405180910390f35b34801561055857600080fd5b506105816004803603810190808035906020019092919080359060200190929190505050611abf565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156105ce5780820151818401526020810190506105b3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156106105780820151818401526020810190506105f5565b505050509050019550505050505060405180910390f35b34801561063357600080fd5b5061063c611b7f565b005b34801561064a57600080fd5b50610689600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bf6565b6040518082815260200191505060405180910390f35b3480156106ab57600080fd5b506106b4611c26565b6040518082815260200191505060405180910390f35b3480156106d657600080fd5b506106df611c2d565b604051808215151515815260200191505060405180910390f35b34801561070557600080fd5b5061070e611c40565b6040518082815260200191505060405180910390f35b34801561073057600080fd5b50610739611c45565b6040518082815260200191505060405180910390f35b34801561075b57600080fd5b506107a86004803603810190808035906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001919091929391929390505050611c4b565b005b3480156107b657600080fd5b506107eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612172565b604051808215151515815260200191505060405180910390f35b34801561081157600080fd5b50610846600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061229f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561088957808201518184015260208101905061086e565b505050509050019250505060405180910390f35b3480156108a957600080fd5b506108b2612336565b6040518082815260200191505060405180910390f35b3480156108d457600080fd5b506108dd612435565b005b3480156108eb57600080fd5b5061091460048036038101908080359060200190929190803590602001909291905050506124ae565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561095d578082015181840152602081019050610942565b50505050905001935050505060405180910390f35b34801561097e57600080fd5b506109876124c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109d557600080fd5b50610a0a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ec565b604051808215151515815260200191505060405180910390f35b348015610a3057600080fd5b50610a4f6004803603810190808035906020019092919050505061250c565b604051808b73ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018a8152602001898152602001888152602001871515151581526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019a505050505050505050505060405180910390f35b348015610b0e57600080fd5b50610b6560048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019190919293919293905050506125ae565b005b348015610b7357600080fd5b50610b7c612844565b6040518082815260200191505060405180910390f35b348015610b9e57600080fd5b50610bd560048036038101908080359060200190929190803590602001908201803590602001919091929391929390505050612849565b005b348015610be357600080fd5b50610c3b60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff19169060200190929190803590602001908201803590602001919091929391929390505050612dc0565b005b348015610c4957600080fd5b50610ca160048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050613014565b604051808215151515815260200191505060405180910390f35b348015610cc757600080fd5b50610d35600480360381019080803573ffffffffffffffffffffffffffffffffffffffff191690602001909291908035906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001919091929391929390505050613076565b6040518082815260200191505060405180910390f35b348015610d5757600080fd5b50610d6061381c565b6040518082815260200191505060405180910390f35b348015610d8257600080fd5b50610db7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613829565b005b348015610dc557600080fd5b50610dce613880565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e1c57600080fd5b50610e256138aa565b6040518082815260200191505060405180910390f35b60008060008060008060149054906101000a900460ff16151515610e5e57600080fd5b3388600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610e9c57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b6000600360008c815260200190815260200160002060050154111515611029576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f506c6561736520756e7374616b65206669727374206265666f7265207769746881526020017f647261772e00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b4261105962015180600302600360008e8152602001908152602001600020600501546138b090919063ffffffff16565b111515156110f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001807f5374616b65686f6c646572206e6565647320746f207761697420666f7220332081526020017f64617973206265666f7265207769746864726177696e6720746f6b656e732e0081525060400191505060405180910390fd5b600360008b8152602001908152602001600020600801549650600360008b8152602001908152602001600020600901549550856003600089815260200190815260200160002060090181905550866003600088815260200190815260200160002060080181905550600360008b8152602001908152602001600020600101549450600360008b815260200190815260200160002060000160009054906101000a900474010000000000000000000000000000000000000000029350600360008b815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506000600360008c81526020019081526020016000206001018190555061120e8a6138ce565b600360008b8152602001908152602001600020600080820160006101000a8154906bffffffffffffffffffffffff02191690556001820160009055600282016000905560038201600090556004820160006101000a81549060ff021916905560058201600090556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556007820160009055600882016000905560098201600090555050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561137b57600080fd5b505af115801561138f573d6000803e3d6000fd5b505050506040513d60208110156113a557600080fd5b8101908080519060200190929190505050151561142a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e61626c6520746f207769746864726177207374616b65000000000000000081525060200191505060405180910390fd5b7f2a79739690fe6bf5933c5d812824e30c2b95d43b6ddadd96148a4493d3b565408a85878c8c604051808681526020018573ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018481526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a150505050505050505050565b6000606080606080606080606060006114e46143c7565b6114ee8c8c613c10565b809a50819b505050896040519080825280602002602001820160405280156115255781602001602082028038833980820191505090505b509750896040519080825280602002602001820160405280156115575781602001602082028038833980820191505090505b509650896040519080825280602002602001820160405280156115895781602001602082028038833980820191505090505b509550896040519080825280602002602001820160405280156115bb5781602001602082028038833980820191505090505b509450896040519080825280602002602001820160405280156115ed5781602001602082028038833980820191505090505b5093508960405190808252806020026020018201604052801561161f5781602001602082028038833980820191505090505b509250600091505b898210156118b057600360008a8481518110151561164157fe5b90602001906020020151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505090508060600151888381518110151561178b57fe5b9060200190602002018181525050806040015187838151811015156117ac57fe5b906020019060200201818152505080608001511586838151811015156117ce57fe5b9060200190602002019015159081151581525050806020015185838151811015156117f557fe5b90602001906020020181815250508060000151848381518110151561181657fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff1916908173ffffffffffffffffffffffffffffffffffffffff1916815250508060c00151838381518110151561186757fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508180600101925050611627565b89898989898989899950995099509950995099509950995050509295985092959890939650565b6000806118e333611a66565b15156118ee57600080fd5b600090505b82518110156119335761191c838281518110151561190d57fe5b90602001906020020151611939565b1561192657600191505b80806001019150506118f3565b50919050565b600061194433611a66565b151561194f57600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a61576000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b60008173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006060806000611ad08686613c10565b809450819550505083604051908082528060200260200182016040528015611b075781602001602082028038833980820191505090505b509150600090505b83811015611b6e57600360008483815181101515611b2957fe5b906020019060200201518152602001908152602001600020600701548282815181101515611b5357fe5b90602001906020020181815250508080600101915050611b0f565b838383935093509350509250925092565b611b8833611a66565b1515611b9357600080fd5b600060149054906101000a900460ff161515611bae57600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600560205281600052604060002081815481101515611c1157fe5b90600052602060002001600091509150505481565b6201518081565b600060149054906101000a900460ff1681565b600081565b61015e81565b600060149054906101000a900460ff16151515611c6757600080fd5b3385600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611ca557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611d7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b8560008110158015611d92575061015e8111155b1515611e2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f546865207374616b65206475726174696f6e20697320746f6f20736d616c6c2081526020017f6f72206c6172676500000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600782811515611e3a57fe5b06141515611ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f546865207374616b65206475726174696f6e2073686f756c64206265206d756c81526020017f7469706c65206f6620370000000000000000000000000000000000000000000081525060400191505060405180910390fd5b611f1a62015180600360008b81526020019081526020016000206002015402600360008b8152602001908152602001600020600301546138b090919063ffffffff16565b611f32620151808902426138b090919063ffffffff16565b10151515611fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f63757272656e74207374616b65206475726174696f6e206e6f742066696e697381526020017f6865642e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6003600089815260200190815260200160002060040160009054906101000a900460ff16156120ac57600360008981526020019081526020016000206002015487101515156120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f63616e6e6f742072656475636520746865207374616b65206475726174696f6e81526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b86600360008a81526020019081526020016000206002018190555042600360008a81526020019081526020016000206003018190555085600360008a815260200190815260200160002060040160006101000a81548160ff0219169083151502179055506000600360008a8152602001908152602001600020600501819055506121688886868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b5050505050505050565b600061217d33611a66565b151561218857600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561229a5760018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b6060600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561232a57602002820191906000526020600020905b815481526020019060010190808311612316575b50505050509050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b505050506040513d602081101561241f57600080fd5b8101908080519060200190929190505050905090565b61243e33611a66565b151561244957600080fd5b600060149054906101000a900460ff1615151561246557600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600060606124bc8484613c10565b915091509250929050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b60036020528060005260406000206000915090508060000160009054906101000a90047401000000000000000000000000000000000000000002908060010154908060020154908060030154908060040160009054906101000a900460ff16908060050154908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806007015490806008015490806009015490508a565b600060149054906101000a900460ff161515156125ca57600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561262257600080fd5b3384600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561266057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b612742866138ce565b846003600088815260200190815260200160002060060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002086908060018154018082558091505090600182039060005260206000200160009091929091909150555061283c8685858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b505050505050565b600381565b600060149054906101000a900460ff1615151561286557600080fd5b3383600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156128a357600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561297c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b600085111515612a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6275636b657420302063616e6e6f7420626520756e7374616b656420616e642081526020017f77697468647261776e2e0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6003600086815260200190815260200160002060040160009054906101000a900460ff16151515612aff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260488152602001807f43616e6e6f7420756e7374616b652077697468206e6f6e446563617920666c6181526020017f672e204e65656420746f2064697361626c65206e6f6e2d6465636179206d6f6481526020017f652066697273742e00000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b42612b446201518060036000898152602001908152602001600020600201540260036000898152602001908152602001600020600301546138b090919063ffffffff16565b11151515612c06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260448152602001807f5374616b696e672074696d6520646f6573206e6f74206578706972652079657481526020017f2e20506c65617365207761697420756e74696c207374616b696e67206578706981526020017f7265732e0000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b60006003600087815260200190815260200160002060050154141515612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f556e7374616b656420616c72656164792e204e6f206e65656420746f20756e7381526020017f74616b6520616761696e2e00000000000000000000000000000000000000000081525060400191505060405180910390fd5b4260036000878152602001908152602001600020600501819055507faa192dc938c20fb63756fbd8f4d9f46092c3252f772b2c549c4688c118b6b475856003600088815260200190815260200160002060000160009054906101000a9004740100000000000000000000000000000000000000000260036000898152602001908152602001600020600101548787604051808681526020018573ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018481526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a15050505050565b600060149054906101000a900460ff16151515612ddc57600080fd5b3384600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612e1a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612ef3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b60006003600088815260200190815260200160002060050154141515612f81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f63616e6e6f74207265766f746520647572696e6720756e7374616b696e672e0081525060200191505060405180910390fd5b846003600088815260200190815260200160002060000160006101000a8154816bffffffffffffffffffffffff0219169083740100000000000000000000000000000000000000009004021790555061300c8685858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b505050505050565b60008061302033611a66565b151561302b57600080fd5b600090505b825181101561307057613059838281518110151561304a57fe5b90602001906020020151612172565b1561306357600191505b8080600101915050613030565b50919050565b60008060149054906101000a900460ff1615151561309357600080fd5b84600081101580156130a7575061015e8111155b1515613141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f546865207374616b65206475726174696f6e20697320746f6f20736d616c6c2081526020017f6f72206c6172676500000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600060078281151561314f57fe5b061415156131eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f546865207374616b65206475726174696f6e2073686f756c64206265206d756c81526020017f7469706c65206f6620370000000000000000000000000000000000000000000081525060400191505060405180910390fd5b68056bc75e2d63100000871015151561326c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f616d6f756e742073686f756c64203e3d203130302e000000000000000000000081525060200191505060405180910390fd5b6101f4600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115151561334e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4f6e6520616464726573732063616e2068617665207570206c696d697465642081526020017f6275636b6574730000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33308a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561344757600080fd5b505af115801561345b573d6000803e3d6000fd5b505050506040513d602081101561347157600080fd5b810190808051906020019092919050505015156134f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5374616b6520726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b610140604051908101604052808973ffffffffffffffffffffffffffffffffffffffff191681526020018881526020018781526020014281526020018615158152602001600081526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815260200160036000808152602001908152602001600020600801548152602001600081525060036000600454815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff0219169083740100000000000000000000000000000000000000009004021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070155610100820151816008015561012082015181600901559050506004546003600060036000808152602001908152602001600020600801548152602001908152602001600020600901819055506004546003600080815260200190815260200160002060080181905550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060045490806001815401808255809150509060018203906000526020600020016000909192909190915055506004600081548092919060010191905055507fbecddf0f61f76a4ac94a507fbc32c036d2fb7c4b466cad82dd9a4a2d76b263fe600160045403898989898989604051808881526020018773ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018681526020018581526020018415151515815260200180602001828103825284848281815260200192508082843782019150509850505050505050505060405180910390a16001600454039150509695505050505050565b68056bc75e2d6310000081565b61383233611a66565b151561383d57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6101f481565b60008082840190508381101515156138c457fe5b8091505092915050565b6000806003600084815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115156139ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f45787065637420746865206f776e657220686173206174206c65617374206f6e81526020017f65206275636b657420696e64657800000000000000000000000000000000000081525060400191505060405180910390fd5b600090505b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015613aa95782600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515613a8657fe5b90600052602060002001541415613a9c57613aa9565b80806001019150506139ef565b5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003811015613bb857600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018201815481101515613b4657fe5b9060005260206000200154600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515613b9d57fe5b90600052602060002001819055508080600101915050613aaa565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003613c0a919061444a565b50505050565b60006060613c1c6143c7565b60008085118015613c2e575061138885105b1515613c3957600080fd5b6003600087815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505091506000826101200151111515613e0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f63616e6e6f742066696e64206275636b6574206261736564206f6e20696e707581526020017f7420696e6465782e00000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84604051908082528060200260200182016040528015613e3d5781602001602082028038833980820191505090505b50925060009050600090505b8481101561413c575b6000826101200151118015613e825750600060036000846101200151815260200190815260200160002060050154115b15613fc35760036000836101200151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160078201548152602001600882015481526020016009820154815250509150613e52565b60008261012001511415613fd65761413c565b8161012001518382815181101515613fea57fe5b906020019060200201818152505060036000836101200151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505091508080600101915050613e49565b80839350935050509250929050565b6141536143c7565b6003600084815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505090507e4bbbedd0138c223ffed73fdab05a22a5d22770de54bea694d06661d59d16008382600001518360400151846060015185608001518660c0015188604051808881526020018773ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff19168152602001868152602001858152602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614382578082015181840152602081019050614367565b50505050905090810190601f1680156143af5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a1505050565b61014060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1916815260200160008152602001600081526020016000815260200160001515815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b815481835581811115614471578183600052602060002091820191016144709190614476565b5b505050565b61449891905b8082111561449457600081600090555060010161447c565b5090565b905600a165627a7a7230582070b08503648f3f587cc005b2109e5e13cc170fbaec9a9da2c254685b424766510029

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

0000000000000000000000006fb3e0a217407efff7ca062d46c26e5d60a14d69

-----Decoded View---------------
Arg [0] : _stakingTokenAddr (address): 0x6fB3e0A217407EFFf7Ca062D46c26E5d60a14d69

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006fb3e0a217407efff7ca062d46c26e5d60a14d69


Deployed Bytecode Sourcemap

5775:15682:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17207:1142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17207:1142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10933:1132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5375:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5375:242:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4901:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4901:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;924:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;924:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12075:456;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12075:456:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12075:456:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12075:456:0;;;;;;;;;;;;;;;;;;;;3062:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3062:95:0;;;;;;7990:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7990:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6793:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6793:47:0;;;;;;;;;;;;;;;;;;;;;;;2441:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2441:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6521:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6521:44:0;;;;;;;;;;;;;;;;;;;;;;;6572:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6572:46:0;;;;;;;;;;;;;;;;;;;;;;;13233:911;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13233:911:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3995:223;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3995:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12689:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12689:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12689:130:0;;;;;;;;;;;;;;;;;18516:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18516:107:0;;;;;;;;;;;;;;;;;;;;;;;2882:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2882:93:0;;;;;;10225:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10225:188:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10225:188:0;;;;;;;;;;;;;;;;;;631:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;631:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3487:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3487:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7778;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7778:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15311:409;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15311:409:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6687:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6687:43:0;;;;;;;;;;;;;;;;;;;;;;;16000:859;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16000:859:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14544:352;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14544:352:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4439:232;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4439:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19685:1055;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19685:1055:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6625:55;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6625:55:0;;;;;;;;;;;;;;;;;;;;;;;817:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;817:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18794:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18794:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6739:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6739:47:0;;;;;;;;;;;;;;;;;;;;;;;17207:1142;17698:12;17750;17876:14;17938:15;17996:19;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;17311:10;17323:12;8379:1;8359:22;;:8;:22;;;;8351:31;;;;;;;;8438:10;8401:47;;:7;:21;8409:12;8401:21;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;8393:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17397:1;17356:7;:21;17364:12;17356:21;;;;;;;;;;;:38;;;:42;17348:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17554:15;17473:77;6835:5;6729:1;17516:33;17473:7;:21;17481:12;17473:21;;;;;;;;;;;:38;;;:42;;:77;;;;:::i;:::-;:96;;17451:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17713:7;:21;17721:12;17713:21;;;;;;;;;;;:26;;;17698:41;;17765:7;:21;17773:12;17765:21;;;;;;;;;;;:26;;;17750:41;;17823:4;17802:7;:13;17810:4;17802:13;;;;;;;;;;;:18;;:25;;;;17859:4;17838:7;:13;17846:4;17838:13;;;;;;;;;;;:18;;:25;;;;17893:7;:21;17901:12;17893:21;;;;;;;;;;;:34;;;17876:51;;17956:7;:21;17964:12;17956:21;;;;;;;;;;;:29;;;;;;;;;;;;17938:47;;18018:7;:21;18026:12;18018:21;;;;;;;;;;;:33;;;;;;;;;;;;17996:55;;18099:1;18062:7;:21;18070:12;18062:21;;;;;;;;;;;:34;;:38;;;;18111:31;18129:12;18111:17;:31::i;:::-;18160:7;:21;18168:12;18160:21;;;;;;;;;;;;18153:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18202:12;;;;;;;;;;;:21;;;18224:11;18237:6;18202:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18202:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18202:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18202:42:0;;;;;;;;;;;;;;;;18194:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18289:52;18304:12;18318:7;18327:6;18335:5;;18289:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;;17207:1142;;;;;;;;:::o;10933:1132::-;11017:13;11045:17;11064:25;11091:24;11117:13;11132:23;11157:18;11177:16;11550:9;11596:20;;:::i;:::-;11227:42;11250:10;11262:6;11227:22;:42::i;:::-;11208:61;;;;;;;;11312:5;11298:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11298:20:0;;;;11280:38;;11360:5;11346:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11346:20:0;;;;11329:37;;11397:5;11386:17;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11386:17:0;;;;11377:26;;11444:5;11430:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11430:20:0;;;;11414:36;;11486:5;11472:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11472:20:0;;;;11461:31;;11526:5;11512:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11512:20:0;;;;11503:29;;11562:1;11550:13;;11545:403;11569:5;11565:1;:9;11545:403;;;11619:7;:19;11627:7;11635:1;11627:10;;;;;;;;;;;;;;;;;;11619:19;;;;;;;;;;;11596:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11674:6;:21;;;11653:15;11669:1;11653:18;;;;;;;;;;;;;;;;;:42;;;;;11730:6;:20;;;11710:14;11725:1;11710:17;;;;;;;;;;;;;;;;;:40;;;;;11778:6;:15;;;11777:16;11765:6;11772:1;11765:9;;;;;;;;;;;;;;;;;:28;;;;;;;;;;;11827:6;:19;;;11808:13;11822:1;11808:16;;;;;;;;;;;;;;;;;:38;;;;;11875:6;:14;;;11861:8;11870:1;11861:11;;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;11916:6;:18;;;11904:6;11911:1;11904:9;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;11576:3;;;;;;;11545:403;;;11968:5;11975:7;11984:15;12001:14;12017:6;12025:13;12040:8;12050:6;11960:97;;;;;;;;;;;;;;;;10933:1132;;;;;;;;;;;;;:::o;5375:242::-;5455:12;5481:9;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;5493:1;5481:13;;5476:136;5500:5;:12;5496:1;:16;5476:136;;;5532:36;5559:5;5565:1;5559:8;;;;;;;;;;;;;;;;;;5532:26;:36::i;:::-;5528:77;;;5591:4;5581:14;;5528:77;5514:3;;;;;;;5476:136;;;5375:242;;;;:::o;4901:230::-;4976:12;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;5001:9;:15;5011:4;5001:15;;;;;;;;;;;;;;;;;;;;;;;;;4997:129;;;5045:5;5027:9;:15;5037:4;5027:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;5064:31;5090:4;5064:31;;;;;;;;;;;;;;;;;;;;;;5114:4;5104:14;;4997:129;4901:230;;;:::o;924:105::-;980:4;1013:8;1004:17;;:5;;;;;;;;;;;:17;;;997:24;;924:105;;;:::o;12075:456::-;12169:13;12197:17;12216:21;12372:9;12269:42;12292:10;12304:6;12269:22;:42::i;:::-;12250:61;;;;;;;;12350:5;12336:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;12336:20:0;;;;12322:34;;12384:1;12372:13;;12367:110;12391:5;12387:1;:9;12367:110;;;12435:7;:19;12443:7;12451:1;12443:10;;;;;;;;;;;;;;;;;;12435:19;;;;;;;;;;;:30;;;12418:11;12430:1;12418:14;;;;;;;;;;;;;;;;;:47;;;;;12398:3;;;;;;;12367:110;;;12495:5;12502:7;12511:11;12487:36;;;;;;12075:456;;;;;;:::o;3062:95::-;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;2777:6;;;;;;;;;;;2769:15;;;;;;;;3125:5;3116:6;;:14;;;;;;;;;;;;;;;;;;3142:9;;;;;;;;;;3062:95::o;7990:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6793:47::-;6835:5;6793:47;:::o;2441:26::-;;;;;;;;;;;;;:::o;6521:44::-;6564:1;6521:44;:::o;6572:46::-;6615:3;6572:46;:::o;13233:911::-;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;13376:10;13388:12;8379:1;8359:22;;:8;:22;;;;8351:31;;;;;;;;8438:10;8401:47;;:7;:21;8409:12;8401:21;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;8393:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13421:14;6564:1;8705:9;:29;;:62;;;;;6615:3;8738:9;:29;;8705:62;8697:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8848:1;8843;8831:9;:13;;;;;;;;:18;8823:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13530:95;6835:5;13571:7;:21;13579:12;13571:21;;;;;;;;;;;:35;;;:53;13530:7;:21;13538:12;13530:21;;;;;;;;;;;:36;;;:40;;:95;;;;:::i;:::-;13456:53;6835:5;13476:14;:32;13456:15;:19;;:53;;;;:::i;:::-;:169;;13448:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13698:7;:21;13706:12;13698:21;;;;;;;;;;;:30;;;;;;;;;;;;13694:160;;;13769:7;:21;13777:12;13769:21;;;;;;;;;;;:35;;;13751:14;:53;;13743:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13694:160;13902:14;13864:7;:21;13872:12;13864:21;;;;;;;;;;;:35;;:52;;;;13966:15;13927:7;:21;13935:12;13927:21;;;;;;;;;;;:36;;:54;;;;14025:9;13992:7;:21;14000:12;13992:21;;;;;;;;;;;:30;;;:42;;;;;;;;;;;;;;;;;;14086:1;14045:7;:21;14053:12;14045:21;;;;;;;;;;;:38;;:42;;;;14098:38;14116:12;14130:5;;14098:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:38::i;:::-;8488:1;2631;;13233:911;;;;;:::o;3995:223::-;4065:12;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;4091:9;:15;4101:4;4091:15;;;;;;;;;;;;;;;;;;;;;;;;;4090:16;4086:127;;;4135:4;4117:9;:15;4127:4;4117:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;4153:29;4177:4;4153:29;;;;;;;;;;;;;;;;;;;;;;4201:4;4191:14;;4086:127;3995:223;;;:::o;12689:130::-;12762:9;12791:12;:20;12804:6;12791:20;;;;;;;;;;;;;;;12784:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12689:130;;;:::o;18516:107::-;18560:7;18587:12;;;;;;;;;;;:22;;;18610:4;18587:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18587:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18587:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18587:28:0;;;;;;;;;;;;;;;;18580:35;;18516:107;:::o;2882:93::-;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;2946:4;2937:6;;:13;;;;;;;;;;;;;;;;;;2962:7;;;;;;;;;;2882:93::o;10225:188::-;10311:13;10326:17;10363:42;10386:10;10398:6;10363:22;:42::i;:::-;10356:49;;;;10225:188;;;;;:::o;631:20::-;;;;;;;;;;;;;:::o;3487:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;7778:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15311:409::-;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;3758:9;:21;3768:10;3758:21;;;;;;;;;;;;;;;;;;;;;;;;;3750:30;;;;;;;;15456:10;15468:12;8379:1;8359:22;;:8;:22;;;;8351:31;;;;;;;;8438:10;8401:47;;:7;:21;8409:12;8401:21;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;8393:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15493:31;15511:12;15493:17;:31::i;:::-;15571:9;15535:7;:21;15543:12;15535:21;;;;;;;;;;;:33;;;:45;;;;;;;;;;;;;;;;;;15591:12;:23;15604:9;15591:23;;;;;;;;;;;;;;;15620:12;15591:42;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;15591:42:0;;;;;;;;;;;;;;;;;;;;;;15674:38;15692:12;15706:5;;15674:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:38::i;:::-;3787:1;;15311:409;;;;:::o;6687:43::-;6729:1;6687:43;:::o;16000:859::-;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;16103:10;16115:12;8379:1;8359:22;;:8;:22;;;;8351:31;;;;;;;;8438:10;8401:47;;:7;:21;8409:12;8401:21;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;8393:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16163:1;16148:12;:16;16140:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16231:7;:21;16239:12;16231:21;;;;;;;;;;;:30;;;;;;;;;;;;16230:31;16222:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16456:15;16357:95;6835:5;16398:7;:21;16406:12;16398:21;;;;;;;;;;;:35;;;:53;16357:7;:21;16365:12;16357:21;;;;;;;;;;;:36;;;:40;;:95;;;;:::i;:::-;:114;;16349:208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16618:1;16576:7;:21;16584:12;16576:21;;;;;;;;;;;:38;;;:43;16568:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16719:15;16678:7;:21;16686:12;16678:21;;;;;;;;;;;:38;;:56;;;;16750:101;16764:12;16778:7;:21;16786:12;16778:21;;;;;;;;;;;:29;;;;;;;;;;;;16809:7;:21;16817:12;16809:21;;;;;;;;;;;:34;;;16845:5;;16750:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;;16000:859;;;:::o;14544:352::-;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;14664:10;14676:12;8379:1;8359:22;;:8;:22;;;;8351:31;;;;;;;;8438:10;8401:47;;:7;:21;8409:12;8401:21;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;8393:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14751:1;14709:7;:21;14717:12;14709:21;;;;;;;;;;;:38;;;:43;14701:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14831:8;14799:7;:21;14807:12;14799:21;;;;;;;;;;;:29;;;:40;;;;;;;;;;;;;;;;;;;14850:38;14868:12;14882:5;;14850:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:38::i;:::-;2631:1;;14544:352;;;;:::o;4439:232::-;4514:12;4540:9;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;4552:1;4540:13;;4535:131;4559:5;:12;4555:1;:16;4535:131;;;4591:31;4613:5;4619:1;4613:8;;;;;;;;;;;;;;;;;;4591:21;:31::i;:::-;4587:72;;;4645:4;4635:14;;4587:72;4573:3;;;;;;;4535:131;;;4439:232;;;;:::o;19685:1055::-;19875:7;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;19850:14;6564:1;8705:9;:29;;:62;;;;;6615:3;8738:9;:29;;8705:62;8697:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8848:1;8843;8831:9;:13;;;;;;;;:18;8823:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6666:14;19903:7;:25;;19895:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6783:3;19973:12;:24;19986:10;19973:24;;;;;;;;;;;;;;;:31;;;;:52;;19965:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20088:12;;;;;;;;;;;:25;;;20114:10;20126:4;20132:7;20088:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20088:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20088:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20088:52:0;;;;;;;;;;;;;;;;20080:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20312:121;;;;;;;;;20319:8;20312:121;;;;;;;20329:7;20312:121;;;;20338:14;20312:121;;;;20354:15;20312:121;;;;20371:9;20312:121;;;;;;20382:1;20312:121;;;;20385:10;20312:121;;;;;;20397:15;20312:121;;;;20414:7;:10;20422:1;20414:10;;;;;;;;;;;:15;;;20312:121;;;;20431:1;20312:121;;;20289:7;:20;20297:11;;20289:20;;;;;;;;;;;:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20476:11;;20444:7;:24;20452:7;:10;20460:1;20452:10;;;;;;;;;;;:15;;;20444:24;;;;;;;;;;;:29;;:43;;;;20516:11;;20498:7;:10;20506:1;20498:10;;;;;;;;;;;:15;;:29;;;;20538:12;:24;20551:10;20538:24;;;;;;;;;;;;;;;20568:11;;20538:42;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;20538:42:0;;;;;;;;;;;;;;;;;;;;;;20591:11;;:13;;;;;;;;;;;;;20620:81;20646:1;20634:11;;:13;20649:8;20659:7;20668:14;20684:9;20695:5;;20620:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20731:1;20719:11;;:13;20712:20;;2631:1;19685:1055;;;;;;;;:::o;6625:55::-;6666:14;6625:55;:::o;817:99::-;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;899:9;891:5;;:17;;;;;;;;;;;;;;;;;;817:99;:::o;18794:84::-;18831:7;18858:12;;;;;;;;;;;18851:19;;18794:84;:::o;6739:47::-;6783:3;6739:47;:::o;1591:135::-;1643:4;1660:6;1673:1;1669;:5;1660:14;;1697:1;1692;:6;;1685:14;;;;;;1717:1;1710:8;;1591:135;;;;;:::o;20876:578::-;20943:13;21103:9;20959:7;:19;20967:10;20959:19;;;;;;;;;;;:31;;;;;;;;;;;;20943:47;;21038:1;21009:12;:19;21022:5;21009:19;;;;;;;;;;;;;;;:26;;;;:30;21001:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21115:1;21103:13;;21127:147;21138:12;:19;21151:5;21138:19;;;;;;;;;;;;;;;:26;;;;21134:1;:30;21127:147;;;21213:10;21187:12;:19;21200:5;21187:19;;;;;;;;;;;;;;;21207:1;21187:22;;;;;;;;;;;;;;;;;;:36;21184:79;;;21244:5;;21184:79;21166:3;;;;;;;21127:147;;;21284:124;21324:1;21295:12;:19;21308:5;21295:19;;;;;;;;;;;;;;;:26;;;;:30;21291:1;:34;21284:124;;;21370:12;:19;21383:5;21370:19;;;;;;;;;;;;;;;21394:1;21390;:5;21370:26;;;;;;;;;;;;;;;;;;21345:12;:19;21358:5;21345:19;;;;;;;;;;;;;;;21365:1;21345:22;;;;;;;;;;;;;;;;;:51;;;;21327:3;;;;;;;21284:124;;;21418:12;:19;21431:5;21418:19;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:::i;:::-;;20876:578;;;:::o;9417:800::-;9502:13;9517:17;9595:20;;:::i;:::-;9771:9;9565:1;9556:6;:10;:27;;;;;9579:4;9570:6;:13;9556:27;9547:37;;;;;;;;9618:7;:19;9626:10;9618:19;;;;;;;;;;;9595:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9670:1;9656:6;:11;;;:15;9648:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9753:6;9739:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9739:21:0;;;;9729:31;;9783:1;9771:13;;9804:1;9800:5;;9795:385;9811:6;9807:1;:10;9795:385;;;9839:154;9860:1;9846:6;:11;;;:15;:60;;;;;9905:1;9865:7;:20;9873:6;:11;;;9865:20;;;;;;;;;;;:37;;;:41;9846:60;9839:154;;;9949:7;:20;9957:6;:11;;;9949:20;;;;;;;;;;;9940:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9839:154;;;10026:1;10011:6;:11;;;:16;10007:79;;;10065:5;;10007:79;10113:6;:11;;;10100:7;10108:1;10100:10;;;;;;;;;;;;;;;;;:24;;;;;10148:7;:20;10156:6;:11;;;10148:20;;;;;;;;;;;10139:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9819:3;;;;;;;9795:385;;;10198:1;10201:7;10190:19;;;;9417:800;;;;;;;:::o;18945:252::-;19027:15;;:::i;:::-;19045:7;:21;19053:12;19045:21;;;;;;;;;;;19027:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19082:107;19096:12;19110:1;:9;;;19121:1;:15;;;19138:1;:16;;;19156:1;:10;;;19168:1;:13;;;19183:5;19082:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19082:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18945:252;;;:::o;5775:15682::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://70b08503648f3f587cc005b2109e5e13cc170fbaec9a9da2c254685b42476651
Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.