ETH Price: $3,158.32 (+2.86%)
Gas: 2 Gwei

Token

Caelum Token (CLM)
 

Overview

Max Total Supply

21,000,000 CLM

Holders

152

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
405.07416555 CLM

Value
$0.00
0x6696722c5cad75664a7dfe99fa2f9b0693c6de39
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:
CaelumToken

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-11-02
*/

pragma solidity 0.4.25;

library SafeMath {

    /**
     * @dev Multiplies two numbers, reverts on overflow.
     */
    function mul(uint256 _a, uint256 _b) internal pure returns(uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (_a == 0) {
            return 0;
        }

        uint256 c = _a * _b;
        require(c / _a == _b);

        return c;
    }

    /**
     * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 _a, uint256 _b) internal pure returns(uint256) {
        require(_b > 0); // Solidity only automatically asserts when dividing by 0
        uint256 c = _a / _b;
        // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 _a, uint256 _b) internal pure returns(uint256) {
        require(_b <= _a);
        uint256 c = _a - _b;

        return c;
    }

    /**
     * @dev Adds two numbers, reverts on overflow.
     */
    function add(uint256 _a, uint256 _b) internal pure returns(uint256) {
        uint256 c = _a + _b;
        require(c >= _a);

        return c;
    }

    /**
     * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns(uint256) {
        require(b != 0);
        return a % b;
    }
}

contract Ownable {
  address public owner;


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


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

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

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @dev Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

interface IRemoteFunctions {
  function _externalAddMasternode(address) external;
  function _externalStopMasternode(address) external;
  function isMasternodeOwner(address) external view returns (bool);
  function userHasActiveNodes(address) external view returns (bool);
}

interface ICaelumMasternode {
    function _externalArrangeFlow() external;
    function rewardsProofOfWork() external view returns (uint) ;
    function rewardsMasternode() external view returns (uint) ;
    function masternodeIDcounter() external view returns (uint) ;
    function masternodeCandidate() external view returns (uint) ; 
    function getUserFromID(uint) external view returns  (address) ;
    function userCounter() external view returns(uint);
    function contractProgress() external view returns (uint, uint, uint, uint, uint, uint, uint, uint);
}

contract ERC20Basic {
    function totalSupply() public view returns(uint256);

    function balanceOf(address _who) public view returns(uint256);

    function transfer(address _to, uint256 _value) public returns(bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
}

contract ERC20 is ERC20Basic {
    function allowance(address _owner, address _spender) public view returns(uint256);

    function transferFrom(address _from, address _to, uint256 _value) public returns(bool);

    function approve(address _spender, uint256 _value) public returns(bool);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

contract BasicToken is ERC20Basic {
    using SafeMath
    for uint256;

    mapping(address => uint256) internal balances;

    uint256 internal totalSupply_;

    /**
     * @dev Total number of tokens in existence
     */
    function totalSupply() public view returns(uint256) {
        return totalSupply_;
    }

    /**
     * @dev Transfer token for a specified address
     * @param _to The address to transfer to.
     * @param _value The amount to be transferred.
     */
    function transfer(address _to, uint256 _value) public returns(bool) {
        require(_value <= balances[msg.sender]);
        require(_to != address(0));

        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    /**
     * @dev Gets the balance of the specified address.
     * @param _owner The address to query the the balance of.
     * @return An uint256 representing the amount owned by the passed address.
     */
    function balanceOf(address _owner) public view returns(uint256) {
        return balances[_owner];
    }

}

contract StandardToken is ERC20, BasicToken {

    mapping(address => mapping(address => uint256)) internal allowed;


    /**
     * @dev Transfer tokens from one address to another
     * @param _from address The address which you want to send tokens from
     * @param _to address The address which you want to transfer to
     * @param _value uint256 the amount of tokens to be transferred
     */
    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    )
    public
    returns(bool) {
        require(_value <= balances[_from]);
        require(_value <= allowed[_from][msg.sender]);
        require(_to != address(0));

        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        emit Transfer(_from, _to, _value);
        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * Beware that changing an allowance with this method brings the risk that someone may use both the old
     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     * @param _spender The address which will spend the funds.
     * @param _value The amount of tokens to be spent.
     */
    function approve(address _spender, uint256 _value) public returns(bool) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param _owner address The address which owns the funds.
     * @param _spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(
        address _owner,
        address _spender
    )
    public
    view
    returns(uint256) {
        return allowed[_owner][_spender];
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     */
    function increaseApproval(
        address _spender,
        uint256 _addedValue
    )
    public
    returns(bool) {
        allowed[msg.sender][_spender] = (
            allowed[msg.sender][_spender].add(_addedValue));
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(
        address _spender,
        uint256 _subtractedValue
    )
    public
    returns(bool) {
        uint256 oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue >= oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

}

contract ERC20Interface {

    function totalSupply() public constant returns (uint);

    function balanceOf(address tokenOwner) public constant returns (uint balance);

    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);

    function transfer(address to, uint tokens) public returns (bool success);

    function approve(address spender, uint tokens) public returns (bool success);

    function transferFrom(address from, address to, uint tokens) public returns (bool success);


    event Transfer(address indexed from, address indexed to, uint tokens);

    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

}

contract InterfaceContracts is Ownable {
    InterfaceContracts public _internalMod;
    
    function setModifierContract (address _t) onlyOwner public {
        _internalMod = InterfaceContracts(_t);
    }

    modifier onlyMiningContract() {
      require(msg.sender == _internalMod._contract_miner(), "Wrong sender");
          _;
      }

    modifier onlyTokenContract() {
      require(msg.sender == _internalMod._contract_token(), "Wrong sender");
      _;
    }
    
    modifier onlyMasternodeContract() {
      require(msg.sender == _internalMod._contract_masternode(), "Wrong sender");
      _;
    }
    
    modifier onlyVotingOrOwner() {
      require(msg.sender == _internalMod._contract_voting() || msg.sender == owner, "Wrong sender");
      _;
    }
    
    modifier onlyVotingContract() {
      require(msg.sender == _internalMod._contract_voting() || msg.sender == owner, "Wrong sender");
      _;
    }
      
    function _contract_voting () public view returns (address) {
        return _internalMod._contract_voting();
    }
    
    function _contract_masternode () public view returns (address) {
        return _internalMod._contract_masternode();
    }
    
    function _contract_token () public view returns (address) {
        return _internalMod._contract_token();
    }
    
    function _contract_miner () public view returns (address) {
        return _internalMod._contract_miner();
    }
}

contract CaelumAcceptERC20  is InterfaceContracts {
    using SafeMath for uint;

    address[] public tokensList;
    bool setOwnContract = true;

    struct _whitelistTokens {
        address tokenAddress;
        bool active;
        uint requiredAmount;
        uint validUntil;
        uint timestamp;
    }

    mapping(address => mapping(address => uint)) public tokens;
    mapping(address => _whitelistTokens) acceptedTokens;

    event Deposit(address token, address user, uint amount, uint balance);
    event Withdraw(address token, address user, uint amount, uint balance);

    /**
     * @notice Allow the dev to set it's own token as accepted payment.
     * @dev Can be hardcoded in the constructor. Given the contract size, we decided to separate it.
     * @return bool
     */
    function addOwnToken() internal returns(bool) {
        require(setOwnContract);
        addToWhitelist(this, 5000 * 1e8, 36500);
        setOwnContract = false;
        return true;
    }


    /**
     * @notice Add a new token as accepted payment method.
     * @param _token Token contract address.
     * @param _amount Required amount of this Token as collateral
     * @param daysAllowed How many days will we accept this token?
     */
    function addToWhitelist(address _token, uint _amount, uint daysAllowed) internal {
        _whitelistTokens storage newToken = acceptedTokens[_token];
        newToken.tokenAddress = _token;
        newToken.requiredAmount = _amount;
        newToken.timestamp = now;
        newToken.validUntil = now + (daysAllowed * 1 days);
        newToken.active = true;

        tokensList.push(_token);
    }

    /**
     * @dev internal function to determine if we accept this token.
     * @param _ad Token contract address
     * @return bool
     */
    function isAcceptedToken(address _ad) internal view returns(bool) {
        return acceptedTokens[_ad].active;
    }

    /**
     * @dev internal function to determine the requiredAmount for a specific token.
     * @param _ad Token contract address
     * @return bool
     */
    function getAcceptedTokenAmount(address _ad) internal view returns(uint) {
        return acceptedTokens[_ad].requiredAmount;
    }

    /**
     * @dev internal function to determine if the token is still accepted timewise.
     * @param _ad Token contract address
     * @return bool
     */
    function isValid(address _ad) internal view returns(bool) {
        uint endTime = acceptedTokens[_ad].validUntil;
        if (block.timestamp < endTime) return true;
        return false;
    }

    /**
     * @notice Returns an array of all accepted token. You can get more details by calling getTokenDetails function with this address.
     * @return array Address
     */
    function listAcceptedTokens() public view returns(address[]) {
        return tokensList;
    }

    /**
     * @notice Returns a full list of the token details
     * @param token Token contract address
     */
    function getTokenDetails(address token) public view returns(address ad, uint required, bool active, uint valid) {
        return (acceptedTokens[token].tokenAddress, acceptedTokens[token].requiredAmount, acceptedTokens[token].active, acceptedTokens[token].validUntil);
    }

    /**
     * @notice Public function that allows any user to deposit accepted tokens as collateral to become a masternode.
     * @param token Token contract address
     * @param amount Amount to deposit
     */
    function depositCollateral(address token, uint amount) public {

        require(isAcceptedToken(token), "ERC20 not authorised"); // Should be a token from our list
        require(amount == getAcceptedTokenAmount(token)); // The amount needs to match our set amount
        require(isValid(token)); // It should be called within the setup timeframe


        tokens[token][msg.sender] = tokens[token][msg.sender].add(amount);
        emit Deposit(token, msg.sender, amount, tokens[token][msg.sender]);

        require(StandardToken(token).transferFrom(msg.sender, this, amount), "error with transfer");
        IRemoteFunctions(_contract_masternode())._externalAddMasternode(msg.sender);
    }

    /**
     * @notice Public function that allows any user to withdraw deposited tokens and stop as masternode
     * @param token Token contract address
     * @param amount Amount to withdraw
     */
    function withdrawCollateral(address token, uint amount) public {
        require(token != 0, "No token specified"); // token should be an actual address
        require(isAcceptedToken(token), "ERC20 not authorised"); // Should be a token from our list
        require(amount == getAcceptedTokenAmount(token)); // The amount needs to match our set amount, allow only one withdrawal at a time.
        uint amountToWithdraw = amount;

        tokens[token][msg.sender] = tokens[token][msg.sender] - amount;
        emit Withdraw(token, msg.sender, amountToWithdraw, amountToWithdraw);

        require(StandardToken(token).transfer(msg.sender, amountToWithdraw),"error with transfer");
        IRemoteFunctions(_contract_masternode())._externalStopMasternode(msg.sender);
    }

}

contract CaelumToken is CaelumAcceptERC20, StandardToken {
    using SafeMath for uint;

    ICaelumMasternode public masternodeInterface;

    bool public swapClosed = false;
    bool isOnTestNet = true;

    string public symbol = "CLM";
    string public name = "Caelum Token";
    uint8 public decimals = 8;
    uint256 public totalSupply = 2100000000000000;

    address allowedSwapAddress01 = 0x7600bF5112945F9F006c216d5d6db0df2806eDc6;
    address allowedSwapAddress02 = 0x16Da16948e5092A3D2aA71Aca7b57b8a9CFD8ddb;

    uint swapStartedBlock;

    mapping(address => uint) manualSwaps;
    mapping(address => bool) hasSwapped;

    event NewSwapRequest(address _swapper, uint _amount);
    event TokenSwapped(address _swapper, uint _amount);

    constructor() public {
        addOwnToken();
        swapStartedBlock = now;
    }

    /**
     * @dev Allow users to upgrade from our previous tokens.
     * For trust issues, addresses are hardcoded.
     * @param _token Token the user wants to swap.
     */
    function upgradeTokens(address _token) public {
        require(!hasSwapped[msg.sender], "User already swapped");
        require(now <= swapStartedBlock + 1 days, "Timeframe exipred, please use manualUpgradeTokens function");
        require(_token == allowedSwapAddress01 || _token == allowedSwapAddress02, "Token not allowed to swap.");

        uint amountToUpgrade = ERC20(_token).balanceOf(msg.sender);

        require(amountToUpgrade <= ERC20(_token).allowance(msg.sender, this));
        require(ERC20(_token).transferFrom(msg.sender, this, amountToUpgrade));
        require(ERC20(_token).balanceOf(msg.sender) == 0);

        tokens[_token][msg.sender] = tokens[_token][msg.sender].add(amountToUpgrade);
        balances[msg.sender] = balances[msg.sender].add(amountToUpgrade);

        emit Transfer(this, msg.sender, amountToUpgrade);
        emit TokenSwapped(msg.sender, amountToUpgrade);

        if(
          ERC20(allowedSwapAddress01).balanceOf(msg.sender) == 0  &&
          ERC20(allowedSwapAddress02).balanceOf(msg.sender) == 0
        ) {
          hasSwapped[msg.sender] = true;
        }

    }

    /**
     * @dev Allow users to upgrade manualy from our previous tokens.
     * For trust issues, addresses are hardcoded.
     * Used when a user failed to swap in time.
     * Dev should manually verify the origin of these tokens before allowing it.
     * @param _token Token the user wants to swap.
     */
    function manualUpgradeTokens(address _token) public {
        require(!hasSwapped[msg.sender], "User already swapped");
        require(now >= swapStartedBlock + 1 days, "Timeframe incorrect");
        require(_token == allowedSwapAddress01 || _token == allowedSwapAddress02, "Token not allowed to swap.");

        uint amountToUpgrade = ERC20(_token).balanceOf(msg.sender);
        require(amountToUpgrade <= ERC20(_token).allowance(msg.sender, this));

        if (ERC20(_token).transferFrom(msg.sender, this, amountToUpgrade)) {
            require(ERC20(_token).balanceOf(msg.sender) == 0);
            if(
              ERC20(allowedSwapAddress01).balanceOf(msg.sender) == 0  &&
              ERC20(allowedSwapAddress02).balanceOf(msg.sender) == 0
            ) {
              hasSwapped[msg.sender] = true;
            }

            tokens[_token][msg.sender] = tokens[_token][msg.sender].add(amountToUpgrade);
            manualSwaps[msg.sender] = amountToUpgrade;
            emit NewSwapRequest(msg.sender, amountToUpgrade);
        }
    }

    /**
     * @dev Allow users to partially upgrade manualy from our previous tokens.
     * For trust issues, addresses are hardcoded.
     * Used when a user failed to swap in time.
     * Dev should manually verify the origin of these tokens before allowing it.
     * @param _token Token the user wants to swap.
     */
    function manualUpgradePartialTokens(address _token, uint _amount) public {
        require(!hasSwapped[msg.sender], "User already swapped");
        require(now >= swapStartedBlock + 1 days, "Timeframe incorrect");
        require(_token == allowedSwapAddress01 || _token == allowedSwapAddress02, "Token not allowed to swap.");

        uint amountToUpgrade = _amount; //ERC20(_token).balanceOf(msg.sender);
        require(amountToUpgrade <= ERC20(_token).allowance(msg.sender, this));

        uint newBalance = ERC20(_token).balanceOf(msg.sender) - (amountToUpgrade);
        if (ERC20(_token).transferFrom(msg.sender, this, amountToUpgrade)) {

            require(ERC20(_token).balanceOf(msg.sender) == newBalance, "Balance error.");

            if(
              ERC20(allowedSwapAddress01).balanceOf(msg.sender) == 0  &&
              ERC20(allowedSwapAddress02).balanceOf(msg.sender) == 0
            ) {
              hasSwapped[msg.sender] = true;
            }

            tokens[_token][msg.sender] = tokens[_token][msg.sender].add(amountToUpgrade);
            manualSwaps[msg.sender] = amountToUpgrade;
            emit NewSwapRequest(msg.sender, amountToUpgrade);
        }
    }

    /**
     * @dev Due to some bugs in the previous contracts, a handfull of users will
     * be unable to fully withdraw their masternodes. Owner can replace those tokens
     * who are forever locked up in the old contract with new ones.
     */
     function getLockedTokens(address _contract, address _holder) public view returns(uint) {
         return CaelumAcceptERC20(_contract).tokens(_contract, _holder);
     }

    /**
     * @dev Approve a request for manual token swaps
     * @param _holder Holder The user who requests a swap.
     */
    function approveManualUpgrade(address _holder) onlyOwner public {
        balances[_holder] = balances[_holder].add(manualSwaps[_holder]);
        emit Transfer(this, _holder, manualSwaps[_holder]);
    }

    /**
     * @dev Decline a request for manual token swaps
     * @param _holder Holder The user who requests a swap.
     */
    function declineManualUpgrade(address _token, address _holder) onlyOwner public {
        require(ERC20(_token).transfer(_holder, manualSwaps[_holder]));
        tokens[_token][_holder] = tokens[_token][_holder] - manualSwaps[_holder];
        delete manualSwaps[_holder];
        delete hasSwapped[_holder];
    }

    /**
     * @dev Due to some bugs in the previous contracts, a handfull of users will
     * be unable to fully withdraw their masternodes. Owner can replace those tokens
     * who are forever locked up in the old contract with new ones.
     */
     function replaceLockedTokens(address _contract, address _holder) onlyOwner public {
         uint amountLocked = getLockedTokens(_contract, _holder);
         balances[_holder] = balances[_holder].add(amountLocked);
         emit Transfer(this, _holder, amountLocked);
         hasSwapped[msg.sender] = true;
     }

    /**
     * @dev Used to grant the mining contract rights to reward users.
     * As our contracts are separate, we call this function with modifier onlyMiningContract to sent out rewards.
     * @param _receiver Who receives the mining reward.
     * @param _amount What amount to reward.
     */
    function rewardExternal(address _receiver, uint _amount) onlyMiningContract public {
        balances[_receiver] = balances[_receiver].add(_amount);
        emit Transfer(this, _receiver, _amount);
    }

    /**
     * @dev We allow the masternodecontract to add tokens to our whitelist. By this approach,
     * we can move all voting logic to a contract that can be upgraden when needed.
     */
    function addToWhitelistExternal(address _token, uint _amount, uint daysAllowed) onlyMasternodeContract public {
        addToWhitelist( _token, _amount, daysAllowed);
    }

    /**
     * @dev Fetch data from the actual reward. We do this to prevent pools payout out
     * the global reward instead of the calculated ones.
     * By default, pools fetch the `getMiningReward()` value and will payout this amount.
     */
    function getMiningRewardForPool() public view returns(uint) {
        return masternodeInterface.rewardsProofOfWork();
    }

    /**
     * @dev Return the Proof of Work reward from the masternode contract.
     */
    function rewardsProofOfWork() public view returns(uint) {
        return masternodeInterface.rewardsProofOfWork();
    }

    /**
     * @dev Return the masternode reward from the masternode contract.
     */
    function rewardsMasternode() public view returns(uint) {
        return masternodeInterface.rewardsMasternode();
    }

    /**
     * @dev Return the number of masternodes from the masternode contract.
     */
    function masternodeCounter() public view returns(uint) {
        return masternodeInterface.userCounter();
    }

    /**
     * @dev Return the general state from the masternode contract.
     */
    function contractProgress() public view returns
    (
        uint epoch,
        uint candidate,
        uint round,
        uint miningepoch,
        uint globalreward,
        uint powreward,
        uint masternodereward,
        uint usercounter
    )
    {
        return ICaelumMasternode(_contract_masternode()).contractProgress();

    }

    /**
     * @dev pull new masternode contract from the modifier contract
     */
    function setMasternodeContract() internal  {
        masternodeInterface = ICaelumMasternode(_contract_masternode());
    }

    /**
     * Override; For some reason, truffle testing does not recognize function.
     * Remove before live?
     */
    function setModifierContract (address _contract) onlyOwner public {
        require (now <= swapStartedBlock + 10 days);
        _internalMod = InterfaceContracts(_contract);
        setMasternodeContract();
    }

    /**
    * @dev Move the voting away from token. All votes will be made from the voting
    */
    function VoteModifierContract (address _contract) onlyVotingContract external {
        //_internalMod = CaelumModifierAbstract(_contract);
        _internalMod = InterfaceContracts(_contract);
        setMasternodeContract();
    }
    
    /**
     * Owner can transfer out any accidentally sent ERC20 tokens
     */
    function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) {
        return ERC20Interface(tokenAddress).transfer(owner, tokens);
    }

    /**
     * @dev Needed for testnet only. Comment codeblock out before deploy, leave it as example.
     */
    /** 
    function setSwap(address _contract, address _contract_2) onlyOwner public {
        require (isOnTestNet == true);
        allowedSwapAddress01 = _contract;
        allowedSwapAddress02 = _contract_2;
    }
    */


}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMiningRewardForPool","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_contract_miner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"masternodeInterface","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"VoteModifierContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardsProofOfWork","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"setModifierContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_holder","type":"address"}],"name":"declineManualUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawCollateral","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"manualUpgradePartialTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokensList","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"tokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver","type":"address"},{"name":"_amount","type":"uint256"}],"name":"rewardExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractProgress","outputs":[{"name":"epoch","type":"uint256"},{"name":"candidate","type":"uint256"},{"name":"round","type":"uint256"},{"name":"miningepoch","type":"uint256"},{"name":"globalreward","type":"uint256"},{"name":"powreward","type":"uint256"},{"name":"masternodereward","type":"uint256"},{"name":"usercounter","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"swapClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_contract_voting","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"},{"name":"daysAllowed","type":"uint256"}],"name":"addToWhitelistExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"listAcceptedTokens","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"getTokenDetails","outputs":[{"name":"ad","type":"address"},{"name":"required","type":"uint256"},{"name":"active","type":"bool"},{"name":"valid","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":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"upgradeTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"depositCollateral","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"manualUpgradeTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_contract","type":"address"},{"name":"_holder","type":"address"}],"name":"getLockedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_contract_masternode","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_contract_token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_internalMod","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"masternodeCounter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"},{"name":"_holder","type":"address"}],"name":"replaceLockedTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"}],"name":"approveManualUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardsMasternode","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"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_swapper","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"NewSwapRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_swapper","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokenSwapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6003805460ff191660011781556009805460a060020a61ffff021916750100000000000000000000000000000000000000000017905560c060405260808190527f434c4d000000000000000000000000000000000000000000000000000000000060a09081526200007491600a919062000245565b5060408051808201909152600c8082527f4361656c756d20546f6b656e00000000000000000000000000000000000000006020909201918252620000bb91600b9162000245565b50600c805460ff19166008179055660775f05a074000600d55600e8054600160a060020a0319908116737600bf5112945f9f006c216d5d6db0df2806edc617909155600f80549091167316da16948e5092a3d2aa71aca7b57b8a9cfd8ddb1790553480156200012957600080fd5b5060008054600160a060020a031916331790556200014f6401000000006200015a810204565b5042601055620002e7565b60035460009060ff1615156200016f57600080fd5b6200018c3064746a528800618e946401000000006200019d810204565b506003805460ff1916905560015b90565b600160a060020a039092166000818152600560205260408120805460018083019590955542600383018190556201518090960290950160028083019190915560a060020a60ff0219600160a060020a031996871685171674010000000000000000000000000000000000000000179091558054938401815590527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054909216179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200028857805160ff1916838001178555620002b8565b82800160010185558215620002b8579182015b82811115620002b85782518255916020019190600101906200029b565b50620002c6929150620002ca565b5090565b6200019a91905b80821115620002c65760008155600101620002d1565b61325e80620002f76000396000f3006080604052600436106102005763ffffffff60e060020a60003504166306fdde038114610205578063095ea7b31461028f5780630b2cb8a3146102c75780630de33210146102ee5780630e7b2f311461031f5780630ecf42531461033457806318160ddd146103575780631ad93a9b146102c75780631dfb396f1461036c57806323b872dd1461038d5780632ce85ad8146103b7578063313ce567146103de578063350c35e91461040957806342aef49d1461042d5780634d12e34e14610451578063508493bc146104695780636618846314610490578063680d5762146104b457806370a08231146104d8578063715018a6146104f95780637558d81e1461050e5780637d33bf541461056457806381ae8d861461057957806385ae7b2c1461058e5780638843c1ba146105b557806388aa8bee1461061a5780638da5cb5b1461066b57806395d89b4114610680578063a1c5032914610695578063a5d5db0c146106b6578063a88a7b46146106da578063a9059cbb146106fb578063a95bede41461071f578063aad5b4ae14610746578063be550be41461075b578063c28b294714610770578063c722cf4c14610785578063c7c811b21461079a578063d73dd623146107c1578063dc39d06d146107e5578063dd62ed3e14610809578063e114187614610830578063e1eca32714610851578063f2fde38b14610866575b600080fd5b34801561021157600080fd5b5061021a610887565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025457818101518382015260200161023c565b50505050905090810190601f1680156102815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029b57600080fd5b506102b3600160a060020a0360043516602435610915565b604080519115158252519081900360200190f35b3480156102d357600080fd5b506102dc61097b565b60408051918252519081900360200190f35b3480156102fa57600080fd5b50610303610a0b565b60408051600160a060020a039092168252519081900360200190f35b34801561032b57600080fd5b50610303610a6a565b34801561034057600080fd5b50610355600160a060020a0360043516610a79565b005b34801561036357600080fd5b506102dc610ba1565b34801561037857600080fd5b50610355600160a060020a0360043516610ba7565b34801561039957600080fd5b506102b3600160a060020a0360043581169060243516604435610bd2565b3480156103c357600080fd5b50610355600160a060020a0360043581169060243516610d37565b3480156103ea57600080fd5b506103f3610e4d565b6040805160ff9092168252519081900360200190f35b34801561041557600080fd5b50610355600160a060020a0360043516602435610e56565b34801561043957600080fd5b50610355600160a060020a0360043516602435611109565b34801561045d57600080fd5b50610303600435611693565b34801561047557600080fd5b506102dc600160a060020a03600435811690602435166116bb565b34801561049c57600080fd5b506102b3600160a060020a03600435166024356116d8565b3480156104c057600080fd5b50610355600160a060020a03600435166024356117c7565b3480156104e457600080fd5b506102dc600160a060020a0360043516611915565b34801561050557600080fd5b50610355611930565b34801561051a57600080fd5b5061052361199c565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561057057600080fd5b506102b3611a58565b34801561058557600080fd5b50610303611a79565b34801561059a57600080fd5b50610355600160a060020a0360043516602435604435611ad8565b3480156105c157600080fd5b506105ca611bc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106065781810151838201526020016105ee565b505050509050019250505060405180910390f35b34801561062657600080fd5b5061063b600160a060020a0360043516611c28565b60408051600160a060020a0390951685526020850193909352901515838301526060830152519081900360800190f35b34801561067757600080fd5b50610303611c73565b34801561068c57600080fd5b5061021a611c82565b3480156106a157600080fd5b50610355600160a060020a0360043516611cdd565b3480156106c257600080fd5b50610355600160a060020a036004351660243561227f565b3480156106e657600080fd5b50610355600160a060020a0360043516612501565b34801561070757600080fd5b506102b3600160a060020a0360043516602435612a2f565b34801561072b57600080fd5b506102dc600160a060020a0360043581169060243516612afe565b34801561075257600080fd5b50610303612b9e565b34801561076757600080fd5b50610303612bfd565b34801561077c57600080fd5b50610303612c5c565b34801561079157600080fd5b506102dc612c6b565b3480156107a657600080fd5b50610355600160a060020a0360043581169060243516612cca565b3480156107cd57600080fd5b506102b3600160a060020a0360043516602435612d7a565b3480156107f157600080fd5b506102b3600160a060020a0360043516602435612e13565b34801561081557600080fd5b506102dc600160a060020a0360043581169060243516612e9b565b34801561083c57600080fd5b50610355600160a060020a0360043516612ec6565b34801561085d57600080fd5b506102dc612f60565b34801561087257600080fd5b50610355600160a060020a0360043516612fbf565b600b805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b505050505081565b336000818152600860209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b600954604080517f1ad93a9b0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691631ad93a9b91600480830192602092919082900301818787803b1580156109da57600080fd5b505af11580156109ee573d6000803e3d6000fd5b505050506040513d6020811015610a0457600080fd5b5051905090565b600154604080517f0de332100000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691630de3321091600480830192602092919082900301818787803b1580156109da57600080fd5b600954600160a060020a031681565b600160009054906101000a9004600160a060020a0316600160a060020a03166381ae8d866040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610acc57600080fd5b505af1158015610ae0573d6000803e3d6000fd5b505050506040513d6020811015610af657600080fd5b5051600160a060020a0316331480610b185750600054600160a060020a031633145b1515610b6e576040805160e560020a62461bcd02815260206004820152600c60248201527f57726f6e672073656e6465720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038316179055610b9e612fdf565b50565b600d5481565b600054600160a060020a03163314610bbe57600080fd5b601054620d2f0001421115610b6e57600080fd5b600160a060020a038316600090815260066020526040812054821115610bf757600080fd5b600160a060020a0384166000908152600860209081526040808320338452909152902054821115610c2757600080fd5b600160a060020a0383161515610c3c57600080fd5b600160a060020a038416600090815260066020526040902054610c65908363ffffffff61301616565b600160a060020a038086166000908152600660205260408082209390935590851681522054610c9a908363ffffffff61302d16565b600160a060020a038085166000908152600660209081526040808320949094559187168152600882528281203382529091522054610cde908363ffffffff61301616565b600160a060020a0380861660008181526008602090815260408083203384528252918290209490945580518681529051928716939192600080516020613213833981519152929181900390910190a35060019392505050565b600054600160a060020a03163314610d4e57600080fd5b600160a060020a0381811660008181526011602090815260408083205481517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101959095526024850152519386169363a9059cbb93604480820194918390030190829087803b158015610dc557600080fd5b505af1158015610dd9573d6000803e3d6000fd5b505050506040513d6020811015610def57600080fd5b50511515610dfc57600080fd5b600160a060020a03908116600081815260116020908152604080832080549690951683526004825280832093835292815282822080549590950390945591829055601290925220805460ff19169055565b600c5460ff1681565b6000600160a060020a0383161515610eb8576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f20746f6b656e207370656369666965640000000000000000000000000000604482015290519081900360640190fd5b610ec183613046565b1515610f17576040805160e560020a62461bcd02815260206004820152601460248201527f4552433230206e6f7420617574686f7269736564000000000000000000000000604482015290519081900360640190fd5b610f208361307c565b8214610f2b57600080fd5b50600160a060020a0382166000818152600460209081526040808320338085529083529281902080548690039055805193845290830191909152818101839052606082018390525182917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567919081900360800190a1604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051600160a060020a0385169163a9059cbb9160448083019260209291908290030181600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b505050506040513d602081101561103257600080fd5b5051151561108a576040805160e560020a62461bcd02815260206004820152601360248201527f6572726f722077697468207472616e7366657200000000000000000000000000604482015290519081900360640190fd5b611092612b9e565b600160a060020a031663c56280b1336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1580156110ec57600080fd5b505af1158015611100573d6000803e3d6000fd5b50505050505050565b33600090815260126020526040812054819060ff1615611173576040805160e560020a62461bcd02815260206004820152601460248201527f5573657220616c72656164792073776170706564000000000000000000000000604482015290519081900360640190fd5b60105462015180014210156111d2576040805160e560020a62461bcd02815260206004820152601360248201527f54696d656672616d6520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b600e54600160a060020a03858116911614806111fb5750600f54600160a060020a038581169116145b1515611251576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e206e6f7420616c6c6f77656420746f20737761702e000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051849350600160a060020a0386169163dd62ed3e9160448083019260209291908290030181600087803b1580156112bb57600080fd5b505af11580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b50518211156112f357600080fd5b6040805160e060020a6370a0823102815233600482015290518391600160a060020a038716916370a08231916024808201926020929091908290030181600087803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b505050506040513d602081101561136b57600080fd5b50516040805160e060020a6323b872dd028152336004820152306024820152604481018690529051929091039250600160a060020a038616916323b872dd916064808201926020929091908290030181600087803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b505050506040513d60208110156113f657600080fd5b50511561168d576040805160e060020a6370a0823102815233600482015290518291600160a060020a038716916370a08231916024808201926020929091908290030181600087803b15801561144b57600080fd5b505af115801561145f573d6000803e3d6000fd5b505050506040513d602081101561147557600080fd5b5051146114cc576040805160e560020a62461bcd02815260206004820152600e60248201527f42616c616e6365206572726f722e000000000000000000000000000000000000604482015290519081900360640190fd5b600e546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b15801561151c57600080fd5b505af1158015611530573d6000803e3d6000fd5b505050506040513d602081101561154657600080fd5b50511580156115ce5750600f546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b505050506040513d60208110156115ca57600080fd5b5051155b156115ee57336000908152601260205260409020805460ff191660011790555b600160a060020a0384166000908152600460209081526040808320338452909152902054611622908363ffffffff61302d16565b600160a060020a0385166000908152600460209081526040808320338085529083528184209490945560118252918290208590558151928352820184905280517f773870998542487d493dab21355d6bf368d08d39e927b7ec1eecd3171707075e9281900390910190a15b50505050565b60028054829081106116a157fe5b600091825260209091200154600160a060020a0316905081565b600460209081526000928352604080842090915290825290205481565b336000908152600860209081526040808320600160a060020a038616845290915281205480831061172c57336000908152600860209081526040808320600160a060020a0388168452909152812055611761565b61173c818463ffffffff61301616565b336000908152600860209081526040808320600160a060020a03891684529091529020555b336000818152600860209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316630de332106040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561181a57600080fd5b505af115801561182e573d6000803e3d6000fd5b505050506040513d602081101561184457600080fd5b5051600160a060020a031633146118a5576040805160e560020a62461bcd02815260206004820152600c60248201527f57726f6e672073656e6465720000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382166000908152600660205260409020546118ce908263ffffffff61302d16565b600160a060020a0383166000818152600660209081526040918290209390935580518481529051919230926000805160206132138339815191529281900390910190a35050565b600160a060020a031660009081526006602052604090205490565b600054600160a060020a0316331461194757600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000806000806000806000806119b0612b9e565b600160a060020a0316637558d81e6040518163ffffffff1660e060020a02815260040161010060405180830381600087803b1580156119ee57600080fd5b505af1158015611a02573d6000803e3d6000fd5b505050506040513d610100811015611a1957600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e090970151959f949e50929c50909a509850965091945092509050565b60095474010000000000000000000000000000000000000000900460ff1681565b600154604080517f81ae8d860000000000000000000000000000000000000000000000000000000081529051600092600160a060020a0316916381ae8d8691600480830192602092919082900301818787803b1580156109da57600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a031663aad5b4ae6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2b57600080fd5b505af1158015611b3f573d6000803e3d6000fd5b505050506040513d6020811015611b5557600080fd5b5051600160a060020a03163314611bb6576040805160e560020a62461bcd02815260206004820152600c60248201527f57726f6e672073656e6465720000000000000000000000000000000000000000604482015290519081900360640190fd5b611bc183838361309a565b505050565b60606002805480602002602001604051908101604052809291908181526020018280548015611c1e57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611c00575b5050505050905090565b600160a060020a039081166000908152600560205260409020805460018201546002909201549281169391927401000000000000000000000000000000000000000090910460ff1691565b600054600160a060020a031681565b600a805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561090d5780601f106108e25761010080835404028352916020019161090d565b3360009081526012602052604081205460ff1615611d45576040805160e560020a62461bcd02815260206004820152601460248201527f5573657220616c72656164792073776170706564000000000000000000000000604482015290519081900360640190fd5b6010546201518001421115611dca576040805160e560020a62461bcd02815260206004820152603a60248201527f54696d656672616d6520657869707265642c20706c6561736520757365206d6160448201527f6e75616c55706772616465546f6b656e732066756e6374696f6e000000000000606482015290519081900360840190fd5b600e54600160a060020a0383811691161480611df35750600f54600160a060020a038381169116145b1515611e49576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e206e6f7420616c6c6f77656420746f20737761702e000000000000604482015290519081900360640190fd5b6040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015611e9457600080fd5b505af1158015611ea8573d6000803e3d6000fd5b505050506040513d6020811015611ebe57600080fd5b5051604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051919250600160a060020a0384169163dd62ed3e916044808201926020929091908290030181600087803b158015611f2b57600080fd5b505af1158015611f3f573d6000803e3d6000fd5b505050506040513d6020811015611f5557600080fd5b5051811115611f6357600080fd5b6040805160e060020a6323b872dd028152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b158015611fbb57600080fd5b505af1158015611fcf573d6000803e3d6000fd5b505050506040513d6020811015611fe557600080fd5b50511515611ff257600080fd5b6040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561203d57600080fd5b505af1158015612051573d6000803e3d6000fd5b505050506040513d602081101561206757600080fd5b50511561207357600080fd5b600160a060020a03821660009081526004602090815260408083203384529091529020546120a7908263ffffffff61302d16565b600160a060020a03831660009081526004602090815260408083203384528252808320939093556006905220546120e4908263ffffffff61302d16565b336000818152600660209081526040918290209390935580518481529051919230926000805160206132138339815191529281900390910190a3604080513381526020810183905281517f5cf069f6412972a6c15aa4f5d0a340bfc369c3118f4cf8960b568ffe7ae46213929181900390910190a1600e546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b1580156121a957600080fd5b505af11580156121bd573d6000803e3d6000fd5b505050506040513d60208110156121d357600080fd5b505115801561225b5750600f546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b15801561222d57600080fd5b505af1158015612241573d6000803e3d6000fd5b505050506040513d602081101561225757600080fd5b5051155b1561227b57336000908152601260205260409020805460ff191660011790555b5050565b61228882613046565b15156122de576040805160e560020a62461bcd02815260206004820152601460248201527f4552433230206e6f7420617574686f7269736564000000000000000000000000604482015290519081900360640190fd5b6122e78261307c565b81146122f257600080fd5b6122fb8261315d565b151561230657600080fd5b600160a060020a038216600090815260046020908152604080832033845290915290205461233a908263ffffffff61302d16565b600160a060020a03831660008181526004602090815260408083203380855290835292819020859055805193845290830191909152818101849052606082019290925290517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79181900360800190a16040805160e060020a6323b872dd028152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b15801561240157600080fd5b505af1158015612415573d6000803e3d6000fd5b505050506040513d602081101561242b57600080fd5b50511515612483576040805160e560020a62461bcd02815260206004820152601360248201527f6572726f722077697468207472616e7366657200000000000000000000000000604482015290519081900360640190fd5b61248b612b9e565b600160a060020a031663d230df6a336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1580156124e557600080fd5b505af11580156124f9573d6000803e3d6000fd5b505050505050565b3360009081526012602052604081205460ff1615612569576040805160e560020a62461bcd02815260206004820152601460248201527f5573657220616c72656164792073776170706564000000000000000000000000604482015290519081900360640190fd5b60105462015180014210156125c8576040805160e560020a62461bcd02815260206004820152601360248201527f54696d656672616d6520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b600e54600160a060020a03838116911614806125f15750600f54600160a060020a038381169116145b1515612647576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e206e6f7420616c6c6f77656420746f20737761702e000000000000604482015290519081900360640190fd5b6040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561269257600080fd5b505af11580156126a6573d6000803e3d6000fd5b505050506040513d60208110156126bc57600080fd5b5051604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051919250600160a060020a0384169163dd62ed3e916044808201926020929091908290030181600087803b15801561272957600080fd5b505af115801561273d573d6000803e3d6000fd5b505050506040513d602081101561275357600080fd5b505181111561276157600080fd5b6040805160e060020a6323b872dd028152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b1580156127b957600080fd5b505af11580156127cd573d6000803e3d6000fd5b505050506040513d60208110156127e357600080fd5b50511561227b576040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561283557600080fd5b505af1158015612849573d6000803e3d6000fd5b505050506040513d602081101561285f57600080fd5b50511561286b57600080fd5b600e546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b1580156128bb57600080fd5b505af11580156128cf573d6000803e3d6000fd5b505050506040513d60208110156128e557600080fd5b505115801561296d5750600f546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b15801561293f57600080fd5b505af1158015612953573d6000803e3d6000fd5b505050506040513d602081101561296957600080fd5b5051155b1561298d57336000908152601260205260409020805460ff191660011790555b600160a060020a03821660009081526004602090815260408083203384529091529020546129c1908263ffffffff61302d16565b600160a060020a0383166000908152600460209081526040808320338085529083528184209490945560118252918290208490558151928352820183905280517f773870998542487d493dab21355d6bf368d08d39e927b7ec1eecd3171707075e9281900390910190a15050565b33600090815260066020526040812054821115612a4b57600080fd5b600160a060020a0383161515612a6057600080fd5b33600090815260066020526040902054612a80908363ffffffff61301616565b3360009081526006602052604080822092909255600160a060020a03851681522054612ab2908363ffffffff61302d16565b600160a060020a0384166000818152600660209081526040918290209390935580518581529051919233926000805160206132138339815191529281900390910190a350600192915050565b604080517f508493bc000000000000000000000000000000000000000000000000000000008152600160a060020a0380851660048301819052908416602483015291516000929163508493bc91604480830192602092919082900301818787803b158015612b6b57600080fd5b505af1158015612b7f573d6000803e3d6000fd5b505050506040513d6020811015612b9557600080fd5b50519392505050565b600154604080517faad5b4ae0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163aad5b4ae91600480830192602092919082900301818787803b1580156109da57600080fd5b600154604080517fbe550be40000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163be550be491600480830192602092919082900301818787803b1580156109da57600080fd5b600154600160a060020a031681565b600954604080517ff0c37a590000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163f0c37a5991600480830192602092919082900301818787803b1580156109da57600080fd5b60008054600160a060020a03163314612ce257600080fd5b612cec8383612afe565b600160a060020a038316600090815260066020526040902054909150612d18908263ffffffff61302d16565b600160a060020a0383166000818152600660209081526040918290209390935580518481529051919230926000805160206132138339815191529281900390910190a35050336000908152601260205260409020805460ff1916600117905550565b336000908152600860209081526040808320600160a060020a0386168452909152812054612dae908363ffffffff61302d16565b336000818152600860209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60008054600160a060020a03163314612e2b57600080fd5b60008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810186905290519186169263a9059cbb926044808401936020939083900390910190829087803b158015612b6b57600080fd5b600160a060020a03918216600090815260086020908152604080832093909416825291909152205490565b600054600160a060020a03163314612edd57600080fd5b600160a060020a038116600090815260116020908152604080832054600690925290912054612f119163ffffffff61302d16565b600160a060020a0382166000818152600660209081526040808320949094556011815290839020548351908152925191923092600080516020613213833981519152929181900390910190a350565b600954604080517fe1eca3270000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163e1eca32791600480830192602092919082900301818787803b1580156109da57600080fd5b600054600160a060020a03163314612fd657600080fd5b610b9e81613195565b612fe7612b9e565b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000808383111561302657600080fd5b5050900390565b60008282018381101561303f57600080fd5b9392505050565b600160a060020a031660009081526005602052604090205474010000000000000000000000000000000000000000900460ff1690565b600160a060020a031660009081526005602052604090206001015490565b600160a060020a039092166000818152600560205260408120805460018083019590955542600383018190556201518090960290950160028083019190915574ff00000000000000000000000000000000000000001973ffffffffffffffffffffffffffffffffffffffff1996871685171674010000000000000000000000000000000000000000179091558054938401815590527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054909216179055565b600160a060020a0381166000908152600560205260408120600201544281111561318a576001915061318f565b600091505b50919050565b600160a060020a03811615156131aa57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820d01f7e94808b4cf074389050506cd19a9090847c642adffd59ac38dcdb351eb00029

Deployed Bytecode

0x6080604052600436106102005763ffffffff60e060020a60003504166306fdde038114610205578063095ea7b31461028f5780630b2cb8a3146102c75780630de33210146102ee5780630e7b2f311461031f5780630ecf42531461033457806318160ddd146103575780631ad93a9b146102c75780631dfb396f1461036c57806323b872dd1461038d5780632ce85ad8146103b7578063313ce567146103de578063350c35e91461040957806342aef49d1461042d5780634d12e34e14610451578063508493bc146104695780636618846314610490578063680d5762146104b457806370a08231146104d8578063715018a6146104f95780637558d81e1461050e5780637d33bf541461056457806381ae8d861461057957806385ae7b2c1461058e5780638843c1ba146105b557806388aa8bee1461061a5780638da5cb5b1461066b57806395d89b4114610680578063a1c5032914610695578063a5d5db0c146106b6578063a88a7b46146106da578063a9059cbb146106fb578063a95bede41461071f578063aad5b4ae14610746578063be550be41461075b578063c28b294714610770578063c722cf4c14610785578063c7c811b21461079a578063d73dd623146107c1578063dc39d06d146107e5578063dd62ed3e14610809578063e114187614610830578063e1eca32714610851578063f2fde38b14610866575b600080fd5b34801561021157600080fd5b5061021a610887565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025457818101518382015260200161023c565b50505050905090810190601f1680156102815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029b57600080fd5b506102b3600160a060020a0360043516602435610915565b604080519115158252519081900360200190f35b3480156102d357600080fd5b506102dc61097b565b60408051918252519081900360200190f35b3480156102fa57600080fd5b50610303610a0b565b60408051600160a060020a039092168252519081900360200190f35b34801561032b57600080fd5b50610303610a6a565b34801561034057600080fd5b50610355600160a060020a0360043516610a79565b005b34801561036357600080fd5b506102dc610ba1565b34801561037857600080fd5b50610355600160a060020a0360043516610ba7565b34801561039957600080fd5b506102b3600160a060020a0360043581169060243516604435610bd2565b3480156103c357600080fd5b50610355600160a060020a0360043581169060243516610d37565b3480156103ea57600080fd5b506103f3610e4d565b6040805160ff9092168252519081900360200190f35b34801561041557600080fd5b50610355600160a060020a0360043516602435610e56565b34801561043957600080fd5b50610355600160a060020a0360043516602435611109565b34801561045d57600080fd5b50610303600435611693565b34801561047557600080fd5b506102dc600160a060020a03600435811690602435166116bb565b34801561049c57600080fd5b506102b3600160a060020a03600435166024356116d8565b3480156104c057600080fd5b50610355600160a060020a03600435166024356117c7565b3480156104e457600080fd5b506102dc600160a060020a0360043516611915565b34801561050557600080fd5b50610355611930565b34801561051a57600080fd5b5061052361199c565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561057057600080fd5b506102b3611a58565b34801561058557600080fd5b50610303611a79565b34801561059a57600080fd5b50610355600160a060020a0360043516602435604435611ad8565b3480156105c157600080fd5b506105ca611bc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106065781810151838201526020016105ee565b505050509050019250505060405180910390f35b34801561062657600080fd5b5061063b600160a060020a0360043516611c28565b60408051600160a060020a0390951685526020850193909352901515838301526060830152519081900360800190f35b34801561067757600080fd5b50610303611c73565b34801561068c57600080fd5b5061021a611c82565b3480156106a157600080fd5b50610355600160a060020a0360043516611cdd565b3480156106c257600080fd5b50610355600160a060020a036004351660243561227f565b3480156106e657600080fd5b50610355600160a060020a0360043516612501565b34801561070757600080fd5b506102b3600160a060020a0360043516602435612a2f565b34801561072b57600080fd5b506102dc600160a060020a0360043581169060243516612afe565b34801561075257600080fd5b50610303612b9e565b34801561076757600080fd5b50610303612bfd565b34801561077c57600080fd5b50610303612c5c565b34801561079157600080fd5b506102dc612c6b565b3480156107a657600080fd5b50610355600160a060020a0360043581169060243516612cca565b3480156107cd57600080fd5b506102b3600160a060020a0360043516602435612d7a565b3480156107f157600080fd5b506102b3600160a060020a0360043516602435612e13565b34801561081557600080fd5b506102dc600160a060020a0360043581169060243516612e9b565b34801561083c57600080fd5b50610355600160a060020a0360043516612ec6565b34801561085d57600080fd5b506102dc612f60565b34801561087257600080fd5b50610355600160a060020a0360043516612fbf565b600b805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b505050505081565b336000818152600860209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b600954604080517f1ad93a9b0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691631ad93a9b91600480830192602092919082900301818787803b1580156109da57600080fd5b505af11580156109ee573d6000803e3d6000fd5b505050506040513d6020811015610a0457600080fd5b5051905090565b600154604080517f0de332100000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691630de3321091600480830192602092919082900301818787803b1580156109da57600080fd5b600954600160a060020a031681565b600160009054906101000a9004600160a060020a0316600160a060020a03166381ae8d866040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610acc57600080fd5b505af1158015610ae0573d6000803e3d6000fd5b505050506040513d6020811015610af657600080fd5b5051600160a060020a0316331480610b185750600054600160a060020a031633145b1515610b6e576040805160e560020a62461bcd02815260206004820152600c60248201527f57726f6e672073656e6465720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038316179055610b9e612fdf565b50565b600d5481565b600054600160a060020a03163314610bbe57600080fd5b601054620d2f0001421115610b6e57600080fd5b600160a060020a038316600090815260066020526040812054821115610bf757600080fd5b600160a060020a0384166000908152600860209081526040808320338452909152902054821115610c2757600080fd5b600160a060020a0383161515610c3c57600080fd5b600160a060020a038416600090815260066020526040902054610c65908363ffffffff61301616565b600160a060020a038086166000908152600660205260408082209390935590851681522054610c9a908363ffffffff61302d16565b600160a060020a038085166000908152600660209081526040808320949094559187168152600882528281203382529091522054610cde908363ffffffff61301616565b600160a060020a0380861660008181526008602090815260408083203384528252918290209490945580518681529051928716939192600080516020613213833981519152929181900390910190a35060019392505050565b600054600160a060020a03163314610d4e57600080fd5b600160a060020a0381811660008181526011602090815260408083205481517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101959095526024850152519386169363a9059cbb93604480820194918390030190829087803b158015610dc557600080fd5b505af1158015610dd9573d6000803e3d6000fd5b505050506040513d6020811015610def57600080fd5b50511515610dfc57600080fd5b600160a060020a03908116600081815260116020908152604080832080549690951683526004825280832093835292815282822080549590950390945591829055601290925220805460ff19169055565b600c5460ff1681565b6000600160a060020a0383161515610eb8576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f20746f6b656e207370656369666965640000000000000000000000000000604482015290519081900360640190fd5b610ec183613046565b1515610f17576040805160e560020a62461bcd02815260206004820152601460248201527f4552433230206e6f7420617574686f7269736564000000000000000000000000604482015290519081900360640190fd5b610f208361307c565b8214610f2b57600080fd5b50600160a060020a0382166000818152600460209081526040808320338085529083529281902080548690039055805193845290830191909152818101839052606082018390525182917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567919081900360800190a1604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051600160a060020a0385169163a9059cbb9160448083019260209291908290030181600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b505050506040513d602081101561103257600080fd5b5051151561108a576040805160e560020a62461bcd02815260206004820152601360248201527f6572726f722077697468207472616e7366657200000000000000000000000000604482015290519081900360640190fd5b611092612b9e565b600160a060020a031663c56280b1336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1580156110ec57600080fd5b505af1158015611100573d6000803e3d6000fd5b50505050505050565b33600090815260126020526040812054819060ff1615611173576040805160e560020a62461bcd02815260206004820152601460248201527f5573657220616c72656164792073776170706564000000000000000000000000604482015290519081900360640190fd5b60105462015180014210156111d2576040805160e560020a62461bcd02815260206004820152601360248201527f54696d656672616d6520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b600e54600160a060020a03858116911614806111fb5750600f54600160a060020a038581169116145b1515611251576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e206e6f7420616c6c6f77656420746f20737761702e000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051849350600160a060020a0386169163dd62ed3e9160448083019260209291908290030181600087803b1580156112bb57600080fd5b505af11580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b50518211156112f357600080fd5b6040805160e060020a6370a0823102815233600482015290518391600160a060020a038716916370a08231916024808201926020929091908290030181600087803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b505050506040513d602081101561136b57600080fd5b50516040805160e060020a6323b872dd028152336004820152306024820152604481018690529051929091039250600160a060020a038616916323b872dd916064808201926020929091908290030181600087803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b505050506040513d60208110156113f657600080fd5b50511561168d576040805160e060020a6370a0823102815233600482015290518291600160a060020a038716916370a08231916024808201926020929091908290030181600087803b15801561144b57600080fd5b505af115801561145f573d6000803e3d6000fd5b505050506040513d602081101561147557600080fd5b5051146114cc576040805160e560020a62461bcd02815260206004820152600e60248201527f42616c616e6365206572726f722e000000000000000000000000000000000000604482015290519081900360640190fd5b600e546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b15801561151c57600080fd5b505af1158015611530573d6000803e3d6000fd5b505050506040513d602081101561154657600080fd5b50511580156115ce5750600f546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b505050506040513d60208110156115ca57600080fd5b5051155b156115ee57336000908152601260205260409020805460ff191660011790555b600160a060020a0384166000908152600460209081526040808320338452909152902054611622908363ffffffff61302d16565b600160a060020a0385166000908152600460209081526040808320338085529083528184209490945560118252918290208590558151928352820184905280517f773870998542487d493dab21355d6bf368d08d39e927b7ec1eecd3171707075e9281900390910190a15b50505050565b60028054829081106116a157fe5b600091825260209091200154600160a060020a0316905081565b600460209081526000928352604080842090915290825290205481565b336000908152600860209081526040808320600160a060020a038616845290915281205480831061172c57336000908152600860209081526040808320600160a060020a0388168452909152812055611761565b61173c818463ffffffff61301616565b336000908152600860209081526040808320600160a060020a03891684529091529020555b336000818152600860209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316630de332106040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561181a57600080fd5b505af115801561182e573d6000803e3d6000fd5b505050506040513d602081101561184457600080fd5b5051600160a060020a031633146118a5576040805160e560020a62461bcd02815260206004820152600c60248201527f57726f6e672073656e6465720000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382166000908152600660205260409020546118ce908263ffffffff61302d16565b600160a060020a0383166000818152600660209081526040918290209390935580518481529051919230926000805160206132138339815191529281900390910190a35050565b600160a060020a031660009081526006602052604090205490565b600054600160a060020a0316331461194757600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000806000806000806000806119b0612b9e565b600160a060020a0316637558d81e6040518163ffffffff1660e060020a02815260040161010060405180830381600087803b1580156119ee57600080fd5b505af1158015611a02573d6000803e3d6000fd5b505050506040513d610100811015611a1957600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e090970151959f949e50929c50909a509850965091945092509050565b60095474010000000000000000000000000000000000000000900460ff1681565b600154604080517f81ae8d860000000000000000000000000000000000000000000000000000000081529051600092600160a060020a0316916381ae8d8691600480830192602092919082900301818787803b1580156109da57600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a031663aad5b4ae6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2b57600080fd5b505af1158015611b3f573d6000803e3d6000fd5b505050506040513d6020811015611b5557600080fd5b5051600160a060020a03163314611bb6576040805160e560020a62461bcd02815260206004820152600c60248201527f57726f6e672073656e6465720000000000000000000000000000000000000000604482015290519081900360640190fd5b611bc183838361309a565b505050565b60606002805480602002602001604051908101604052809291908181526020018280548015611c1e57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611c00575b5050505050905090565b600160a060020a039081166000908152600560205260409020805460018201546002909201549281169391927401000000000000000000000000000000000000000090910460ff1691565b600054600160a060020a031681565b600a805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561090d5780601f106108e25761010080835404028352916020019161090d565b3360009081526012602052604081205460ff1615611d45576040805160e560020a62461bcd02815260206004820152601460248201527f5573657220616c72656164792073776170706564000000000000000000000000604482015290519081900360640190fd5b6010546201518001421115611dca576040805160e560020a62461bcd02815260206004820152603a60248201527f54696d656672616d6520657869707265642c20706c6561736520757365206d6160448201527f6e75616c55706772616465546f6b656e732066756e6374696f6e000000000000606482015290519081900360840190fd5b600e54600160a060020a0383811691161480611df35750600f54600160a060020a038381169116145b1515611e49576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e206e6f7420616c6c6f77656420746f20737761702e000000000000604482015290519081900360640190fd5b6040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015611e9457600080fd5b505af1158015611ea8573d6000803e3d6000fd5b505050506040513d6020811015611ebe57600080fd5b5051604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051919250600160a060020a0384169163dd62ed3e916044808201926020929091908290030181600087803b158015611f2b57600080fd5b505af1158015611f3f573d6000803e3d6000fd5b505050506040513d6020811015611f5557600080fd5b5051811115611f6357600080fd5b6040805160e060020a6323b872dd028152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b158015611fbb57600080fd5b505af1158015611fcf573d6000803e3d6000fd5b505050506040513d6020811015611fe557600080fd5b50511515611ff257600080fd5b6040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561203d57600080fd5b505af1158015612051573d6000803e3d6000fd5b505050506040513d602081101561206757600080fd5b50511561207357600080fd5b600160a060020a03821660009081526004602090815260408083203384529091529020546120a7908263ffffffff61302d16565b600160a060020a03831660009081526004602090815260408083203384528252808320939093556006905220546120e4908263ffffffff61302d16565b336000818152600660209081526040918290209390935580518481529051919230926000805160206132138339815191529281900390910190a3604080513381526020810183905281517f5cf069f6412972a6c15aa4f5d0a340bfc369c3118f4cf8960b568ffe7ae46213929181900390910190a1600e546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b1580156121a957600080fd5b505af11580156121bd573d6000803e3d6000fd5b505050506040513d60208110156121d357600080fd5b505115801561225b5750600f546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b15801561222d57600080fd5b505af1158015612241573d6000803e3d6000fd5b505050506040513d602081101561225757600080fd5b5051155b1561227b57336000908152601260205260409020805460ff191660011790555b5050565b61228882613046565b15156122de576040805160e560020a62461bcd02815260206004820152601460248201527f4552433230206e6f7420617574686f7269736564000000000000000000000000604482015290519081900360640190fd5b6122e78261307c565b81146122f257600080fd5b6122fb8261315d565b151561230657600080fd5b600160a060020a038216600090815260046020908152604080832033845290915290205461233a908263ffffffff61302d16565b600160a060020a03831660008181526004602090815260408083203380855290835292819020859055805193845290830191909152818101849052606082019290925290517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79181900360800190a16040805160e060020a6323b872dd028152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b15801561240157600080fd5b505af1158015612415573d6000803e3d6000fd5b505050506040513d602081101561242b57600080fd5b50511515612483576040805160e560020a62461bcd02815260206004820152601360248201527f6572726f722077697468207472616e7366657200000000000000000000000000604482015290519081900360640190fd5b61248b612b9e565b600160a060020a031663d230df6a336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1580156124e557600080fd5b505af11580156124f9573d6000803e3d6000fd5b505050505050565b3360009081526012602052604081205460ff1615612569576040805160e560020a62461bcd02815260206004820152601460248201527f5573657220616c72656164792073776170706564000000000000000000000000604482015290519081900360640190fd5b60105462015180014210156125c8576040805160e560020a62461bcd02815260206004820152601360248201527f54696d656672616d6520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b600e54600160a060020a03838116911614806125f15750600f54600160a060020a038381169116145b1515612647576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e206e6f7420616c6c6f77656420746f20737761702e000000000000604482015290519081900360640190fd5b6040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561269257600080fd5b505af11580156126a6573d6000803e3d6000fd5b505050506040513d60208110156126bc57600080fd5b5051604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051919250600160a060020a0384169163dd62ed3e916044808201926020929091908290030181600087803b15801561272957600080fd5b505af115801561273d573d6000803e3d6000fd5b505050506040513d602081101561275357600080fd5b505181111561276157600080fd5b6040805160e060020a6323b872dd028152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b1580156127b957600080fd5b505af11580156127cd573d6000803e3d6000fd5b505050506040513d60208110156127e357600080fd5b50511561227b576040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561283557600080fd5b505af1158015612849573d6000803e3d6000fd5b505050506040513d602081101561285f57600080fd5b50511561286b57600080fd5b600e546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b1580156128bb57600080fd5b505af11580156128cf573d6000803e3d6000fd5b505050506040513d60208110156128e557600080fd5b505115801561296d5750600f546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b15801561293f57600080fd5b505af1158015612953573d6000803e3d6000fd5b505050506040513d602081101561296957600080fd5b5051155b1561298d57336000908152601260205260409020805460ff191660011790555b600160a060020a03821660009081526004602090815260408083203384529091529020546129c1908263ffffffff61302d16565b600160a060020a0383166000908152600460209081526040808320338085529083528184209490945560118252918290208490558151928352820183905280517f773870998542487d493dab21355d6bf368d08d39e927b7ec1eecd3171707075e9281900390910190a15050565b33600090815260066020526040812054821115612a4b57600080fd5b600160a060020a0383161515612a6057600080fd5b33600090815260066020526040902054612a80908363ffffffff61301616565b3360009081526006602052604080822092909255600160a060020a03851681522054612ab2908363ffffffff61302d16565b600160a060020a0384166000818152600660209081526040918290209390935580518581529051919233926000805160206132138339815191529281900390910190a350600192915050565b604080517f508493bc000000000000000000000000000000000000000000000000000000008152600160a060020a0380851660048301819052908416602483015291516000929163508493bc91604480830192602092919082900301818787803b158015612b6b57600080fd5b505af1158015612b7f573d6000803e3d6000fd5b505050506040513d6020811015612b9557600080fd5b50519392505050565b600154604080517faad5b4ae0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163aad5b4ae91600480830192602092919082900301818787803b1580156109da57600080fd5b600154604080517fbe550be40000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163be550be491600480830192602092919082900301818787803b1580156109da57600080fd5b600154600160a060020a031681565b600954604080517ff0c37a590000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163f0c37a5991600480830192602092919082900301818787803b1580156109da57600080fd5b60008054600160a060020a03163314612ce257600080fd5b612cec8383612afe565b600160a060020a038316600090815260066020526040902054909150612d18908263ffffffff61302d16565b600160a060020a0383166000818152600660209081526040918290209390935580518481529051919230926000805160206132138339815191529281900390910190a35050336000908152601260205260409020805460ff1916600117905550565b336000908152600860209081526040808320600160a060020a0386168452909152812054612dae908363ffffffff61302d16565b336000818152600860209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60008054600160a060020a03163314612e2b57600080fd5b60008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810186905290519186169263a9059cbb926044808401936020939083900390910190829087803b158015612b6b57600080fd5b600160a060020a03918216600090815260086020908152604080832093909416825291909152205490565b600054600160a060020a03163314612edd57600080fd5b600160a060020a038116600090815260116020908152604080832054600690925290912054612f119163ffffffff61302d16565b600160a060020a0382166000818152600660209081526040808320949094556011815290839020548351908152925191923092600080516020613213833981519152929181900390910190a350565b600954604080517fe1eca3270000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163e1eca32791600480830192602092919082900301818787803b1580156109da57600080fd5b600054600160a060020a03163314612fd657600080fd5b610b9e81613195565b612fe7612b9e565b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000808383111561302657600080fd5b5050900390565b60008282018381101561303f57600080fd5b9392505050565b600160a060020a031660009081526005602052604090205474010000000000000000000000000000000000000000900460ff1690565b600160a060020a031660009081526005602052604090206001015490565b600160a060020a039092166000818152600560205260408120805460018083019590955542600383018190556201518090960290950160028083019190915574ff00000000000000000000000000000000000000001973ffffffffffffffffffffffffffffffffffffffff1996871685171674010000000000000000000000000000000000000000179091558054938401815590527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054909216179055565b600160a060020a0381166000908152600560205260408120600201544281111561318a576001915061318f565b600091505b50919050565b600160a060020a03811615156131aa57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820d01f7e94808b4cf074389050506cd19a9090847c642adffd59ac38dcdb351eb00029

Swarm Source

bzzr://d01f7e94808b4cf074389050506cd19a9090847c642adffd59ac38dcdb351eb0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.