ETH Price: $3,470.00 (+3.02%)

Token

Decent.Bet Token (DBET)
 

Overview

Max Total Supply

17,270,321.810178624359159889 DBET

Holders

3,784

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
0xanto.eth
Balance
1,388.52 DBET

Value
$0.00
0xC467b7950a5fad84Be975B338411213c24A2bAC4
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:
DecentBetToken

Compiler Version
v0.4.16+commit.d7661dd9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-09-23
*/

pragma solidity ^0.4.8;

// accepted from zeppelin-solidity https://github.com/OpenZeppelin/zeppelin-solidity
/*
 * ERC20 interface
 * see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 {
    uint public totalSupply;
    function balanceOf(address who) constant returns (uint);
    function allowance(address owner, address spender) constant returns (uint);

    function transfer(address to, uint value) returns (bool ok);
    function transferFrom(address from, address to, uint value) returns (bool ok);
    function approve(address spender, uint value) returns (bool ok);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

// accepted from zeppelin-solidity https://github.com/OpenZeppelin/zeppelin-solidity

/**
 * Math operations with safety checks
 */
contract SafeMath {
    function safeMul(uint a, uint b) internal returns (uint) {
        uint c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

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

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

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

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

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

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

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

    function assert(bool assertion) internal {
        if (!assertion) {
            throw;
        }
    }

}

/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.
/// @author Stefan George - <[email protected]>
contract MultiSigWallet {

    // flag to determine if address is for a real contract or not
    bool public isMultiSigWallet = false;

    uint constant public MAX_OWNER_COUNT = 50;

    event Confirmation(address indexed sender, uint indexed transactionId);
    event Revocation(address indexed sender, uint indexed transactionId);
    event Submission(uint indexed transactionId);
    event Execution(uint indexed transactionId);
    event ExecutionFailure(uint indexed transactionId);
    event Deposit(address indexed sender, uint value);
    event OwnerAddition(address indexed owner);
    event OwnerRemoval(address indexed owner);
    event RequirementChange(uint required);

    mapping (uint => Transaction) public transactions;
    mapping (uint => mapping (address => bool)) public confirmations;
    mapping (address => bool) public isOwner;
    address[] public owners;
    uint public required;
    uint public transactionCount;

    struct Transaction {
    address destination;
    uint value;
    bytes data;
    bool executed;
    }

    modifier onlyWallet() {
        if (msg.sender != address(this)) throw;
        _;
    }

    modifier ownerDoesNotExist(address owner) {
        if (isOwner[owner]) throw;
        _;
    }

    modifier ownerExists(address owner) {
        if (!isOwner[owner]) throw;
        _;
    }

    modifier transactionExists(uint transactionId) {
        if (transactions[transactionId].destination == 0) throw;
        _;
    }

    modifier confirmed(uint transactionId, address owner) {
        if (!confirmations[transactionId][owner]) throw;
        _;
    }

    modifier notConfirmed(uint transactionId, address owner) {
        if (confirmations[transactionId][owner]) throw;
        _;
    }

    modifier notExecuted(uint transactionId) {
        if (transactions[transactionId].executed) throw;
        _;
    }

    modifier notNull(address _address) {
        if (_address == 0) throw;
        _;
    }

    modifier validRequirement(uint ownerCount, uint _required) {
        if (ownerCount > MAX_OWNER_COUNT) throw;
        if (_required > ownerCount) throw;
        if (_required == 0) throw;
        if (ownerCount == 0) throw;
        _;
    }

    /// @dev Fallback function allows to deposit ether.
    function()
    payable
    {
        if (msg.value > 0)
        Deposit(msg.sender, msg.value);
    }

    /*
     * Public functions
     */
    /// @dev Contract constructor sets initial owners and required number of confirmations.
    /// @param _owners List of initial owners.
    /// @param _required Number of required confirmations.
    function MultiSigWallet(address[] _owners, uint _required)
    public
    validRequirement(_owners.length, _required)
    {
        for (uint i=0; i<_owners.length; i++) {
            if (isOwner[_owners[i]] || _owners[i] == 0) throw;
            isOwner[_owners[i]] = true;
        }
        isMultiSigWallet = true;
        owners = _owners;
        required = _required;
    }

    /// @dev Allows to add a new owner. Transaction has to be sent by wallet.
    /// @param owner Address of new owner.
    function addOwner(address owner)
    public
    onlyWallet
    ownerDoesNotExist(owner)
    notNull(owner)
    validRequirement(owners.length + 1, required)
    {
        isOwner[owner] = true;
        owners.push(owner);
        OwnerAddition(owner);
    }

    /// @dev Allows to remove an owner. Transaction has to be sent by wallet.
    /// @param owner Address of owner.
    function removeOwner(address owner)
    public
    onlyWallet
    ownerExists(owner)
    {
        isOwner[owner] = false;
        for (uint i=0; i<owners.length - 1; i++)
        if (owners[i] == owner) {
            owners[i] = owners[owners.length - 1];
            break;
        }
        owners.length -= 1;
        if (required > owners.length)
        changeRequirement(owners.length);
        OwnerRemoval(owner);
    }

    /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.
    /// @param owner Address of owner to be replaced.
    /// @param newOwner Address of new owner.
    /// @param index the indx of the owner to be replaced
    function replaceOwnerIndexed(address owner, address newOwner, uint index)
    public
    onlyWallet
    ownerExists(owner)
    ownerDoesNotExist(newOwner)
    {
        if (owners[index] != owner) throw;
        owners[index] = newOwner;
        isOwner[owner] = false;
        isOwner[newOwner] = true;
        OwnerRemoval(owner);
        OwnerAddition(newOwner);
    }


    /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.
    /// @param _required Number of required confirmations.
    function changeRequirement(uint _required)
    public
    onlyWallet
    validRequirement(owners.length, _required)
    {
        required = _required;
        RequirementChange(_required);
    }

    /// @dev Allows an owner to submit and confirm a transaction.
    /// @param destination Transaction target address.
    /// @param value Transaction ether value.
    /// @param data Transaction data payload.
    /// @return Returns transaction ID.
    function submitTransaction(address destination, uint value, bytes data)
    public
    returns (uint transactionId)
    {
        transactionId = addTransaction(destination, value, data);
        confirmTransaction(transactionId);
    }

    /// @dev Allows an owner to confirm a transaction.
    /// @param transactionId Transaction ID.
    function confirmTransaction(uint transactionId)
    public
    ownerExists(msg.sender)
    transactionExists(transactionId)
    notConfirmed(transactionId, msg.sender)
    {
        confirmations[transactionId][msg.sender] = true;
        Confirmation(msg.sender, transactionId);
        executeTransaction(transactionId);
    }

    /// @dev Allows an owner to revoke a confirmation for a transaction.
    /// @param transactionId Transaction ID.
    function revokeConfirmation(uint transactionId)
    public
    ownerExists(msg.sender)
    confirmed(transactionId, msg.sender)
    notExecuted(transactionId)
    {
        confirmations[transactionId][msg.sender] = false;
        Revocation(msg.sender, transactionId);
    }

    /// @dev Returns the confirmation status of a transaction.
    /// @param transactionId Transaction ID.
    /// @return Confirmation status.
    function isConfirmed(uint transactionId)
    public
    constant
    returns (bool)
    {
        uint count = 0;
        for (uint i=0; i<owners.length; i++) {
            if (confirmations[transactionId][owners[i]])
            count += 1;
            if (count == required)
            return true;
        }
    }

    /*
     * Internal functions
     */

    /// @dev Allows anyone to execute a confirmed transaction.
    /// @param transactionId Transaction ID.
    function executeTransaction(uint transactionId)
    internal
    notExecuted(transactionId)
    {
        if (isConfirmed(transactionId)) {
            Transaction tx = transactions[transactionId];
            tx.executed = true;
            if (tx.destination.call.value(tx.value)(tx.data))
            Execution(transactionId);
            else {
                ExecutionFailure(transactionId);
                tx.executed = false;
            }
        }
    }

    /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.
    /// @param destination Transaction target address.
    /// @param value Transaction ether value.
    /// @param data Transaction data payload.
    /// @return Returns transaction ID.
    function addTransaction(address destination, uint value, bytes data)
    internal
    notNull(destination)
    returns (uint transactionId)
    {
        transactionId = transactionCount;
        transactions[transactionId] = Transaction({
        destination: destination,
        value: value,
        data: data,
        executed: false
        });
        transactionCount += 1;
        Submission(transactionId);
    }

    /*
     * Web3 call functions
     */
    /// @dev Returns number of confirmations of a transaction.
    /// @param transactionId Transaction ID.
    /// @return Number of confirmations.
    function getConfirmationCount(uint transactionId)
    public
    constant
    returns (uint count)
    {
        for (uint i=0; i<owners.length; i++)
        if (confirmations[transactionId][owners[i]])
        count += 1;
    }

    /// @dev Returns total number of transactions after filers are applied.
    /// @param pending Include pending transactions.
    /// @param executed Include executed transactions.
    /// @return Total number of transactions after filters are applied.
    function getTransactionCount(bool pending, bool executed)
    public
    constant
    returns (uint count)
    {
        for (uint i=0; i<transactionCount; i++)
        if ((pending && !transactions[i].executed) ||
        (executed && transactions[i].executed))
        count += 1;
    }

    /// @dev Returns list of owners.
    /// @return List of owner addresses.
    function getOwners()
    public
    constant
    returns (address[])
    {
        return owners;
    }

    /// @dev Returns array with owner addresses, which confirmed transaction.
    /// @param transactionId Transaction ID.
    /// @return Returns array of owner addresses.
    function getConfirmations(uint transactionId)
    public
    constant
    returns (address[] _confirmations)
    {
        address[] memory confirmationsTemp = new address[](owners.length);
        uint count = 0;
        uint i;
        for (i=0; i<owners.length; i++)
        if (confirmations[transactionId][owners[i]]) {
            confirmationsTemp[count] = owners[i];
            count += 1;
        }
        _confirmations = new address[](count);
        for (i=0; i<count; i++)
        _confirmations[i] = confirmationsTemp[i];
    }

    /// @dev Returns list of transaction IDs in defined range.
    /// @param from Index start position of transaction array.
    /// @param to Index end position of transaction array.
    /// @param pending Include pending transactions.
    /// @param executed Include executed transactions.
    /// @return Returns array of transaction IDs.
    function getTransactionIds(uint from, uint to, bool pending, bool executed)
    public
    constant
    returns (uint[] _transactionIds)
    {
        uint[] memory transactionIdsTemp = new uint[](transactionCount);
        uint count = 0;
        uint i;
        for (i=0; i<transactionCount; i++)
        if ((pending && !transactions[i].executed) ||
        (executed && transactions[i].executed))
        {
            transactionIdsTemp[count] = i;
            count += 1;
        }
        _transactionIds = new uint[](to - from);
        for (i=from; i<to; i++)
        _transactionIds[i - from] = transactionIdsTemp[i];
    }

}

contract UpgradeAgent is SafeMath {
    address public owner;

    bool public isUpgradeAgent;

    function upgradeFrom(address _from, uint256 _value) public;

    function finalizeUpgrade() public;

    function setOriginalSupply() public;
}

/// @title Time-locked vault of tokens allocated to DecentBet after 365 days
contract DecentBetVault is SafeMath {

    // flag to determine if address is for a real contract or not
    bool public isDecentBetVault = false;

    DecentBetToken decentBetToken;

    address decentBetMultisig;

    uint256 unlockedAtTime;

    // smaller lock for testing
    uint256 public constant timeOffset = 1 years;

    /// @notice Constructor function sets the DecentBet Multisig address and
    /// total number of locked tokens to transfer
    function DecentBetVault(address _decentBetMultisig) /** internal */ {
        if (_decentBetMultisig == 0x0) throw;
        decentBetToken = DecentBetToken(msg.sender);
        decentBetMultisig = _decentBetMultisig;
        isDecentBetVault = true;

        // 1 year later
        unlockedAtTime = safeAdd(getTime(), timeOffset);
    }

    /// @notice Transfer locked tokens to Decent.bet's multisig wallet
    function unlock() external {
        // Wait your turn!
        if (getTime() < unlockedAtTime) throw;
        // Will fail if allocation (and therefore toTransfer) is 0.
        if (!decentBetToken.transfer(decentBetMultisig, decentBetToken.balanceOf(this))) throw;
    }

    function getTime() internal returns (uint256) {
        return now;
    }

    // disallow ETH payments to TimeVault
    function() payable {
        throw;
    }

}


/// @title DecentBet crowdsale contract
contract DecentBetToken is SafeMath, ERC20 {

    // flag to determine if address is for a real contract or not
    bool public isDecentBetToken = false;

    // State machine
    enum State{Waiting, PreSale, CommunitySale, PublicSale, Success}

    // Token information
    string public constant name = "Decent.Bet Token";

    string public constant symbol = "DBET";

    uint256 public constant decimals = 18;  // decimal places

    uint256 public constant housePercentOfTotal = 10;

    uint256 public constant vaultPercentOfTotal = 18;

    uint256 public constant bountyPercentOfTotal = 2;

    uint256 public constant crowdfundPercentOfTotal = 70;

    uint256 public constant hundredPercent = 100;

    mapping (address => uint256) balances;

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

    // Authorized addresses
    address public team;

    // Upgrade information
    bool public finalizedUpgrade = false;

    address public upgradeMaster;

    UpgradeAgent public upgradeAgent;

    uint256 public totalUpgraded;

    // Crowdsale information
    bool public finalizedCrowdfunding = false;

    // Whitelisted addresses for pre-sale
    address[] public preSaleWhitelist;
    mapping (address => bool) public preSaleAllowed;

    // Whitelisted addresses from community
    address[] public communitySaleWhitelist;
    mapping (address => bool) public communitySaleAllowed;
    uint[2] public communitySaleCap = [100000 ether, 200000 ether];
    mapping (address => uint[2]) communitySalePurchases;

    uint256 public preSaleStartTime; // Pre-sale start block timestamp
    uint256 public fundingStartTime; // crowdsale start block timestamp
    uint256 public fundingEndTime; // crowdsale end block timestamp
    // DBET:ETH exchange rate - Needs to be updated at time of ICO.
    // Price of ETH/0.125. For example: If ETH/USD = 300, it would be 2400 DBETs per ETH.
    uint256 public baseTokensPerEther;
    uint256 public tokenCreationMax = safeMul(250000 ether, 1000); // A maximum of 250M DBETs can be minted during ICO.

    // Amount of tokens alloted to pre-sale investors.
    uint256 public preSaleAllotment;
    // Address of pre-sale investors.
    address public preSaleAddress;

    // for testing on testnet
    //uint256 public constant tokenCreationMax = safeMul(10 ether, baseTokensPerEther);
    //uint256 public constant tokenCreationMin = safeMul(3 ether, baseTokensPerEther);

    address public decentBetMultisig;

    DecentBetVault public timeVault; // DecentBet's time-locked vault

    event Upgrade(address indexed _from, address indexed _to, uint256 _value);

    event UpgradeFinalized(address sender, address upgradeAgent);

    event UpgradeAgentSet(address agent);

    // Allow only the team address to continue
    modifier onlyTeam() {
        if(msg.sender != team) throw;
        _;
    }

    function DecentBetToken(address _decentBetMultisig,
    address _upgradeMaster, address _team,
    uint256 _baseTokensPerEther, uint256 _fundingStartTime,
    uint256 _fundingEndTime) {

        if (_decentBetMultisig == 0) throw;
        if (_team == 0) throw;
        if (_upgradeMaster == 0) throw;
        if (_baseTokensPerEther == 0) throw;

        // For testing/dev
        //         if(_fundingStartTime == 0) throw;
        // Crowdsale can only officially start during/after the current block timestamp.
        if (_fundingStartTime < getTime()) throw;

        if (_fundingEndTime <= _fundingStartTime) throw;

        isDecentBetToken = true;

        upgradeMaster = _upgradeMaster;
        team = _team;

        baseTokensPerEther = _baseTokensPerEther;

        preSaleStartTime = _fundingStartTime - 1 days;
        fundingStartTime = _fundingStartTime;
        fundingEndTime = _fundingEndTime;

        // Pre-sale issuance from pre-sale contract
        // 0x7be601aab2f40cc23653965749b84e5cb8cfda43
        preSaleAddress = 0x87f7beeda96216ec2a325e417a45ed262495686b;
        preSaleAllotment = 45000000 ether;

        balances[preSaleAddress] = preSaleAllotment;
        totalSupply = safeAdd(totalSupply, preSaleAllotment);

        timeVault = new DecentBetVault(_decentBetMultisig);
        if (!timeVault.isDecentBetVault()) throw;

        decentBetMultisig = _decentBetMultisig;
        if (!MultiSigWallet(decentBetMultisig).isMultiSigWallet()) throw;
    }

    function balanceOf(address who) constant returns (uint) {
        return balances[who];
    }

    /// @notice Transfer `value` DBET tokens from sender's account
    /// `msg.sender` to provided account address `to`.
    /// @notice This function is disabled during the funding.
    /// @dev Required state: Success
    /// @param to The address of the recipient
    /// @param value The number of DBETs to transfer
    /// @return Whether the transfer was successful or not
    function transfer(address to, uint256 value) returns (bool ok) {
        if (getState() != State.Success) throw;
        // Abort if crowdfunding was not a success.
        uint256 senderBalance = balances[msg.sender];
        if (senderBalance >= value && value > 0) {
            senderBalance = safeSub(senderBalance, value);
            balances[msg.sender] = senderBalance;
            balances[to] = safeAdd(balances[to], value);
            Transfer(msg.sender, to, value);
            return true;
        }
        return false;
    }

    /// @notice Transfer `value` DBET tokens from sender 'from'
    /// to provided account address `to`.
    /// @notice This function is disabled during the funding.
    /// @dev Required state: Success
    /// @param from The address of the sender
    /// @param to The address of the recipient
    /// @param value The number of DBETs to transfer
    /// @return Whether the transfer was successful or not
    function transferFrom(address from, address to, uint256 value) returns (bool ok) {
        if (getState() != State.Success) throw;
        // Abort if not in Success state.
        // protect against wrapping uints
        if (balances[from] >= value &&
        allowed[from][msg.sender] >= value &&
        safeAdd(balances[to], value) > balances[to])
        {
            balances[to] = safeAdd(balances[to], value);
            balances[from] = safeSub(balances[from], value);
            allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], value);
            Transfer(from, to, value);
            return true;
        }
        else {return false;}
    }

    /// @notice `msg.sender` approves `spender` to spend `value` tokens
    /// @param spender The address of the account able to transfer the tokens
    /// @param value The amount of wei to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address spender, uint256 value) returns (bool ok) {
        if (getState() != State.Success) throw;
        // Abort if not in Success state.
        allowed[msg.sender][spender] = value;
        Approval(msg.sender, spender, value);
        return true;
    }

    /// @param owner The address of the account owning tokens
    /// @param spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address owner, address spender) constant returns (uint) {
        return allowed[owner][spender];
    }

    // Token upgrade functionality

    /// @notice Upgrade tokens to the new token contract.
    /// @dev Required state: Success
    /// @param value The number of tokens to upgrade
    function upgrade(uint256 value) external {
        if (getState() != State.Success) throw;
        // Abort if not in Success state.
        if (upgradeAgent.owner() == 0x0) throw;
        // need a real upgradeAgent address
        if (finalizedUpgrade) throw;
        // cannot upgrade if finalized

        // Validate input value.
        if (value == 0) throw;
        if (value > balances[msg.sender]) throw;

        // update the balances here first before calling out (reentrancy)
        balances[msg.sender] = safeSub(balances[msg.sender], value);
        totalSupply = safeSub(totalSupply, value);
        totalUpgraded = safeAdd(totalUpgraded, value);
        upgradeAgent.upgradeFrom(msg.sender, value);
        Upgrade(msg.sender, upgradeAgent, value);
    }

    /// @notice Set address of upgrade target contract and enable upgrade
    /// process.
    /// @dev Required state: Success
    /// @param agent The address of the UpgradeAgent contract
    function setUpgradeAgent(address agent) external {
        if (getState() != State.Success) throw;
        // Abort if not in Success state.
        if (agent == 0x0) throw;
        // don't set agent to nothing
        if (msg.sender != upgradeMaster) throw;
        // Only a master can designate the next agent
        upgradeAgent = UpgradeAgent(agent);
        if (!upgradeAgent.isUpgradeAgent()) throw;
        // this needs to be called in success condition to guarantee the invariant is true
        upgradeAgent.setOriginalSupply();
        UpgradeAgentSet(upgradeAgent);
    }

    /// @notice Set address of upgrade target contract and enable upgrade
    /// process.
    /// @dev Required state: Success
    /// @param master The address that will manage upgrades, not the upgradeAgent contract address
    function setUpgradeMaster(address master) external {
        if (getState() != State.Success) throw;
        // Abort if not in Success state.
        if (master == 0x0) throw;
        if (msg.sender != upgradeMaster) throw;
        // Only a master can designate the next master
        upgradeMaster = master;
    }

    /// @notice finalize the upgrade
    /// @dev Required state: Success
    function finalizeUpgrade() external {
        if (getState() != State.Success) throw;
        // Abort if not in Success state.
        if (upgradeAgent.owner() == 0x0) throw;
        // we need a valid upgrade agent
        if (msg.sender != upgradeMaster) throw;
        // only upgradeMaster can finalize
        if (finalizedUpgrade) throw;
        // can't finalize twice

        finalizedUpgrade = true;
        // prevent future upgrades

        upgradeAgent.finalizeUpgrade();
        // call finalize upgrade on new contract
        UpgradeFinalized(msg.sender, upgradeAgent);
    }

    // Allow users to purchase by sending Ether to the contract
    function() payable {
        invest();
    }

    // Updates tokens per ETH rates before the pre-sale
    function updateBaseTokensPerEther(uint _baseTokensPerEther) onlyTeam {
        if(getState() != State.Waiting) throw;

        baseTokensPerEther = _baseTokensPerEther;
    }

    // Returns the current rate after adding bonuses for the time period
    function getTokensAtCurrentRate(uint weiValue) constant returns (uint) {
        /* Pre-sale */
        if(getTime() >= preSaleStartTime && getTime() < fundingStartTime) {
            return safeDiv(safeMul(weiValue, safeMul(baseTokensPerEther, 120)), 100); // 20% bonus
        }

        /* Community sale */
        else if(getTime() >= fundingStartTime && getTime() < fundingStartTime + 1 days) {
            return safeDiv(safeMul(weiValue, safeMul(baseTokensPerEther, 120)), 100); // 20% bonus
        } else if(getTime() >= (fundingStartTime + 1 days) && getTime() < fundingStartTime + 2 days) {
            return safeDiv(safeMul(weiValue, safeMul(baseTokensPerEther, 120)), 100); // 20% bonus
        }

        /* Public sale */
        else if(getTime() >= (fundingStartTime + 2 days) && getTime() < fundingStartTime + 1 weeks) {
            return safeDiv(safeMul(weiValue, safeMul(baseTokensPerEther, 110)), 100); // 10% bonus
        } else if(getTime() >= fundingStartTime + 1 weeks && getTime() < fundingStartTime + 2 weeks) {
            return safeDiv(safeMul(weiValue, safeMul(baseTokensPerEther, 105)), 100); // 5% bonus
        } else if(getTime() >= fundingStartTime + 2 weeks && getTime() < fundingEndTime) {
            return safeMul(weiValue, baseTokensPerEther); // 0% bonus
        }
    }

    // Allows the owner to add an address to the pre-sale whitelist.
    function addToPreSaleWhitelist(address _address) onlyTeam {

        // Add to pre-sale whitelist only if state is Waiting right now.
        if(getState() != State.Waiting) throw;

        // Address already added to whitelist.
        if (preSaleAllowed[_address]) throw;

        preSaleWhitelist.push(_address);
        preSaleAllowed[_address] = true;
    }

    // Allows the owner to add an address to the community whitelist.
    function addToCommunitySaleWhitelist(address[] addresses) onlyTeam {

        // Add to community sale whitelist only if state is Waiting or Presale right now.
        if(getState() != State.Waiting &&
        getState() != State.PreSale) throw;

        for(uint i = 0; i < addresses.length; i++) {
            if(!communitySaleAllowed[addresses[i]]) {
                communitySaleWhitelist.push(addresses[i]);
                communitySaleAllowed[addresses[i]] = true;
            }
        }
    }

    /// @notice Create tokens when funding is active.
    /// @dev Required state: Funding
    /// @dev State transition: -> Funding Success (only if cap reached)
    function invest() payable {

        // Abort if not in PreSale, CommunitySale or PublicSale state.
        if (getState() != State.PreSale &&
        getState() != State.CommunitySale &&
        getState() != State.PublicSale) throw;

        // User hasn't been whitelisted for pre-sale.
        if(getState() == State.PreSale && !preSaleAllowed[msg.sender]) throw;

        // User hasn't been whitelisted for community sale.
        if(getState() == State.CommunitySale && !communitySaleAllowed[msg.sender]) throw;

        // Do not allow creating 0 tokens.
        if (msg.value == 0) throw;

        // multiply by exchange rate to get newly created token amount
        uint256 createdTokens = getTokensAtCurrentRate(msg.value);

        allocateTokens(msg.sender, createdTokens);
    }

    // Allocates tokens to an investors' address
    function allocateTokens(address _address, uint amount) internal {

        // we are creating tokens, so increase the totalSupply.
        totalSupply = safeAdd(totalSupply, amount);

        // don't go over the limit!
        if (totalSupply > tokenCreationMax) throw;

        // Don't allow community whitelisted addresses to purchase more than their cap.
        if(getState() == State.CommunitySale) {
            // Community sale day 1.
            // Whitelisted addresses can purchase a maximum of 100k DBETs (10k USD).
            if(getTime() >= fundingStartTime &&
            getTime() < fundingStartTime + 1 days) {
                if(safeAdd(communitySalePurchases[msg.sender][0], amount) > communitySaleCap[0])
                throw;
                else
                communitySalePurchases[msg.sender][0] =
                safeAdd(communitySalePurchases[msg.sender][0], amount);
            }

            // Community sale day 2.
            // Whitelisted addresses can purchase a maximum of 200k DBETs (20k USD).
            else if(getTime() >= (fundingStartTime + 1 days) &&
            getTime() < fundingStartTime + 2 days) {
                if(safeAdd(communitySalePurchases[msg.sender][1], amount) > communitySaleCap[1])
                throw;
                else
                communitySalePurchases[msg.sender][1] =
                safeAdd(communitySalePurchases[msg.sender][1], amount);
            }
        }

        // Assign new tokens to the sender.
        balances[_address] = safeAdd(balances[_address], amount);

        // Log token creation event
        Transfer(0, _address, amount);
    }

    /// @notice Finalize crowdfunding
    /// @dev If cap was reached or crowdfunding has ended then:
    /// create DBET for the DecentBet Multisig and team,
    /// transfer ETH to the DecentBet Multisig address.
    /// @dev Required state: Success
    function finalizeCrowdfunding() external {
        // Abort if not in Funding Success state.
        if (getState() != State.Success) throw;
        // don't finalize unless we won
        if (finalizedCrowdfunding) throw;
        // can't finalize twice (so sneaky!)

        // prevent more creation of tokens
        finalizedCrowdfunding = true;

        // Founder's supply : 18% of total goes to vault, time locked for 6 months
        uint256 vaultTokens = safeDiv(safeMul(totalSupply, vaultPercentOfTotal), crowdfundPercentOfTotal);
        balances[timeVault] = safeAdd(balances[timeVault], vaultTokens);
        Transfer(0, timeVault, vaultTokens);

        // House: 10% of total goes to Decent.bet for initial house setup
        uint256 houseTokens = safeDiv(safeMul(totalSupply, housePercentOfTotal), crowdfundPercentOfTotal);
        balances[timeVault] = safeAdd(balances[decentBetMultisig], houseTokens);
        Transfer(0, decentBetMultisig, houseTokens);

        // Bounties: 2% of total goes to Decent bet for bounties
        uint256 bountyTokens = safeDiv(safeMul(totalSupply, bountyPercentOfTotal), crowdfundPercentOfTotal);
        balances[decentBetMultisig] = safeAdd(balances[decentBetMultisig], bountyTokens);
        Transfer(0, decentBetMultisig, bountyTokens);

        // Transfer ETH to the DBET Multisig address.
        if (!decentBetMultisig.send(this.balance)) throw;
    }

    // Interface marker
    function isDecentBetCrowdsale() returns (bool) {
        return true;
    }

    function getTime() constant returns (uint256) {
        return now;
    }

    /// @notice This manages the crowdfunding state machine
    /// We make it a function and do not assign the result to a variable
    /// So there is no chance of the variable being stale
    function getState() public constant returns (State){
        /* Successful if crowdsale was finalized */
        if(finalizedCrowdfunding) return State.Success;

        /* Pre-sale not started */
        else if (getTime() < preSaleStartTime) return State.Waiting;

        /* Pre-sale */
        else if (getTime() >= preSaleStartTime &&
        getTime() < fundingStartTime &&
        totalSupply < tokenCreationMax) return State.PreSale;

        /* Community sale */
        else if (getTime() >= fundingStartTime &&
        getTime() < fundingStartTime + 2 days &&
        totalSupply < tokenCreationMax) return State.CommunitySale;

        /* Public sale */
        else if (getTime() >= (fundingStartTime + 2 days) &&
        getTime() < fundingEndTime &&
        totalSupply < tokenCreationMax) return State.PublicSale;

        /* Success */
        else if (getTime() >= fundingEndTime ||
        totalSupply == tokenCreationMax) return State.Success;
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"preSaleStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vaultPercentOfTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"weiValue","type":"uint256"}],"name":"getTokensAtCurrentRate","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":"getState","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdfundPercentOfTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeCrowdfunding","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenCreationMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"finalizedUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"preSaleAllotment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"communitySaleWhitelist","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"communitySaleCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradeAgent","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradeMaster","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"communitySaleAllowed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isDecentBetToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalizedCrowdfunding","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseTokensPerEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"team","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hundredPercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"housePercentOfTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decentBetMultisig","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"isDecentBetCrowdsale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"addToPreSaleWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalUpgraded","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"preSaleWhitelist","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agent","type":"address"}],"name":"setUpgradeAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_baseTokensPerEther","type":"uint256"}],"name":"updateBaseTokensPerEther","outputs":[],"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":"addresses","type":"address[]"}],"name":"addToCommunitySaleWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"invest","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"preSaleAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"preSaleAllowed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timeVault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bountyPercentOfTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"master","type":"address"}],"name":"setUpgradeMaster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_decentBetMultisig","type":"address"},{"name":"_upgradeMaster","type":"address"},{"name":"_team","type":"address"},{"name":"_baseTokensPerEther","type":"uint256"},{"name":"_fundingStartTime","type":"uint256"},{"name":"_fundingEndTime","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Upgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"upgradeAgent","type":"address"}],"name":"UpgradeFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"agent","type":"address"}],"name":"UpgradeAgentSet","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":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

606060409081526001805460ff199081169091556004805460a060020a60ff0219169055600880549091169055805190810160405269152d02c7e14af68000008152692a5a058fc295ed00000060208201526200006190600d90600262000412565b50620000886934f086f3b33b684000006103e8640100000000620020216200038282021704565b60145534156200009757600080fd5b60405160c0806200299a8339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519150505b600160a060020a0386161515620000e857600080fd5b600160a060020a0384161515620000fe57600080fd5b600160a060020a03851615156200011457600080fd5b8215156200012157600080fd5b62000139640100000000620015a8620003c382021704565b8210156200014657600080fd5b8181116200015357600080fd5b6001805460ff19168117905560058054600160a060020a03808816600160a060020a0319928316179092556004805487841690831617905560138590556201517f19840160105560118490556012839055601680549091167387f7beeda96216ec2a325e417a45ed262495686b17908190556a25391ee35a05c54d00000060158190559116600090815260026020526040812082905554620002039164010000000062002092620003c882021704565b600055856200021162000461565b600160a060020a039091168152602001604051809103906000f08015156200023857600080fd5b60188054600160a060020a031916600160a060020a0392831617908190551663cd3faa6a6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620002ad57600080fd5b6102c65a03f11515620002bf57600080fd5b505050604051805190501515620002d557600080fd5b60178054600160a060020a031916600160a060020a03888116919091179182905516634c3a6ae06000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200034d57600080fd5b6102c65a03f115156200035f57600080fd5b5050506040518051905015156200037557600080fd5b5b50505050505062000496565b6000828202620003b8841580620003a45750838583811515620003a157fe5b04145b640100000000620020d36200040182021704565b8091505b5092915050565b425b90565b6000828201620003b8848210801590620003a45750838210155b640100000000620020d36200040182021704565b8091505b5092915050565b8015156200040e57600080fd5b5b50565b82600281019282156200044e579160200282015b828111156200044e57825182906001605060020a031690559160200191906001019062000426565b5b506200045d92915062000472565b5090565b60405161037a806200262083390190565b620003c591905b808211156200045d576000815560010162000479565b5090565b90565b61217a80620004a66000396000f3006060604052361561022a5763ffffffff60e060020a60003504166306d65af3811461023657806306fdde031461025b57806308e496ea146102e6578063095ea7b31461030b5780630fb9dcd51461034157806318160ddd146103695780631865c57d1461038e5780631afaa8bf146103c55780631df93558146103ea5780631ed692c01461040f5780631f97c00e1461042457806323b872dd14610449578063313ce567146102e657806345977d03146104aa57806347858c79146104c2578063485f7a7e146104e95780634eb12d7f1461050e57806354da51ad14610540578063557ed1ba146105685780635de4ccb01461058d578063600440cb146105bc57806363193251146105eb57806367a4e7c41461061e57806368f673301461064557806370a082311461066c578063728d5e941461069d57806374eedd46146106c257806385f2aef2146106e75780638a9cb361146107165780638b2de7961461073b57806395d89b41146107605780639a45a263146107eb5780639a508c8e1461081a578063a9059cbb1461082f578063a95ff7d514610865578063aedc0c5c1461088c578063c752ff62146108ad578063d226d723146108d2578063d7e7088a14610904578063da88a83114610925578063dd62ed3e1461093d578063e244fe8914610974578063e8b5e51f1461022a578063eb08aa3b146109cf578063f08d1c34146109fe578063f4660ff514610a31578063f99f977c14610a60578063ffeb7d7514610a85575b5b610233610aa6565b5b005b341561024157600080fd5b610249610bbb565b60405190815260200160405180910390f35b341561026657600080fd5b61026e610bc1565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102ab5780820151818401525b602001610292565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102f157600080fd5b610249610bf8565b60405190815260200160405180910390f35b341561031657600080fd5b61032d600160a060020a0360043516602435610bfd565b604051901515815260200160405180910390f35b341561034c57600080fd5b610249600435610c89565b60405190815260200160405180910390f35b341561037457600080fd5b610249610e74565b60405190815260200160405180910390f35b341561039957600080fd5b6103a1610e7a565b604051808260048111156103b157fe5b60ff16815260200191505060405180910390f35b34156103d057600080fd5b610249610f97565b60405190815260200160405180910390f35b34156103f557600080fd5b610249610f9c565b60405190815260200160405180910390f35b341561041a57600080fd5b610233610fa2565b005b341561042f57600080fd5b6102496111b8565b60405190815260200160405180910390f35b341561045457600080fd5b61032d600160a060020a03600435811690602435166044356111be565b604051901515815260200160405180910390f35b34156102f157600080fd5b610249610bf8565b60405190815260200160405180910390f35b34156104b557600080fd5b61023360043561135a565b005b34156104cd57600080fd5b61032d611548565b604051901515815260200160405180910390f35b34156104f457600080fd5b610249611558565b60405190815260200160405180910390f35b341561051957600080fd5b61052460043561155e565b604051600160a060020a03909116815260200160405180910390f35b341561054b57600080fd5b610249600435611590565b60405190815260200160405180910390f35b341561057357600080fd5b6102496115a8565b60405190815260200160405180910390f35b341561059857600080fd5b6105246115ad565b604051600160a060020a03909116815260200160405180910390f35b34156105c757600080fd5b6105246115bc565b604051600160a060020a03909116815260200160405180910390f35b34156105f657600080fd5b61032d600160a060020a03600435166115cb565b604051901515815260200160405180910390f35b341561062957600080fd5b61032d6115e0565b604051901515815260200160405180910390f35b341561065057600080fd5b61032d6115e9565b604051901515815260200160405180910390f35b341561067757600080fd5b610249600160a060020a03600435166115f2565b60405190815260200160405180910390f35b34156106a857600080fd5b610249611611565b60405190815260200160405180910390f35b34156106cd57600080fd5b610249611617565b60405190815260200160405180910390f35b34156106f257600080fd5b61052461161d565b604051600160a060020a03909116815260200160405180910390f35b341561072157600080fd5b61024961162c565b60405190815260200160405180910390f35b341561074657600080fd5b610249611631565b60405190815260200160405180910390f35b341561076b57600080fd5b61026e611636565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102ab5780820151818401525b602001610292565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156107f657600080fd5b61052461166d565b604051600160a060020a03909116815260200160405180910390f35b341561082557600080fd5b61023361167c565b005b341561083a57600080fd5b61032d600160a060020a0360043516602435611812565b604051901515815260200160405180910390f35b341561087057600080fd5b61032d6118fa565b604051901515815260200160405180910390f35b341561089757600080fd5b610233600160a060020a0360043516611900565b005b34156108b857600080fd5b6102496119c1565b60405190815260200160405180910390f35b34156108dd57600080fd5b6105246004356119c7565b604051600160a060020a03909116815260200160405180910390f35b341561090f57600080fd5b610233600160a060020a03600435166119f9565b005b341561093057600080fd5b610233600435611b7a565b005b341561094857600080fd5b610249600160a060020a0360043581169060243516611bbf565b60405190815260200160405180910390f35b341561097f57600080fd5b6102336004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650611bec95505050505050565b005b610233610aa6565b005b34156109da57600080fd5b610524611d47565b604051600160a060020a03909116815260200160405180910390f35b3415610a0957600080fd5b61032d600160a060020a0360043516611d56565b604051901515815260200160405180910390f35b3415610a3c57600080fd5b610524611d6b565b604051600160a060020a03909116815260200160405180910390f35b3415610a6b57600080fd5b610249611d7a565b60405190815260200160405180910390f35b3415610a9057600080fd5b610233600160a060020a0360043516611d7f565b005b600060015b610ab3610e7a565b6004811115610abe57fe5b14158015610ae0575060025b610ad2610e7a565b6004811115610add57fe5b14155b8015610b00575060035b610af2610e7a565b6004811115610afd57fe5b14155b15610b0a57600080fd5b60015b610b15610e7a565b6004811115610b2057fe5b148015610b465750600160a060020a0333166000908152600a602052604090205460ff16155b15610b5057600080fd5b60025b610b5b610e7a565b6004811115610b6657fe5b148015610b8c5750600160a060020a0333166000908152600c602052604090205460ff16155b15610b9657600080fd5b341515610ba257600080fd5b610bab34610c89565b9050610bb73382611dfb565b5b50565b60105481565b60408051908101604052601081527f446563656e742e42657420546f6b656e00000000000000000000000000000000602082015281565b601281565b600060045b610c0a610e7a565b6004811115610c1557fe5b14610c1f57600080fd5b600160a060020a03338116600081815260036020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b6000601054610c966115a8565b10158015610cac5750601154610caa6115a8565b105b15610cd857610cd1610cca83610cc56013546078612021565b612021565b6064612050565b9050610e69565b601154610ce36115a8565b10158015610cfe57506011546201518001610cfc6115a8565b105b15610d2a57610cd1610cca83610cc56013546078612021565b612021565b6064612050565b9050610e69565b6011546201518001610d3a6115a8565b10158015610d5557506011546202a30001610d536115a8565b105b15610d8157610cd1610cca83610cc56013546078612021565b612021565b6064612050565b9050610e69565b6011546202a30001610d916115a8565b10158015610dac575060115462093a8001610daa6115a8565b105b15610dd857610cd1610cca83610cc5601354606e612021565b612021565b6064612050565b9050610e69565b60115462093a8001610de86115a8565b10158015610e0357506011546212750001610e016115a8565b105b15610e2f57610cd1610cca83610cc56013546069612021565b612021565b6064612050565b9050610e69565b6011546212750001610e3f6115a8565b10158015610e555750601254610e536115a8565b105b15610e6957610cd182601354612021565b90505b5b5b5b5b5b5b919050565b60005481565b60085460009060ff1615610e9057506004610f8e565b601054610e9b6115a8565b1015610ea957506000610f8e565b601054610eb46115a8565b10158015610eca5750601154610ec86115a8565b105b8015610ed95750601454600054105b15610ee657506001610f8e565b601154610ef16115a8565b10158015610f0c57506011546202a30001610f0a6115a8565b105b8015610f1b5750601454600054105b15610f2857506002610f8e565b6011546202a30001610f386115a8565b10158015610f4e5750601254610f4c6115a8565b105b8015610f5d5750601454600054105b15610f6a57506003610f8e565b601254610f756115a8565b101580610f855750601454600054145b15610f8e575060045b5b5b5b5b5b5b90565b604681565b60115481565b6000808060045b610fb1610e7a565b6004811115610fbc57fe5b14610fc657600080fd5b60085460ff1615610fd657600080fd5b6008805460ff19166001179055600054610ffc90610ff5906012612021565b6046612050565b601854600160a060020a03166000908152600260205260409020549093506110249084612092565b60188054600160a060020a03908116600090815260026020526040808220949094559154169160008051602061212f8339815191529086905190815260200160405180910390a3611082610ff5600054600a612021565b6046612050565b601754600160a060020a03166000908152600260205260409020549092506110aa9083612092565b601854600160a060020a03908116600090815260026020526040808220939093556017549091169160008051602061212f8339815191529085905190815260200160405180910390a361110a610ff56000546002612021565b6046612050565b601754600160a060020a03166000908152600260205260409020549091506111329082612092565b60178054600160a060020a03908116600090815260026020526040808220949094559154169160008051602061212f8339815191529084905190815260200160405180910390a3601754600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111b257600080fd5b5b505050565b60145481565b600060045b6111cb610e7a565b60048111156111d657fe5b146111e057600080fd5b600160a060020a0384166000908152600260205260409020548290108015906112305750600160a060020a0380851660009081526003602090815260408083203390941683529290522054829010155b801561125c5750600160a060020a03831660009081526002602052604090205461125a8184612092565b115b1561134957600160a060020a0383166000908152600260205260409020546112849083612092565b600160a060020a0380851660009081526002602052604080822093909355908616815220546112b390836120ba565b600160a060020a03808616600090815260026020908152604080832094909455600381528382203390931682529190915220546112f090836120ba565b600160a060020a038086166000818152600360209081526040808320338616845290915290819020939093559085169160008051602061212f8339815191529085905190815260200160405180910390a350600161134d565b5060005b5b9392505050565b601281565b60045b611365610e7a565b600481111561137057fe5b1461137a57600080fd5b600654600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113c257600080fd5b6102c65a03f115156113d357600080fd5b5050506040518051600160a060020a0316151590506113f157600080fd5b60045460a060020a900460ff161561140857600080fd5b80151561141457600080fd5b600160a060020a03331660009081526002602052604090205481111561143957600080fd5b600160a060020a03331660009081526002602052604090205461145c90826120ba565b600160a060020a0333166000908152600260205260408120919091555461148390826120ba565b6000556007546114939082612092565b600755600654600160a060020a031663753e88e5338360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156114ec57600080fd5b6102c65a03f115156114fd57600080fd5b5050600654600160a060020a03908116915033167f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac8360405190815260200160405180910390a35b50565b60045460a060020a900460ff1681565b60155481565b600b80548290811061156c57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600d816002811061159d57fe5b0160005b5054905081565b425b90565b600654600160a060020a031681565b600554600160a060020a031681565b600c6020526000908152604090205460ff1681565b60015460ff1681565b60085460ff1681565b600160a060020a0381166000908152600260205260409020545b919050565b60135481565b60125481565b600454600160a060020a031681565b606481565b600a81565b60408051908101604052600481527f4442455400000000000000000000000000000000000000000000000000000000602082015281565b601754600160a060020a031681565b60045b611687610e7a565b600481111561169257fe5b1461169c57600080fd5b600654600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156116e457600080fd5b6102c65a03f115156116f557600080fd5b5050506040518051600160a060020a03161515905061171357600080fd5b60055433600160a060020a0390811691161461172e57600080fd5b60045460a060020a900460ff161561174557600080fd5b6004805474ff0000000000000000000000000000000000000000191660a060020a179055600654600160a060020a0316639a508c8e6040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156117a857600080fd5b6102c65a03f115156117b957600080fd5b50506006547fdefffffb60c1e133c8c4d138aca8eb2459d671a44b864db2b2febc8e2b5c17f891503390600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a15b565b60008060045b611820610e7a565b600481111561182b57fe5b1461183557600080fd5b50600160a060020a03331660009081526002602052604090205482811080159061185f5750600083115b156118ee5761186e81846120ba565b600160a060020a033381166000908152600260205260408082208490559187168152205490915061189f9084612092565b600160a060020a03808616600081815260026020526040908190209390935591339091169060008051602061212f8339815191529086905190815260200160405180910390a3600191506118f3565b600091505b5092915050565b60015b90565b60045433600160a060020a0390811691161461191b57600080fd5b60005b611926610e7a565b600481111561193157fe5b1461193b57600080fd5b600160a060020a0381166000908152600a602052604090205460ff161561196157600080fd5b600980546001810161197383826120e3565b916000526020600020900160005b8154600160a060020a038086166101009390930a838102910219909116179091556000908152600a60205260409020805460ff19166001179055505b5b50565b60075481565b600980548290811061156c57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b60045b611a04610e7a565b6004811115611a0f57fe5b14611a1957600080fd5b600160a060020a0381161515611a2e57600080fd5b60055433600160a060020a03908116911614611a4957600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055166361d3d7a66000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611ab457600080fd5b6102c65a03f11515611ac557600080fd5b505050604051805190501515611ada57600080fd5b600654600160a060020a0316639ef916ab6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515611b1957600080fd5b6102c65a03f11515611b2a57600080fd5b50506006547f7845d5aa74cc410e35571258d954f23b82276e160fe8c188fa80566580f279cc9150600160a060020a0316604051600160a060020a03909116815260200160405180910390a15b50565b60045433600160a060020a03908116911614611b9557600080fd5b60005b611ba0610e7a565b6004811115611bab57fe5b14611bb557600080fd5b60138190555b5b50565b600160a060020a038083166000908152600360209081526040808320938516835292905220545b92915050565b60045460009033600160a060020a03908116911614611c0a57600080fd5b60005b611c15610e7a565b6004811115611c2057fe5b14158015611c42575060015b611c34610e7a565b6004811115611c3f57fe5b14155b15611c4c57600080fd5b5060005b8151811015611d4157600c6000838381518110611c6957fe5b90602001906020020151600160a060020a0316815260208101919091526040016000205460ff161515611d3857600b805460018101611ca883826120e3565b916000526020600020900160005b848481518110611cc257fe5b90602001906020020151909190916101000a815481600160a060020a030219169083600160a060020a03160217905550506001600c6000848481518110611d0557fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790555b5b600101611c50565b5b5b5050565b601654600160a060020a031681565b600a6020526000908152604090205460ff1681565b601854600160a060020a031681565b600281565b60045b611d8a610e7a565b6004811115611d9557fe5b14611d9f57600080fd5b600160a060020a0381161515611db457600080fd5b60055433600160a060020a03908116911614611dcf57600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b611e0760005482612092565b6000819055601454901115611e1b57600080fd5b60025b611e26610e7a565b6004811115611e3157fe5b1415611fb657601154611e426115a8565b10158015611e5d57506011546201518001611e5b6115a8565b105b15611ef057600d60005b0160005b5054600160a060020a0333166000908152600f60205260408120611e96915b0160005b505483612092565b1115611ea157600080fd5b600160a060020a0333166000908152600f60205260408120611eca915b0160005b505482612092565b600160a060020a0333166000908152600f60205260408120905b0160005b50555b611fb6565b6011546201518001611f006115a8565b10158015611f1b57506011546202a30001611f196115a8565b105b15611fb657600d60015b0160005b5054600160a060020a0333166000908152600f60205260409020611f5a906001611e8a565b0160005b505483612092565b1115611f6557600080fd5b600160a060020a0333166000908152600f60205260409020611f94906001611ebe565b0160005b505482612092565b600160a060020a0333166000908152600f6020526040902060015b0160005b50555b5b5b5b600160a060020a038216600090815260026020526040902054611fdc9082612092565b600160a060020a03831660008181526002602052604080822093909355909160008051602061212f8339815191529084905190815260200160405180910390a35b5050565b6000828202612045841580612040575083858381151561203d57fe5b04145b6120d3565b8091505b5092915050565b60008061205f600084116120d3565b828481151561206a57fe5b049050612045838581151561207b57fe5b068285020185146120d3565b8091505b5092915050565b60008282016120458482108015906120405750838210155b6120d3565b8091505b5092915050565b60006120c8838311156120d3565b508082035b92915050565b801515610bb757600080fd5b5b50565b8154818355818115116111b2576000838152602090206111b291810190830161210d565b5b505050565b610f8e91905b808211156121275760008155600101612113565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820d9a2a62c16e2a50b0ed5ccb86cb2fbfeff37b0760de4c89994dd659a835690e1002960606040526000805460ff19169055341561001957600080fd5b60405160208061037a833981016040528080519150505b600160a060020a038116151561004557600080fd5b6000805460018054600160a060020a031916600160a060020a0385811691909117825561010060a860020a031990921661010033909316929092029190911760ff19161790556100ba6100a36401000000006100c481026101f41704565b6301e133806401000000006101f96100c982021704565b6002555b5061010e565b425b90565b60008282016100f38482108015906100e15750838210155b6401000000006102216100fe82021704565b8091505b5092915050565b80151561010a57600080fd5b5b50565b61025d8061011d6000396000f3006060604052361561003b5763ffffffff60e060020a600035041663a438b0e58114610043578063a69df4b514610068578063cd3faa6a1461007d575b5b600080fd5b005b341561004e57600080fd5b6100566100a4565b60405190815260200160405180910390f35b341561007357600080fd5b6100416100ac565b005b341561008857600080fd5b6100906101eb565b604051901515815260200160405180910390f35b6301e1338081565b6002546100b76101f4565b10156100c257600080fd5b6000805460015473ffffffffffffffffffffffffffffffffffffffff61010090920482169263a9059cbb92919091169083906370a082319030906040516020015260405160e060020a63ffffffff841602815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381600087803b151561014e57600080fd5b6102c65a03f1151561015f57600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff851602815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b15156101c257600080fd5b6102c65a03f115156101d357600080fd5b5050506040518051905015156101e857600080fd5b5b565b60005460ff1681565b425b90565b60008282016102168482108015906102115750838210155b610221565b8091505b5092915050565b80151561022d57600080fd5b5b505600a165627a7a723058208697dadd41b5838ed936227d9d121e93966f6622d6fc34db3d94461b77986ea00029000000000000000000000000c87b1bf162c1719e3ffdf34995d1853192d6633b000000000000000000000000818e6a1cdccc7db87e991d979aa8d3eec199b868000000000000000000000000818e6a1cdccc7db87e991d979aa8d3eec199b86800000000000000000000000000000000000000000000000000000000000008e80000000000000000000000000000000000000000000000000000000059c614800000000000000000000000000000000000000000000000000000000059eafe80

Deployed Bytecode

0x6060604052361561022a5763ffffffff60e060020a60003504166306d65af3811461023657806306fdde031461025b57806308e496ea146102e6578063095ea7b31461030b5780630fb9dcd51461034157806318160ddd146103695780631865c57d1461038e5780631afaa8bf146103c55780631df93558146103ea5780631ed692c01461040f5780631f97c00e1461042457806323b872dd14610449578063313ce567146102e657806345977d03146104aa57806347858c79146104c2578063485f7a7e146104e95780634eb12d7f1461050e57806354da51ad14610540578063557ed1ba146105685780635de4ccb01461058d578063600440cb146105bc57806363193251146105eb57806367a4e7c41461061e57806368f673301461064557806370a082311461066c578063728d5e941461069d57806374eedd46146106c257806385f2aef2146106e75780638a9cb361146107165780638b2de7961461073b57806395d89b41146107605780639a45a263146107eb5780639a508c8e1461081a578063a9059cbb1461082f578063a95ff7d514610865578063aedc0c5c1461088c578063c752ff62146108ad578063d226d723146108d2578063d7e7088a14610904578063da88a83114610925578063dd62ed3e1461093d578063e244fe8914610974578063e8b5e51f1461022a578063eb08aa3b146109cf578063f08d1c34146109fe578063f4660ff514610a31578063f99f977c14610a60578063ffeb7d7514610a85575b5b610233610aa6565b5b005b341561024157600080fd5b610249610bbb565b60405190815260200160405180910390f35b341561026657600080fd5b61026e610bc1565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102ab5780820151818401525b602001610292565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102f157600080fd5b610249610bf8565b60405190815260200160405180910390f35b341561031657600080fd5b61032d600160a060020a0360043516602435610bfd565b604051901515815260200160405180910390f35b341561034c57600080fd5b610249600435610c89565b60405190815260200160405180910390f35b341561037457600080fd5b610249610e74565b60405190815260200160405180910390f35b341561039957600080fd5b6103a1610e7a565b604051808260048111156103b157fe5b60ff16815260200191505060405180910390f35b34156103d057600080fd5b610249610f97565b60405190815260200160405180910390f35b34156103f557600080fd5b610249610f9c565b60405190815260200160405180910390f35b341561041a57600080fd5b610233610fa2565b005b341561042f57600080fd5b6102496111b8565b60405190815260200160405180910390f35b341561045457600080fd5b61032d600160a060020a03600435811690602435166044356111be565b604051901515815260200160405180910390f35b34156102f157600080fd5b610249610bf8565b60405190815260200160405180910390f35b34156104b557600080fd5b61023360043561135a565b005b34156104cd57600080fd5b61032d611548565b604051901515815260200160405180910390f35b34156104f457600080fd5b610249611558565b60405190815260200160405180910390f35b341561051957600080fd5b61052460043561155e565b604051600160a060020a03909116815260200160405180910390f35b341561054b57600080fd5b610249600435611590565b60405190815260200160405180910390f35b341561057357600080fd5b6102496115a8565b60405190815260200160405180910390f35b341561059857600080fd5b6105246115ad565b604051600160a060020a03909116815260200160405180910390f35b34156105c757600080fd5b6105246115bc565b604051600160a060020a03909116815260200160405180910390f35b34156105f657600080fd5b61032d600160a060020a03600435166115cb565b604051901515815260200160405180910390f35b341561062957600080fd5b61032d6115e0565b604051901515815260200160405180910390f35b341561065057600080fd5b61032d6115e9565b604051901515815260200160405180910390f35b341561067757600080fd5b610249600160a060020a03600435166115f2565b60405190815260200160405180910390f35b34156106a857600080fd5b610249611611565b60405190815260200160405180910390f35b34156106cd57600080fd5b610249611617565b60405190815260200160405180910390f35b34156106f257600080fd5b61052461161d565b604051600160a060020a03909116815260200160405180910390f35b341561072157600080fd5b61024961162c565b60405190815260200160405180910390f35b341561074657600080fd5b610249611631565b60405190815260200160405180910390f35b341561076b57600080fd5b61026e611636565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102ab5780820151818401525b602001610292565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156107f657600080fd5b61052461166d565b604051600160a060020a03909116815260200160405180910390f35b341561082557600080fd5b61023361167c565b005b341561083a57600080fd5b61032d600160a060020a0360043516602435611812565b604051901515815260200160405180910390f35b341561087057600080fd5b61032d6118fa565b604051901515815260200160405180910390f35b341561089757600080fd5b610233600160a060020a0360043516611900565b005b34156108b857600080fd5b6102496119c1565b60405190815260200160405180910390f35b34156108dd57600080fd5b6105246004356119c7565b604051600160a060020a03909116815260200160405180910390f35b341561090f57600080fd5b610233600160a060020a03600435166119f9565b005b341561093057600080fd5b610233600435611b7a565b005b341561094857600080fd5b610249600160a060020a0360043581169060243516611bbf565b60405190815260200160405180910390f35b341561097f57600080fd5b6102336004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650611bec95505050505050565b005b610233610aa6565b005b34156109da57600080fd5b610524611d47565b604051600160a060020a03909116815260200160405180910390f35b3415610a0957600080fd5b61032d600160a060020a0360043516611d56565b604051901515815260200160405180910390f35b3415610a3c57600080fd5b610524611d6b565b604051600160a060020a03909116815260200160405180910390f35b3415610a6b57600080fd5b610249611d7a565b60405190815260200160405180910390f35b3415610a9057600080fd5b610233600160a060020a0360043516611d7f565b005b600060015b610ab3610e7a565b6004811115610abe57fe5b14158015610ae0575060025b610ad2610e7a565b6004811115610add57fe5b14155b8015610b00575060035b610af2610e7a565b6004811115610afd57fe5b14155b15610b0a57600080fd5b60015b610b15610e7a565b6004811115610b2057fe5b148015610b465750600160a060020a0333166000908152600a602052604090205460ff16155b15610b5057600080fd5b60025b610b5b610e7a565b6004811115610b6657fe5b148015610b8c5750600160a060020a0333166000908152600c602052604090205460ff16155b15610b9657600080fd5b341515610ba257600080fd5b610bab34610c89565b9050610bb73382611dfb565b5b50565b60105481565b60408051908101604052601081527f446563656e742e42657420546f6b656e00000000000000000000000000000000602082015281565b601281565b600060045b610c0a610e7a565b6004811115610c1557fe5b14610c1f57600080fd5b600160a060020a03338116600081815260036020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b6000601054610c966115a8565b10158015610cac5750601154610caa6115a8565b105b15610cd857610cd1610cca83610cc56013546078612021565b612021565b6064612050565b9050610e69565b601154610ce36115a8565b10158015610cfe57506011546201518001610cfc6115a8565b105b15610d2a57610cd1610cca83610cc56013546078612021565b612021565b6064612050565b9050610e69565b6011546201518001610d3a6115a8565b10158015610d5557506011546202a30001610d536115a8565b105b15610d8157610cd1610cca83610cc56013546078612021565b612021565b6064612050565b9050610e69565b6011546202a30001610d916115a8565b10158015610dac575060115462093a8001610daa6115a8565b105b15610dd857610cd1610cca83610cc5601354606e612021565b612021565b6064612050565b9050610e69565b60115462093a8001610de86115a8565b10158015610e0357506011546212750001610e016115a8565b105b15610e2f57610cd1610cca83610cc56013546069612021565b612021565b6064612050565b9050610e69565b6011546212750001610e3f6115a8565b10158015610e555750601254610e536115a8565b105b15610e6957610cd182601354612021565b90505b5b5b5b5b5b5b919050565b60005481565b60085460009060ff1615610e9057506004610f8e565b601054610e9b6115a8565b1015610ea957506000610f8e565b601054610eb46115a8565b10158015610eca5750601154610ec86115a8565b105b8015610ed95750601454600054105b15610ee657506001610f8e565b601154610ef16115a8565b10158015610f0c57506011546202a30001610f0a6115a8565b105b8015610f1b5750601454600054105b15610f2857506002610f8e565b6011546202a30001610f386115a8565b10158015610f4e5750601254610f4c6115a8565b105b8015610f5d5750601454600054105b15610f6a57506003610f8e565b601254610f756115a8565b101580610f855750601454600054145b15610f8e575060045b5b5b5b5b5b5b90565b604681565b60115481565b6000808060045b610fb1610e7a565b6004811115610fbc57fe5b14610fc657600080fd5b60085460ff1615610fd657600080fd5b6008805460ff19166001179055600054610ffc90610ff5906012612021565b6046612050565b601854600160a060020a03166000908152600260205260409020549093506110249084612092565b60188054600160a060020a03908116600090815260026020526040808220949094559154169160008051602061212f8339815191529086905190815260200160405180910390a3611082610ff5600054600a612021565b6046612050565b601754600160a060020a03166000908152600260205260409020549092506110aa9083612092565b601854600160a060020a03908116600090815260026020526040808220939093556017549091169160008051602061212f8339815191529085905190815260200160405180910390a361110a610ff56000546002612021565b6046612050565b601754600160a060020a03166000908152600260205260409020549091506111329082612092565b60178054600160a060020a03908116600090815260026020526040808220949094559154169160008051602061212f8339815191529084905190815260200160405180910390a3601754600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111b257600080fd5b5b505050565b60145481565b600060045b6111cb610e7a565b60048111156111d657fe5b146111e057600080fd5b600160a060020a0384166000908152600260205260409020548290108015906112305750600160a060020a0380851660009081526003602090815260408083203390941683529290522054829010155b801561125c5750600160a060020a03831660009081526002602052604090205461125a8184612092565b115b1561134957600160a060020a0383166000908152600260205260409020546112849083612092565b600160a060020a0380851660009081526002602052604080822093909355908616815220546112b390836120ba565b600160a060020a03808616600090815260026020908152604080832094909455600381528382203390931682529190915220546112f090836120ba565b600160a060020a038086166000818152600360209081526040808320338616845290915290819020939093559085169160008051602061212f8339815191529085905190815260200160405180910390a350600161134d565b5060005b5b9392505050565b601281565b60045b611365610e7a565b600481111561137057fe5b1461137a57600080fd5b600654600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113c257600080fd5b6102c65a03f115156113d357600080fd5b5050506040518051600160a060020a0316151590506113f157600080fd5b60045460a060020a900460ff161561140857600080fd5b80151561141457600080fd5b600160a060020a03331660009081526002602052604090205481111561143957600080fd5b600160a060020a03331660009081526002602052604090205461145c90826120ba565b600160a060020a0333166000908152600260205260408120919091555461148390826120ba565b6000556007546114939082612092565b600755600654600160a060020a031663753e88e5338360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156114ec57600080fd5b6102c65a03f115156114fd57600080fd5b5050600654600160a060020a03908116915033167f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac8360405190815260200160405180910390a35b50565b60045460a060020a900460ff1681565b60155481565b600b80548290811061156c57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600d816002811061159d57fe5b0160005b5054905081565b425b90565b600654600160a060020a031681565b600554600160a060020a031681565b600c6020526000908152604090205460ff1681565b60015460ff1681565b60085460ff1681565b600160a060020a0381166000908152600260205260409020545b919050565b60135481565b60125481565b600454600160a060020a031681565b606481565b600a81565b60408051908101604052600481527f4442455400000000000000000000000000000000000000000000000000000000602082015281565b601754600160a060020a031681565b60045b611687610e7a565b600481111561169257fe5b1461169c57600080fd5b600654600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156116e457600080fd5b6102c65a03f115156116f557600080fd5b5050506040518051600160a060020a03161515905061171357600080fd5b60055433600160a060020a0390811691161461172e57600080fd5b60045460a060020a900460ff161561174557600080fd5b6004805474ff0000000000000000000000000000000000000000191660a060020a179055600654600160a060020a0316639a508c8e6040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156117a857600080fd5b6102c65a03f115156117b957600080fd5b50506006547fdefffffb60c1e133c8c4d138aca8eb2459d671a44b864db2b2febc8e2b5c17f891503390600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a15b565b60008060045b611820610e7a565b600481111561182b57fe5b1461183557600080fd5b50600160a060020a03331660009081526002602052604090205482811080159061185f5750600083115b156118ee5761186e81846120ba565b600160a060020a033381166000908152600260205260408082208490559187168152205490915061189f9084612092565b600160a060020a03808616600081815260026020526040908190209390935591339091169060008051602061212f8339815191529086905190815260200160405180910390a3600191506118f3565b600091505b5092915050565b60015b90565b60045433600160a060020a0390811691161461191b57600080fd5b60005b611926610e7a565b600481111561193157fe5b1461193b57600080fd5b600160a060020a0381166000908152600a602052604090205460ff161561196157600080fd5b600980546001810161197383826120e3565b916000526020600020900160005b8154600160a060020a038086166101009390930a838102910219909116179091556000908152600a60205260409020805460ff19166001179055505b5b50565b60075481565b600980548290811061156c57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b60045b611a04610e7a565b6004811115611a0f57fe5b14611a1957600080fd5b600160a060020a0381161515611a2e57600080fd5b60055433600160a060020a03908116911614611a4957600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055166361d3d7a66000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611ab457600080fd5b6102c65a03f11515611ac557600080fd5b505050604051805190501515611ada57600080fd5b600654600160a060020a0316639ef916ab6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515611b1957600080fd5b6102c65a03f11515611b2a57600080fd5b50506006547f7845d5aa74cc410e35571258d954f23b82276e160fe8c188fa80566580f279cc9150600160a060020a0316604051600160a060020a03909116815260200160405180910390a15b50565b60045433600160a060020a03908116911614611b9557600080fd5b60005b611ba0610e7a565b6004811115611bab57fe5b14611bb557600080fd5b60138190555b5b50565b600160a060020a038083166000908152600360209081526040808320938516835292905220545b92915050565b60045460009033600160a060020a03908116911614611c0a57600080fd5b60005b611c15610e7a565b6004811115611c2057fe5b14158015611c42575060015b611c34610e7a565b6004811115611c3f57fe5b14155b15611c4c57600080fd5b5060005b8151811015611d4157600c6000838381518110611c6957fe5b90602001906020020151600160a060020a0316815260208101919091526040016000205460ff161515611d3857600b805460018101611ca883826120e3565b916000526020600020900160005b848481518110611cc257fe5b90602001906020020151909190916101000a815481600160a060020a030219169083600160a060020a03160217905550506001600c6000848481518110611d0557fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790555b5b600101611c50565b5b5b5050565b601654600160a060020a031681565b600a6020526000908152604090205460ff1681565b601854600160a060020a031681565b600281565b60045b611d8a610e7a565b6004811115611d9557fe5b14611d9f57600080fd5b600160a060020a0381161515611db457600080fd5b60055433600160a060020a03908116911614611dcf57600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b611e0760005482612092565b6000819055601454901115611e1b57600080fd5b60025b611e26610e7a565b6004811115611e3157fe5b1415611fb657601154611e426115a8565b10158015611e5d57506011546201518001611e5b6115a8565b105b15611ef057600d60005b0160005b5054600160a060020a0333166000908152600f60205260408120611e96915b0160005b505483612092565b1115611ea157600080fd5b600160a060020a0333166000908152600f60205260408120611eca915b0160005b505482612092565b600160a060020a0333166000908152600f60205260408120905b0160005b50555b611fb6565b6011546201518001611f006115a8565b10158015611f1b57506011546202a30001611f196115a8565b105b15611fb657600d60015b0160005b5054600160a060020a0333166000908152600f60205260409020611f5a906001611e8a565b0160005b505483612092565b1115611f6557600080fd5b600160a060020a0333166000908152600f60205260409020611f94906001611ebe565b0160005b505482612092565b600160a060020a0333166000908152600f6020526040902060015b0160005b50555b5b5b5b600160a060020a038216600090815260026020526040902054611fdc9082612092565b600160a060020a03831660008181526002602052604080822093909355909160008051602061212f8339815191529084905190815260200160405180910390a35b5050565b6000828202612045841580612040575083858381151561203d57fe5b04145b6120d3565b8091505b5092915050565b60008061205f600084116120d3565b828481151561206a57fe5b049050612045838581151561207b57fe5b068285020185146120d3565b8091505b5092915050565b60008282016120458482108015906120405750838210155b6120d3565b8091505b5092915050565b60006120c8838311156120d3565b508082035b92915050565b801515610bb757600080fd5b5b50565b8154818355818115116111b2576000838152602090206111b291810190830161210d565b5b505050565b610f8e91905b808211156121275760008155600101612113565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820d9a2a62c16e2a50b0ed5ccb86cb2fbfeff37b0760de4c89994dd659a835690e10029

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

000000000000000000000000c87b1bf162c1719e3ffdf34995d1853192d6633b000000000000000000000000818e6a1cdccc7db87e991d979aa8d3eec199b868000000000000000000000000818e6a1cdccc7db87e991d979aa8d3eec199b86800000000000000000000000000000000000000000000000000000000000008e80000000000000000000000000000000000000000000000000000000059c614800000000000000000000000000000000000000000000000000000000059eafe80

-----Decoded View---------------
Arg [0] : _decentBetMultisig (address): 0xc87B1bF162C1719E3ffdf34995d1853192D6633B
Arg [1] : _upgradeMaster (address): 0x818E6a1CDCcc7dB87E991d979AA8d3eec199b868
Arg [2] : _team (address): 0x818E6a1CDCcc7dB87E991d979AA8d3eec199b868
Arg [3] : _baseTokensPerEther (uint256): 2280
Arg [4] : _fundingStartTime (uint256): 1506153600
Arg [5] : _fundingEndTime (uint256): 1508572800

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000c87b1bf162c1719e3ffdf34995d1853192d6633b
Arg [1] : 000000000000000000000000818e6a1cdccc7db87e991d979aa8d3eec199b868
Arg [2] : 000000000000000000000000818e6a1cdccc7db87e991d979aa8d3eec199b868
Arg [3] : 00000000000000000000000000000000000000000000000000000000000008e8
Arg [4] : 0000000000000000000000000000000000000000000000000000000059c61480
Arg [5] : 0000000000000000000000000000000000000000000000000000000059eafe80


Swarm Source

bzzr://8697dadd41b5838ed936227d9d121e93966f6622d6fc34db3d94461b77986ea0
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.