ETH Price: $2,403.61 (+3.41%)

Token

GigBit (GBTC)
 

Overview

Max Total Supply

772,861,080.805806250467043687 GBTC

Holders

1,490

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
34.3712296 GBTC

Value
$0.00
0x28ec2fd9f85fba72deb8b803aa73fffd48960ecd
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:
GigToken

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-04-16
*/

pragma solidity 0.4.19;


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


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


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

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

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

}


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) balances;

  uint256 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(_to != address(0));
    require(_value <= balances[msg.sender]);

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    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 balance) {
    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(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    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;
    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, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    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, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}


contract Multivest is Ownable {

    using SafeMath for uint256;

    /* public variables */
    mapping (address => bool) public allowedMultivests;

    /* events */
    event MultivestSet(address multivest);

    event MultivestUnset(address multivest);

    event Contribution(address holder, uint256 value, uint256 tokens);

    modifier onlyAllowedMultivests(address _addresss) {
        require(allowedMultivests[_addresss] == true);
        _;
    }

    /* constructor */
    function Multivest() public {}

    function setAllowedMultivest(address _address) public onlyOwner {
        allowedMultivests[_address] = true;
        MultivestSet(_address);
    }

    function unsetAllowedMultivest(address _address) public onlyOwner {
        allowedMultivests[_address] = false;
        MultivestUnset(_address);
    }

    function multivestBuy(address _address, uint256 _value) public onlyAllowedMultivests(msg.sender) {
        require(buy(_address, _value) == true);
    }

    function multivestBuy(
        address _address,
        uint8 _v,
        bytes32 _r,
        bytes32 _s
    ) public payable onlyAllowedMultivests(verify(keccak256(msg.sender), _v, _r, _s)) {
        require(_address == msg.sender && buy(msg.sender, msg.value) == true);
    }

    function verify(bytes32 _hash, uint8 _v, bytes32 _r, bytes32 _s) internal pure returns (address) {
        bytes memory prefix = "\x19Ethereum Signed Message:\n32";

        return ecrecover(keccak256(prefix, _hash), _v, _r, _s);
    }

    function buy(address _address, uint256 _value) internal returns (bool);

}


library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}


contract GigERC20 is StandardToken, Ownable {
    /* Public variables of the token */
    uint256 public creationBlock;

    uint8 public decimals;

    string public name;

    string public symbol;

    string public standard;

    bool public locked;

    /* Initializes contract with initial supply tokens to the creator of the contract */
    function GigERC20(
        uint256 _totalSupply,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transferAllSupplyToOwner,
        bool _locked
    ) public {
        standard = "ERC20 0.1";
        locked = _locked;
        totalSupply_ = _totalSupply;

        if (_transferAllSupplyToOwner) {
            balances[msg.sender] = totalSupply_;
        } else {
            balances[this] = totalSupply_;
        }
        name = _tokenName;
        // Set the name for display purposes
        symbol = _tokenSymbol;
        // Set the symbol for display purposes
        decimals = _decimalUnits;
        // Amount of decimals for display purposes
        creationBlock = block.number;
    }

    function setLocked(bool _locked) public onlyOwner {
        locked = _locked;
    }

    /* public methods */
    function transfer(address _to, uint256 _value) public returns (bool) {
        require(locked == false);
        return super.transfer(_to, _value);
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {
        if (locked) {
            return false;
        }
        return super.approve(_spender, _value);
    }

    function increaseApproval(address _spender, uint _addedValue) public returns (bool success) {
        if (locked) {
            return false;
        }
        return super.increaseApproval(_spender, _addedValue);
    }

    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool success) {
        if (locked) {
            return false;
        }
        return super.decreaseApproval(_spender, _subtractedValue);
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        if (locked) {
            return false;
        }

        return super.transferFrom(_from, _to, _value);
    }

}


/*
This contract manages the minters and the modifier to allow mint to happen only if called by minters
This contract contains basic minting functionality though
*/
contract MintingERC20 is GigERC20 {

    using SafeMath for uint256;

    //Variables
    mapping (address => bool) public minters;

    uint256 public maxSupply;

    //Modifiers
    modifier onlyMinters () {
        require(true == minters[msg.sender]);
        _;
    }

    function MintingERC20(
        uint256 _initialSupply,
        uint256 _maxSupply,
        string _tokenName,
        uint8 _decimals,
        string _symbol,
        bool _transferAllSupplyToOwner,
        bool _locked
    )
        public GigERC20(_initialSupply, _tokenName, _decimals, _symbol, _transferAllSupplyToOwner, _locked)
    {
        standard = "MintingERC20 0.1";
        minters[msg.sender] = true;
        maxSupply = _maxSupply;
    }

    function addMinter(address _newMinter) public onlyOwner {
        minters[_newMinter] = true;
    }

    function removeMinter(address _minter) public onlyOwner {
        minters[_minter] = false;
    }

    function mint(address _addr, uint256 _amount) public onlyMinters returns (uint256) {
        if (true == locked) {
            return uint256(0);
        }

        if (_amount == uint256(0)) {
            return uint256(0);
        }

        if (totalSupply_.add(_amount) > maxSupply) {
            return uint256(0);
        }

        totalSupply_ = totalSupply_.add(_amount);
        balances[_addr] = balances[_addr].add(_amount);
        Transfer(address(0), _addr, _amount);

        return _amount;
    }

}


contract GigToken is MintingERC20 {
    SellableToken public crowdSale; // Pre ICO & ICO
    SellableToken public privateSale;

    bool public transferFrozen = false;

    uint256 public crowdSaleEndTime;

    mapping(address => uint256) public lockedBalancesReleasedAfterOneYear;

    modifier onlyCrowdSale() {
        require(crowdSale != address(0) && msg.sender == address(crowdSale));

        _;
    }

    modifier onlySales() {
        require((privateSale != address(0) && msg.sender == address(privateSale)) ||
            (crowdSale != address(0) && msg.sender == address(crowdSale)));

        _;
    }

    event MaxSupplyBurned(uint256 burnedTokens);

    function GigToken(bool _locked) public
        MintingERC20(0, maxSupply, "GigBit", 18, "GBTC", false, _locked)
    {
        standard = "GBTC 0.1";

        maxSupply = uint256(1000000000).mul(uint256(10) ** decimals);
    }

    function setCrowdSale(address _crowdSale) public onlyOwner {
        require(_crowdSale != address(0));

        crowdSale = SellableToken(_crowdSale);

        crowdSaleEndTime = crowdSale.endTime();
    }

    function setPrivateSale(address _privateSale) public onlyOwner {
        require(_privateSale != address(0));

        privateSale = SellableToken(_privateSale);
    }

    function freezing(bool _transferFrozen) public onlyOwner {
        transferFrozen = _transferFrozen;
    }

    function isTransferAllowed(address _from, uint256 _value) public view returns (bool status) {
        uint256 senderBalance = balanceOf(_from);
        if (transferFrozen == true || senderBalance < _value) {
            return false;
        }

        uint256 lockedBalance = lockedBalancesReleasedAfterOneYear[_from];

        // check if holder tries to transfer more than locked tokens
    if (lockedBalance > 0 && senderBalance.sub(_value) < lockedBalance) {
            uint256 unlockTime = crowdSaleEndTime + 1 years;

            // fail if unlock time is not come
            if (crowdSaleEndTime == 0 || block.timestamp < unlockTime) {
                return false;
            }

            uint256 secsFromUnlock = block.timestamp.sub(unlockTime);

            // number of months over from unlock
            uint256 months = secsFromUnlock / 30 days;

            if (months > 12) {
                months = 12;
            }

            uint256 tokensPerMonth = lockedBalance / 12;

            uint256 unlockedBalance = tokensPerMonth.mul(months);

            uint256 actualLockedBalance = lockedBalance.sub(unlockedBalance);

            if (senderBalance.sub(_value) < actualLockedBalance) {
                return false;
            }
        }

        if (block.timestamp < crowdSaleEndTime &&
            crowdSale != address(0) &&
            crowdSale.isTransferAllowed(_from, _value) == false
        ) {
            return false;
        }


        return true;
    }

    function transfer(address _to, uint _value) public returns (bool) {
        require(isTransferAllowed(msg.sender, _value));

        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint _value) public returns (bool success) {
        // transferFrom & approve are disabled before end of ICO
        require((crowdSaleEndTime <= block.timestamp) && isTransferAllowed(_from, _value));

        return super.transferFrom(_from, _to, _value);
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {
        // transferFrom & approve are disabled before end of ICO

        require(crowdSaleEndTime <= block.timestamp);

        return super.approve(_spender, _value);
    }

    function increaseApproval(address _spender, uint _addedValue) public returns (bool success) {
        // transferFrom & approve are disabled before end of ICO

        require(crowdSaleEndTime <= block.timestamp);

        return super.increaseApproval(_spender, _addedValue);
    }

    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool success) {
        // transferFrom & approve are disabled before end of ICO

        require(crowdSaleEndTime <= block.timestamp);

        return super.decreaseApproval(_spender, _subtractedValue);
    }

    function increaseLockedBalance(address _address, uint256 _tokens) public onlySales {
        lockedBalancesReleasedAfterOneYear[_address] =
            lockedBalancesReleasedAfterOneYear[_address].add(_tokens);
    }

    // burn tokens if soft cap is not reached
    function burnInvestorTokens(
        address _address,
        uint256 _amount
    ) public onlyCrowdSale returns (uint256) {
        require(block.timestamp > crowdSaleEndTime);

        require(_amount <= balances[_address]);

        balances[_address] = balances[_address].sub(_amount);

        totalSupply_ = totalSupply_.sub(_amount);

        Transfer(_address, address(0), _amount);

        return _amount;
    }

    // decrease max supply of tokens that are not sold
    function burnUnsoldTokens(uint256 _amount) public onlyCrowdSale {
        require(block.timestamp > crowdSaleEndTime);

        maxSupply = maxSupply.sub(_amount);

        MaxSupplyBurned(_amount);
    }
}

contract SellableToken is Multivest {
    uint256 public constant MONTH_IN_SEC = 2629743;
    GigToken public token;

    uint256 public minPurchase = 100 * 10 ** 5;
    uint256 public maxPurchase;

    uint256 public softCap;
    uint256 public hardCap;

    uint256 public startTime;
    uint256 public endTime;

    uint256 public maxTokenSupply;

    uint256 public soldTokens;

    uint256 public collectedEthers;

    address public etherHolder;

    uint256 public collectedUSD;

    uint256 public etherPriceInUSD;
    uint256 public priceUpdateAt;

    mapping(address => uint256) public etherBalances;

    Tier[] public tiers;

    struct Tier {
        uint256 discount;
        uint256 startTime;
        uint256 endTime;
    }

    event Refund(address _holder, uint256 _ethers, uint256 _tokens);
    event NewPriceTicker(string _price);

    function SellableToken(
        address _token,
        address _etherHolder,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _maxTokenSupply,
        uint256 _etherPriceInUSD
    )
    public Multivest()
    {
        require(_token != address(0) && _etherHolder != address(0));
        token = GigToken(_token);

        require(_startTime < _endTime);
        etherHolder = _etherHolder;
        require((_maxTokenSupply == uint256(0)) || (_maxTokenSupply <= token.maxSupply()));

        startTime = _startTime;
        endTime = _endTime;
        maxTokenSupply = _maxTokenSupply;
        etherPriceInUSD = _etherPriceInUSD;

        priceUpdateAt = block.timestamp;
    }

    function setTokenContract(address _token) public onlyOwner {
        require(_token != address(0));
        token = GigToken(_token);
    }

    function setEtherHolder(address _etherHolder) public onlyOwner {
        if (_etherHolder != address(0)) {
            etherHolder = _etherHolder;
        }
    }

    function setPurchaseLimits(uint256 _min, uint256 _max) public onlyOwner {
        if (_min < _max) {
            minPurchase = _min;
            maxPurchase = _max;
        }
    }

    function mint(address _address, uint256 _tokenAmount) public onlyOwner returns (uint256) {
        return mintInternal(_address, _tokenAmount);
    }

    function isActive() public view returns (bool);

    function isTransferAllowed(address _from, uint256 _value) public view returns (bool);

    function withinPeriod() public view returns (bool);

    function getMinEthersInvestment() public view returns (uint256) {
        return uint256(1 ether).mul(minPurchase).div(etherPriceInUSD);
    }

    function calculateTokensAmount(uint256 _value) public view returns (uint256 tokenAmount, uint256 usdAmount);

    function calculateEthersAmount(uint256 _tokens) public view returns (uint256 ethers, uint256 bonus);

    function updatePreICOMaxTokenSupply(uint256 _amount) public;

    // set ether price in USD with 5 digits after the decimal point
    //ex. 308.75000
    //for updating the price through  multivest
    function setEtherInUSD(string _price) public onlyAllowedMultivests(msg.sender) {
        bytes memory bytePrice = bytes(_price);
        uint256 dot = bytePrice.length.sub(uint256(6));

        // check if dot is in 6 position  from  the last
        require(0x2e == uint(bytePrice[dot]));

        uint256 newPrice = uint256(10 ** 23).div(parseInt(_price, 5));

        require(newPrice > 0);

        etherPriceInUSD = parseInt(_price, 5);

        priceUpdateAt = block.timestamp;

        NewPriceTicker(_price);
    }

    function mintInternal(address _address, uint256 _tokenAmount) internal returns (uint256) {
        uint256 mintedAmount = token.mint(_address, _tokenAmount);

        require(mintedAmount == _tokenAmount);

        soldTokens = soldTokens.add(_tokenAmount);
        if (maxTokenSupply > 0) {
            require(maxTokenSupply >= soldTokens);
        }

        return _tokenAmount;
    }

    function transferEthers() internal;

    function parseInt(string _a, uint _b) internal pure returns (uint) {
        bytes memory bresult = bytes(_a);
        uint res = 0;
        bool decimals = false;
        for (uint i = 0; i < bresult.length; i++) {
            if ((bresult[i] >= 48) && (bresult[i] <= 57)) {
                if (decimals) {
                    if (_b == 0) break;
                    else _b--;
                }
                res *= 10;
                res += uint(bresult[i]) - 48;
            } else if (bresult[i] == 46) decimals = true;
        }
        if (_b > 0) res *= 10 ** _b;
        return res;
    }
}


contract TokenAllocation is Ownable {
    using SafeERC20 for ERC20Basic;
    using SafeMath for uint256;

    address public ecosystemIncentive = 0xd339D9aeDFFa244E09874D65290c09d64b2356E0;
    address public marketingAndBounty = 0x26d6EF95A51BF0A2048Def4Fb7c548c3BDE37410;
    address public liquidityFund = 0x3D458b6f9024CDD9A2a7528c2E6451DD3b29e4cc;
    address public treasure = 0x00dEaFC5959Dd0E164bB00D06B08d972A276bf8E;
    address public amirShaikh = 0x31b17e7a2F86d878429C03f3916d17555C0d4884;
    address public sadiqHameed = 0x27B5cb71ff083Bd6a34764fBf82700b3669137f3;
    address public omairLatif = 0x92Db818bF10Bf3BfB73942bbB1f184274aA63833;

    uint256 public icoEndTime;

    address public vestingApplicature;
    address public vestingSimonCocking;
    address public vestingNathanChristian;
    address public vestingEdwinVanBerg;

    mapping(address => bool) public tokenInited;
    address[] public vestings;

    event VestingCreated(
        address _vesting,
        address _beneficiary,
        uint256 _start,
        uint256 _cliff,
        uint256 _duration,
        uint256 _periods,
        bool _revocable
    );

    event VestingRevoked(address _vesting);

    function setICOEndTime(uint256 _icoEndTime) public onlyOwner {
        icoEndTime = _icoEndTime;
    }

    function initVesting() public onlyOwner() {
        require(vestingApplicature == address(0) &&
        vestingSimonCocking == address(0) &&
        vestingNathanChristian == address(0) &&
        vestingEdwinVanBerg == address(0) &&
        icoEndTime != 0
        );

        uint256 oneYearAfterIcoEnd = icoEndTime.add(1 years);

        vestingApplicature = createVesting(
            0x760864dcdC58FDA80dB6883ce442B6ce44921Cf9, oneYearAfterIcoEnd, 0, 1 years, 2, false
        );

        vestingSimonCocking = createVesting(
            0x7f438d78a51886B24752941ba98Cc00aBA217495, oneYearAfterIcoEnd, 0, 1 years, 2, true
        );

        vestingNathanChristian = createVesting(
            0xfD86B8B016de558Fe39B1697cBf525592A233B2c, oneYearAfterIcoEnd, 0, 1 years, 2, true
        );

        vestingEdwinVanBerg = createVesting(
            0x2451A73F35874028217bC833462CCd90c72dbE6D, oneYearAfterIcoEnd, 0, 1 years, 2, true
        );
    }

    function allocate(MintingERC20 token) public onlyOwner() {
        require(tokenInited[token] == false);

        tokenInited[token] = true;

        require(vestingApplicature != address(0));
        require(vestingSimonCocking != address(0));
        require(vestingNathanChristian != address(0));
        require(vestingEdwinVanBerg != address(0));

        uint256 tokenPrecision = uint256(10) ** uint256(token.decimals());

        // allocate funds
        token.mint(ecosystemIncentive, 200000000 * tokenPrecision);
        token.mint(marketingAndBounty, 50000000 * tokenPrecision);
        token.mint(liquidityFund, 50000000 * tokenPrecision);
        token.mint(treasure, 200000000 * tokenPrecision);

        // allocate funds to founders
        token.mint(amirShaikh, 73350000 * tokenPrecision);
        token.mint(sadiqHameed, 36675000 * tokenPrecision);
        token.mint(omairLatif, 36675000 * tokenPrecision);

        // allocate funds to advisors
        token.mint(vestingApplicature, 1500000 * tokenPrecision);
        token.mint(vestingSimonCocking, 750000 * tokenPrecision);
        token.mint(vestingNathanChristian, 750000 * tokenPrecision);
        token.mint(vestingEdwinVanBerg, 300000 * tokenPrecision);
    }

    function createVesting(
        address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, uint256 _periods, bool _revocable
    ) public onlyOwner() returns (PeriodicTokenVesting) {
        PeriodicTokenVesting vesting = new PeriodicTokenVesting(
            _beneficiary, _start, _cliff, _duration, _periods, _revocable
        );

        vestings.push(vesting);

        VestingCreated(vesting, _beneficiary, _start, _cliff, _duration, _periods, _revocable);

        return vesting;
    }

    function revokeVesting(PeriodicTokenVesting _vesting, MintingERC20 token) public onlyOwner() {
        _vesting.revoke(token);

        VestingRevoked(_vesting);
    }
}


library SafeERC20 {
  function safeTransfer(ERC20Basic token, address to, uint256 value) internal {
    assert(token.transfer(to, value));
  }

  function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal {
    assert(token.transferFrom(from, to, value));
  }

  function safeApprove(ERC20 token, address spender, uint256 value) internal {
    assert(token.approve(spender, value));
  }
}


contract TokenVesting is Ownable {
  using SafeMath for uint256;
  using SafeERC20 for ERC20Basic;

  event Released(uint256 amount);
  event Revoked();

  // beneficiary of tokens after they are released
  address public beneficiary;

  uint256 public cliff;
  uint256 public start;
  uint256 public duration;

  bool public revocable;

  mapping (address => uint256) public released;
  mapping (address => bool) public revoked;

  /**
   * @dev Creates a vesting contract that vests its balance of any ERC20 token to the
   * _beneficiary, gradually in a linear fashion until _start + _duration. By then all
   * of the balance will have vested.
   * @param _beneficiary address of the beneficiary to whom vested tokens are transferred
   * @param _cliff duration in seconds of the cliff in which tokens will begin to vest
   * @param _duration duration in seconds of the period in which the tokens will vest
   * @param _revocable whether the vesting is revocable or not
   */
  function TokenVesting(address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, bool _revocable) public {
    require(_beneficiary != address(0));
    require(_cliff <= _duration);

    beneficiary = _beneficiary;
    revocable = _revocable;
    duration = _duration;
    cliff = _start.add(_cliff);
    start = _start;
  }

  /**
   * @notice Transfers vested tokens to beneficiary.
   * @param token ERC20 token which is being vested
   */
  function release(ERC20Basic token) public {
    uint256 unreleased = releasableAmount(token);

    require(unreleased > 0);

    released[token] = released[token].add(unreleased);

    token.safeTransfer(beneficiary, unreleased);

    Released(unreleased);
  }

  /**
   * @notice Allows the owner to revoke the vesting. Tokens already vested
   * remain in the contract, the rest are returned to the owner.
   * @param token ERC20 token which is being vested
   */
  function revoke(ERC20Basic token) public onlyOwner {
    require(revocable);
    require(!revoked[token]);

    uint256 balance = token.balanceOf(this);

    uint256 unreleased = releasableAmount(token);
    uint256 refund = balance.sub(unreleased);

    revoked[token] = true;

    token.safeTransfer(owner, refund);

    Revoked();
  }

  /**
   * @dev Calculates the amount that has already vested but hasn't been released yet.
   * @param token ERC20 token which is being vested
   */
  function releasableAmount(ERC20Basic token) public view returns (uint256) {
    return vestedAmount(token).sub(released[token]);
  }

  /**
   * @dev Calculates the amount that has already vested.
   * @param token ERC20 token which is being vested
   */
  function vestedAmount(ERC20Basic token) public view returns (uint256) {
    uint256 currentBalance = token.balanceOf(this);
    uint256 totalBalance = currentBalance.add(released[token]);

    if (now < cliff) {
      return 0;
    } else if (now >= start.add(duration) || revoked[token]) {
      return totalBalance;
    } else {
      return totalBalance.mul(now.sub(start)).div(duration);
    }
  }
}


contract PeriodicTokenVesting is TokenVesting {
    uint256 public periods;

    function PeriodicTokenVesting(
        address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, uint256 _periods, bool _revocable
    )
        public TokenVesting(_beneficiary, _start, _cliff, _duration, _revocable)
    {
        periods = _periods;
    }

    /**
    * @dev Calculates the amount that has already vested.
    * @param token ERC20 token which is being vested
    */
    function vestedAmount(ERC20Basic token) public view returns (uint256) {
        uint256 currentBalance = token.balanceOf(this);
        uint256 totalBalance = currentBalance.add(released[token]);

        if (now < cliff) {
            return 0;
        } else if (now >= start.add(duration * periods) || revoked[token]) {
            return totalBalance;
        } else {

            uint256 periodTokens = totalBalance.div(periods);

            uint256 periodsOver = now.sub(start).div(duration) + 1;

            if (periodsOver >= periods) {
                return totalBalance;
            }

            return periodTokens.mul(periodsOver);
        }
    }
}


contract PrivateSale is SellableToken {

    uint256 public price;
    uint256 public discount;
    SellableToken public crowdSale;

    function PrivateSale(
        address _token,
        address _etherHolder,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _maxTokenSupply, //14000000000000000000000000
        uint256 _etherPriceInUSD
    ) public SellableToken(
        _token,
        _etherHolder,
        _startTime,
        _endTime,
        _maxTokenSupply,
        _etherPriceInUSD
    ) {
        price = 24800;// $0.2480 * 10 ^ 5
        discount = 75;// $75%
    }

    function changeSalePeriod(uint256 _start, uint256 _end) public onlyOwner {
        if (_start != 0 && _start < _end) {
            startTime = _start;
            endTime = _end;
        }
    }

    function isActive() public view returns (bool) {
        if (soldTokens == maxTokenSupply) {
            return false;
        }

        return withinPeriod();
    }

    function withinPeriod() public view returns (bool) {
        return block.timestamp >= startTime && block.timestamp <= endTime;
    }

    function calculateTokensAmount(uint256 _value) public view returns (uint256 tokenAmount, uint256 usdAmount) {
        if (_value == 0) {
            return (0, 0);
        }

        usdAmount = _value.mul(etherPriceInUSD);

        tokenAmount = usdAmount.div(price * (100 - discount) / 100);

        usdAmount = usdAmount.div(uint256(10) ** 18);

        if (usdAmount < minPurchase) {
            return (0, 0);
        }
    }

    function calculateEthersAmount(uint256 _tokens) public view returns (uint256 ethers, uint256 usdAmount) {
        if (_tokens == 0) {
            return (0, 0);
        }

        usdAmount = _tokens.mul((price * (100 - discount) / 100));
        ethers = usdAmount.div(etherPriceInUSD);

        if (ethers < getMinEthersInvestment()) {
            return (0, 0);
        }

        usdAmount = usdAmount.div(uint256(10) ** 18);
    }

    function getStats(uint256 _ethPerBtc) public view returns (
        uint256 start,
        uint256 end,
        uint256 sold,
        uint256 maxSupply,
        uint256 min,
        uint256 tokensPerEth,
        uint256 tokensPerBtc
    ) {
        start = startTime;
        end = endTime;
        sold = soldTokens;
        maxSupply = maxTokenSupply;
        min = minPurchase;
        uint256 usd;
        (tokensPerEth, usd) = calculateTokensAmount(1 ether);
        (tokensPerBtc, usd) = calculateTokensAmount(_ethPerBtc);
    }

    function setCrowdSale(address _crowdSale) public onlyOwner {
        require(_crowdSale != address(0));

        crowdSale = SellableToken(_crowdSale);
    }

    function moveUnsoldTokens() public onlyOwner {
        require(address(crowdSale) != address(0) && now >= endTime && !isActive() && maxTokenSupply > soldTokens);

        crowdSale.updatePreICOMaxTokenSupply(maxTokenSupply.sub(soldTokens));
        maxTokenSupply = soldTokens;
    }

    function updatePreICOMaxTokenSupply(uint256) public {
        require(false);
    }

    function isTransferAllowed(address, uint256) public view returns (bool) {
        return false;
    }

    function buy(address _address, uint256 _value) internal returns (bool) {
        if (_value == 0 || _address == address(0)) {
            return false;
        }

        uint256 tokenAmount;
        uint256 usdAmount;

        (tokenAmount, usdAmount) = calculateTokensAmount(_value);

        uint256 mintedAmount = mintInternal(_address, tokenAmount);
        collectedUSD = collectedUSD.add(usdAmount);
        require(usdAmount > 0 && mintedAmount > 0);

        collectedEthers = collectedEthers.add(_value);
        etherBalances[_address] = etherBalances[_address].add(_value);

        token.increaseLockedBalance(_address, mintedAmount);

        transferEthers();

        Contribution(_address, _value, tokenAmount);
        return true;
    }

    function transferEthers() internal {
        etherHolder.transfer(this.balance);
    }
}

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":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_privateSale","type":"address"}],"name":"setPrivateSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdSaleEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_amount","type":"uint256"}],"name":"burnInvestorTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_locked","type":"bool"}],"name":"setLocked","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":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_tokens","type":"uint256"}],"name":"increaseLockedBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_minter","type":"address"}],"name":"removeMinter","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":"_transferFrozen","type":"bool"}],"name":"freezing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"standard","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"isTransferAllowed","outputs":[{"name":"status","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdSale","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newMinter","type":"address"}],"name":"addMinter","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":"transferFrozen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"privateSale","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lockedBalancesReleasedAfterOneYear","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"locked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"burnUnsoldTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"minters","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_crowdSale","type":"address"}],"name":"setCrowdSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_locked","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"burnedTokens","type":"uint256"}],"name":"MaxSupplyBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"}]

6060604052600d805460a060020a60ff021916905534156200002057600080fd5b60405160208062001a3583398101604052808051600b54909250600091506040805190810160405280600681526020017f47696742697400000000000000000000000000000000000000000000000000008152506012604080519081016040908152600482527f4742544300000000000000000000000000000000000000000000000000000000602083015260038054600160a060020a03191633600160a060020a031617905560009087908790869086908690869086908051908101604052600981527f455243323020302e310000000000000000000000000000000000000000000000602082015260089080516200011f929160200190620002f5565b506009805460ff1916821515179055600186905581156200015c57600154600160a060020a03331660009081526020819052604090205562000179565b600154600160a060020a0330166000908152602081905260409020555b60068580516200018e929160200190620002f5565b506007838051620001a4929160200190620002f5565b50506005805460ff191660ff949094169390931790925550504360045550604090508051908101604052601081527f4d696e74696e67455243323020302e3100000000000000000000000000000000602082015260089080516200020d929160200190620002f5565b505050600160a060020a0333166000908152600a602052604090819020805460ff19166001179055600b9490945550919250829150505190810160405260088082527f4742544320302e31000000000000000000000000000000000000000000000000602083015290805162000288929160200190620002f5565b50600554620002b190633b9aca009060ff16600a0a6401000000006200113f620002bb82021704565b600b55506200039a565b600080831515620002d05760009150620002ee565b50828202828482811515620002e157fe5b0414620002ea57fe5b8091505b5092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200033857805160ff191683800117855562000368565b8280016001018555821562000368579182015b82811115620003685782518255916020019190600101906200034b565b50620003769291506200037a565b5090565b6200039791905b8082111562000376576000815560010162000381565b90565b61168b80620003aa6000396000f3006060604052600436106101925763ffffffff60e060020a60003504166306fdde038114610197578063095ea7b31461022157806309f68e9614610257578063176345141461027857806318160ddd1461029d57806318e3d998146102b05780631d1fe108146102c3578063211e28b6146102e557806323b872dd146102fd5780632a6adcec146103255780633092afd514610347578063313ce5671461036657806336a23dbf1461038f57806340c10f19146103a75780635a3b7e42146103c95780635eae177c146103dc57806366188463146103fe57806370a08231146104205780637770bd151461043f5780638da5cb5b1461046e57806395d89b4114610481578063983b2d5614610494578063a9059cbb146104b3578063ade4637a146104d5578063ba1f879f146104e8578063bace5bdb146104fb578063cf3090121461051a578063d0479abc1461052d578063d5abeb0114610543578063d73dd62314610556578063dd62ed3e14610578578063f2fde38b1461059d578063f46eccc4146105bc578063f4b5cbc4146105db575b600080fd5b34156101a257600080fd5b6101aa6105fa565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e65780820151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561022c57600080fd5b610243600160a060020a0360043516602435610698565b604051901515815260200160405180910390f35b341561026257600080fd5b610276600160a060020a03600435166106be565b005b341561028357600080fd5b61028b61071d565b60405190815260200160405180910390f35b34156102a857600080fd5b61028b610723565b34156102bb57600080fd5b61028b610729565b34156102ce57600080fd5b61028b600160a060020a036004351660243561072f565b34156102f057600080fd5b6102766004351515610823565b341561030857600080fd5b610243600160a060020a0360043581169060243516604435610851565b341561033057600080fd5b610276600160a060020a036004351660243561088a565b341561035257600080fd5b610276600160a060020a0360043516610934565b341561037157600080fd5b610379610970565b60405160ff909116815260200160405180910390f35b341561039a57600080fd5b6102766004351515610979565b34156103b257600080fd5b61028b600160a060020a03600435166024356109d4565b34156103d457600080fd5b6101aa610ace565b34156103e757600080fd5b610243600160a060020a0360043516602435610b39565b341561040957600080fd5b610243600160a060020a0360043516602435610d20565b341561042b57600080fd5b61028b600160a060020a0360043516610d3d565b341561044a57600080fd5b610452610d58565b604051600160a060020a03909116815260200160405180910390f35b341561047957600080fd5b610452610d67565b341561048c57600080fd5b6101aa610d76565b341561049f57600080fd5b610276600160a060020a0360043516610de1565b34156104be57600080fd5b610243600160a060020a0360043516602435610e20565b34156104e057600080fd5b610243610e41565b34156104f357600080fd5b610452610e62565b341561050657600080fd5b61028b600160a060020a0360043516610e71565b341561052557600080fd5b610243610e83565b341561053857600080fd5b610276600435610e8c565b341561054e57600080fd5b61028b610f19565b341561056157600080fd5b610243600160a060020a0360043516602435610f1f565b341561058357600080fd5b61028b600160a060020a0360043581169060243516610f3c565b34156105a857600080fd5b610276600160a060020a0360043516610f67565b34156105c757600080fd5b610243600160a060020a0360043516611002565b34156105e657600080fd5b610276600160a060020a0360043516611017565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b820191906000526020600020905b81548152906001019060200180831161067357829003601f168201915b505050505081565b600042600e54111515156106ab57600080fd5b6106b583836110d2565b90505b92915050565b60035433600160a060020a039081169116146106d957600080fd5b600160a060020a03811615156106ee57600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045481565b60015490565b600e5481565b600c54600090600160a060020a03161580159061075a5750600c5433600160a060020a039081169116145b151561076557600080fd5b600e54421161077357600080fd5b600160a060020a03831660009081526020819052604090205482111561079857600080fd5b600160a060020a0383166000908152602081905260409020546107c1908363ffffffff6110f216565b600160a060020a0384166000908152602081905260409020556001546107ed908363ffffffff6110f216565b6001556000600160a060020a0384166000805160206116408339815191528460405190815260200160405180910390a350919050565b60035433600160a060020a0390811691161461083e57600080fd5b6009805460ff1916911515919091179055565b600042600e541115801561086a575061086a8483610b39565b151561087557600080fd5b610880848484611104565b90505b9392505050565b600d54600160a060020a0316158015906108b25750600d5433600160a060020a039081169116145b806108e05750600c54600160a060020a0316158015906108e05750600c5433600160a060020a039081169116145b15156108eb57600080fd5b600160a060020a0382166000908152600f6020526040902054610914908263ffffffff61112516565b600160a060020a039092166000908152600f602052604090209190915550565b60035433600160a060020a0390811691161461094f57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19169055565b60055460ff1681565b60035433600160a060020a0390811691161461099457600080fd5b600d8054911515740100000000000000000000000000000000000000000274ff000000000000000000000000000000000000000019909216919091179055565b600160a060020a0333166000908152600a602052604081205460ff1615156001146109fe57600080fd5b60095460ff16151560011415610a16575060006106b8565b811515610a25575060006106b8565b600b54600154610a3b908463ffffffff61112516565b1115610a49575060006106b8565b600154610a5c908363ffffffff61112516565b600155600160a060020a038316600090815260208190526040902054610a88908363ffffffff61112516565b600160a060020a0384166000818152602081905260408082209390935590916000805160206116408339815191529085905190815260200160405180910390a350919050565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b6000806000806000806000806000610b508b610d3d565b600d5490985074010000000000000000000000000000000000000000900460ff16151560011480610b8057508988105b15610b8e5760009850610d12565b600160a060020a038b166000908152600f6020526040812054975087118015610bc5575086610bc3898c63ffffffff6110f216565b105b15610c6157600e546301e13380810196501580610be157508542105b15610bef5760009850610d12565b610bff428763ffffffff6110f216565b945062278d0085049350600c841115610c1757600c93505b600c87049250610c2d838563ffffffff61113f16565b9150610c3f878363ffffffff6110f216565b905080610c52898c63ffffffff6110f216565b1015610c615760009850610d12565b600e5442108015610c7c5750600c54600160a060020a031615155b8015610cff5750600c54600160a060020a0316635eae177c8c8c60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ce257600080fd5b6102c65a03f11515610cf357600080fd5b50505060405180511590505b15610d0d5760009850610d12565b600198505b505050505050505092915050565b600042600e5411151515610d3357600080fd5b6106b5838361116a565b600160a060020a031660009081526020819052604090205490565b600c54600160a060020a031681565b600354600160a060020a031681565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b60035433600160a060020a03908116911614610dfc57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19166001179055565b6000610e2c3383610b39565b1515610e3757600080fd5b6106b5838361118a565b600d5474010000000000000000000000000000000000000000900460ff1681565b600d54600160a060020a031681565b600f6020526000908152604090205481565b60095460ff1681565b600c54600160a060020a031615801590610eb45750600c5433600160a060020a039081169116145b1515610ebf57600080fd5b600e544211610ecd57600080fd5b600b54610ee0908263ffffffff6110f216565b600b557f7174e2dc81bf5de8f9bf1dd00b511763f2ffb109c06de0f447be45348cc75af58160405190815260200160405180910390a150565b600b5481565b600042600e5411151515610f3257600080fd5b6106b583836111a7565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a03908116911614610f8257600080fd5b600160a060020a0381161515610f9757600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a6020526000908152604090205460ff1681565b60035433600160a060020a0390811691161461103257600080fd5b600160a060020a038116151561104757600080fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905516633197cbb66000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110b257600080fd5b6102c65a03f115156110c357600080fd5b5050506040518051600e555050565b60095460009060ff16156110e8575060006106b8565b6106b583836111c7565b6000828211156110fe57fe5b50900390565b60095460009060ff161561111a57506000610883565b610880848484611233565b60008282018381101561113457fe5b8091505b5092915050565b6000808315156111525760009150611138565b5082820282848281151561116257fe5b041461113457fe5b60095460009060ff1615611180575060006106b8565b6106b583836113a1565b60095460009060ff161561119d57600080fd5b6106b5838361149b565b60095460009060ff16156111bd575060006106b8565b6106b5838361159b565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6000600160a060020a038316151561124a57600080fd5b600160a060020a03841660009081526020819052604090205482111561126f57600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156112a257600080fd5b600160a060020a0384166000908152602081905260409020546112cb908363ffffffff6110f216565b600160a060020a038086166000908152602081905260408082209390935590851681522054611300908363ffffffff61112516565b600160a060020a0380851660009081526020818152604080832094909455878316825260028152838220339093168252919091522054611346908363ffffffff6110f216565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206116408339815191529085905190815260200160405180910390a35060019392505050565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054808311156113fe57600160a060020a033381166000908152600260209081526040808320938816835292905290812055611435565b61140e818463ffffffff6110f216565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b6000600160a060020a03831615156114b257600080fd5b600160a060020a0333166000908152602081905260409020548211156114d757600080fd5b600160a060020a033316600090815260208190526040902054611500908363ffffffff6110f216565b600160a060020a033381166000908152602081905260408082209390935590851681522054611535908363ffffffff61112516565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03166000805160206116408339815191528460405190815260200160405180910390a350600192915050565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120546115d3908363ffffffff61112516565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a3506001929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820952cb2b31753a4a8295f98061add2ace92fba423d54132081121701fca0dfcb600290000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6060604052600436106101925763ffffffff60e060020a60003504166306fdde038114610197578063095ea7b31461022157806309f68e9614610257578063176345141461027857806318160ddd1461029d57806318e3d998146102b05780631d1fe108146102c3578063211e28b6146102e557806323b872dd146102fd5780632a6adcec146103255780633092afd514610347578063313ce5671461036657806336a23dbf1461038f57806340c10f19146103a75780635a3b7e42146103c95780635eae177c146103dc57806366188463146103fe57806370a08231146104205780637770bd151461043f5780638da5cb5b1461046e57806395d89b4114610481578063983b2d5614610494578063a9059cbb146104b3578063ade4637a146104d5578063ba1f879f146104e8578063bace5bdb146104fb578063cf3090121461051a578063d0479abc1461052d578063d5abeb0114610543578063d73dd62314610556578063dd62ed3e14610578578063f2fde38b1461059d578063f46eccc4146105bc578063f4b5cbc4146105db575b600080fd5b34156101a257600080fd5b6101aa6105fa565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e65780820151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561022c57600080fd5b610243600160a060020a0360043516602435610698565b604051901515815260200160405180910390f35b341561026257600080fd5b610276600160a060020a03600435166106be565b005b341561028357600080fd5b61028b61071d565b60405190815260200160405180910390f35b34156102a857600080fd5b61028b610723565b34156102bb57600080fd5b61028b610729565b34156102ce57600080fd5b61028b600160a060020a036004351660243561072f565b34156102f057600080fd5b6102766004351515610823565b341561030857600080fd5b610243600160a060020a0360043581169060243516604435610851565b341561033057600080fd5b610276600160a060020a036004351660243561088a565b341561035257600080fd5b610276600160a060020a0360043516610934565b341561037157600080fd5b610379610970565b60405160ff909116815260200160405180910390f35b341561039a57600080fd5b6102766004351515610979565b34156103b257600080fd5b61028b600160a060020a03600435166024356109d4565b34156103d457600080fd5b6101aa610ace565b34156103e757600080fd5b610243600160a060020a0360043516602435610b39565b341561040957600080fd5b610243600160a060020a0360043516602435610d20565b341561042b57600080fd5b61028b600160a060020a0360043516610d3d565b341561044a57600080fd5b610452610d58565b604051600160a060020a03909116815260200160405180910390f35b341561047957600080fd5b610452610d67565b341561048c57600080fd5b6101aa610d76565b341561049f57600080fd5b610276600160a060020a0360043516610de1565b34156104be57600080fd5b610243600160a060020a0360043516602435610e20565b34156104e057600080fd5b610243610e41565b34156104f357600080fd5b610452610e62565b341561050657600080fd5b61028b600160a060020a0360043516610e71565b341561052557600080fd5b610243610e83565b341561053857600080fd5b610276600435610e8c565b341561054e57600080fd5b61028b610f19565b341561056157600080fd5b610243600160a060020a0360043516602435610f1f565b341561058357600080fd5b61028b600160a060020a0360043581169060243516610f3c565b34156105a857600080fd5b610276600160a060020a0360043516610f67565b34156105c757600080fd5b610243600160a060020a0360043516611002565b34156105e657600080fd5b610276600160a060020a0360043516611017565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b820191906000526020600020905b81548152906001019060200180831161067357829003601f168201915b505050505081565b600042600e54111515156106ab57600080fd5b6106b583836110d2565b90505b92915050565b60035433600160a060020a039081169116146106d957600080fd5b600160a060020a03811615156106ee57600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045481565b60015490565b600e5481565b600c54600090600160a060020a03161580159061075a5750600c5433600160a060020a039081169116145b151561076557600080fd5b600e54421161077357600080fd5b600160a060020a03831660009081526020819052604090205482111561079857600080fd5b600160a060020a0383166000908152602081905260409020546107c1908363ffffffff6110f216565b600160a060020a0384166000908152602081905260409020556001546107ed908363ffffffff6110f216565b6001556000600160a060020a0384166000805160206116408339815191528460405190815260200160405180910390a350919050565b60035433600160a060020a0390811691161461083e57600080fd5b6009805460ff1916911515919091179055565b600042600e541115801561086a575061086a8483610b39565b151561087557600080fd5b610880848484611104565b90505b9392505050565b600d54600160a060020a0316158015906108b25750600d5433600160a060020a039081169116145b806108e05750600c54600160a060020a0316158015906108e05750600c5433600160a060020a039081169116145b15156108eb57600080fd5b600160a060020a0382166000908152600f6020526040902054610914908263ffffffff61112516565b600160a060020a039092166000908152600f602052604090209190915550565b60035433600160a060020a0390811691161461094f57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19169055565b60055460ff1681565b60035433600160a060020a0390811691161461099457600080fd5b600d8054911515740100000000000000000000000000000000000000000274ff000000000000000000000000000000000000000019909216919091179055565b600160a060020a0333166000908152600a602052604081205460ff1615156001146109fe57600080fd5b60095460ff16151560011415610a16575060006106b8565b811515610a25575060006106b8565b600b54600154610a3b908463ffffffff61112516565b1115610a49575060006106b8565b600154610a5c908363ffffffff61112516565b600155600160a060020a038316600090815260208190526040902054610a88908363ffffffff61112516565b600160a060020a0384166000818152602081905260408082209390935590916000805160206116408339815191529085905190815260200160405180910390a350919050565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b6000806000806000806000806000610b508b610d3d565b600d5490985074010000000000000000000000000000000000000000900460ff16151560011480610b8057508988105b15610b8e5760009850610d12565b600160a060020a038b166000908152600f6020526040812054975087118015610bc5575086610bc3898c63ffffffff6110f216565b105b15610c6157600e546301e13380810196501580610be157508542105b15610bef5760009850610d12565b610bff428763ffffffff6110f216565b945062278d0085049350600c841115610c1757600c93505b600c87049250610c2d838563ffffffff61113f16565b9150610c3f878363ffffffff6110f216565b905080610c52898c63ffffffff6110f216565b1015610c615760009850610d12565b600e5442108015610c7c5750600c54600160a060020a031615155b8015610cff5750600c54600160a060020a0316635eae177c8c8c60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ce257600080fd5b6102c65a03f11515610cf357600080fd5b50505060405180511590505b15610d0d5760009850610d12565b600198505b505050505050505092915050565b600042600e5411151515610d3357600080fd5b6106b5838361116a565b600160a060020a031660009081526020819052604090205490565b600c54600160a060020a031681565b600354600160a060020a031681565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b60035433600160a060020a03908116911614610dfc57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19166001179055565b6000610e2c3383610b39565b1515610e3757600080fd5b6106b5838361118a565b600d5474010000000000000000000000000000000000000000900460ff1681565b600d54600160a060020a031681565b600f6020526000908152604090205481565b60095460ff1681565b600c54600160a060020a031615801590610eb45750600c5433600160a060020a039081169116145b1515610ebf57600080fd5b600e544211610ecd57600080fd5b600b54610ee0908263ffffffff6110f216565b600b557f7174e2dc81bf5de8f9bf1dd00b511763f2ffb109c06de0f447be45348cc75af58160405190815260200160405180910390a150565b600b5481565b600042600e5411151515610f3257600080fd5b6106b583836111a7565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a03908116911614610f8257600080fd5b600160a060020a0381161515610f9757600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a6020526000908152604090205460ff1681565b60035433600160a060020a0390811691161461103257600080fd5b600160a060020a038116151561104757600080fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905516633197cbb66000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110b257600080fd5b6102c65a03f115156110c357600080fd5b5050506040518051600e555050565b60095460009060ff16156110e8575060006106b8565b6106b583836111c7565b6000828211156110fe57fe5b50900390565b60095460009060ff161561111a57506000610883565b610880848484611233565b60008282018381101561113457fe5b8091505b5092915050565b6000808315156111525760009150611138565b5082820282848281151561116257fe5b041461113457fe5b60095460009060ff1615611180575060006106b8565b6106b583836113a1565b60095460009060ff161561119d57600080fd5b6106b5838361149b565b60095460009060ff16156111bd575060006106b8565b6106b5838361159b565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6000600160a060020a038316151561124a57600080fd5b600160a060020a03841660009081526020819052604090205482111561126f57600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156112a257600080fd5b600160a060020a0384166000908152602081905260409020546112cb908363ffffffff6110f216565b600160a060020a038086166000908152602081905260408082209390935590851681522054611300908363ffffffff61112516565b600160a060020a0380851660009081526020818152604080832094909455878316825260028152838220339093168252919091522054611346908363ffffffff6110f216565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206116408339815191529085905190815260200160405180910390a35060019392505050565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054808311156113fe57600160a060020a033381166000908152600260209081526040808320938816835292905290812055611435565b61140e818463ffffffff6110f216565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b6000600160a060020a03831615156114b257600080fd5b600160a060020a0333166000908152602081905260409020548211156114d757600080fd5b600160a060020a033316600090815260208190526040902054611500908363ffffffff6110f216565b600160a060020a033381166000908152602081905260408082209390935590851681522054611535908363ffffffff61112516565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03166000805160206116408339815191528460405190815260200160405180910390a350600192915050565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120546115d3908363ffffffff61112516565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a3506001929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820952cb2b31753a4a8295f98061add2ace92fba423d54132081121701fca0dfcb60029

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

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _locked (bool): False

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


Swarm Source

bzzr://952cb2b31753a4a8295f98061add2ace92fba423d54132081121701fca0dfcb6
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.