ETH Price: $1,975.54 (+0.35%)
Gas: 0.04 Gwei
 

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve245048802026-02-21 11:16:1120 hrs ago1771672571IN
OpenANX Token
0 ETH0.0000481.03628573
Transfer244578412026-02-14 21:52:477 days ago1771105967IN
OpenANX Token
0 ETH0.000059681.04007553
Approve244293482026-02-10 22:27:3511 days ago1770762455IN
OpenANX Token
0 ETH0.000095142.0638213
Approve244189732026-02-09 11:41:3512 days ago1770637295IN
OpenANX Token
0 ETH0.000007460.16198365
Approve243937952026-02-05 23:05:4716 days ago1770332747IN
OpenANX Token
0 ETH0.000172153.73154909
Approve243624162026-02-01 13:48:5920 days ago1769953739IN
OpenANX Token
0 ETH0.000055981.20838253
Transfer243289562026-01-27 21:48:3525 days ago1769550515IN
OpenANX Token
0 ETH0.000063151.10032851
Transfer243117582026-01-25 12:14:4727 days ago1769343287IN
OpenANX Token
0 ETH0.000059631.03897251
Transfer243036882026-01-24 9:14:2328 days ago1769246063IN
OpenANX Token
0 ETH0.000087721.5284697
Transfer242862652026-01-21 22:51:2331 days ago1769035883IN
OpenANX Token
0 ETH0.000041971.04171689
Approve242472602026-01-16 12:22:3536 days ago1768566155IN
OpenANX Token
0 ETH0.000025270.54470494
Transfer242432132026-01-15 22:51:1137 days ago1768517471IN
OpenANX Token
0 ETH0.000060081.04708996
Transfer242311082026-01-14 6:19:3539 days ago1768371575IN
OpenANX Token
0 ETH0.000002030.03545902
Transfer242084622026-01-11 2:24:5942 days ago1768098299IN
OpenANX Token
0 ETH0.00004031
Transfer242074312026-01-10 22:57:3542 days ago1768085855IN
OpenANX Token
0 ETH0.000035491
Transfer242074162026-01-10 22:54:3542 days ago1768085675IN
OpenANX Token
0 ETH0.00000240.0418375
Transfer242074012026-01-10 22:51:3542 days ago1768085495IN
OpenANX Token
0 ETH0.00004031
Transfer242067402026-01-10 20:38:4742 days ago1768077527IN
OpenANX Token
0 ETH0.000035491
Transfer242067272026-01-10 20:36:1142 days ago1768077371IN
OpenANX Token
0 ETH0.000001750.03049175
Transfer242065052026-01-10 19:51:4742 days ago1768074707IN
OpenANX Token
0 ETH0.00004031
Transfer242058962026-01-10 17:49:3542 days ago1768067375IN
OpenANX Token
0 ETH0.000041771.03654014
Transfer242058902026-01-10 17:48:2342 days ago1768067303IN
OpenANX Token
0 ETH0.000059351.03390789
Transfer242032662026-01-10 9:01:2342 days ago1768035683IN
OpenANX Token
0 ETH0.000035491
Transfer242032532026-01-10 8:58:4742 days ago1768035527IN
OpenANX Token
0 ETH0.000001840.03223162
Transfer241999922026-01-09 22:04:1143 days ago1767996251IN
OpenANX Token
0 ETH0.000059811.04197983
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer39713232017-07-04 5:00:333155 days ago1499144433
OpenANX Token
0.33 ETH
Transfer39713182017-07-04 4:59:133155 days ago1499144353
OpenANX Token
1 ETH
Transfer39713152017-07-04 4:58:403155 days ago1499144320
OpenANX Token
0.39867733 ETH
Transfer39713132017-07-04 4:58:203155 days ago1499144300
OpenANX Token
0.6 ETH
Transfer39713132017-07-04 4:58:203155 days ago1499144300
OpenANX Token
0.5 ETH
Transfer39713132017-07-04 4:58:203155 days ago1499144300
OpenANX Token
2 ETH
Transfer39713092017-07-04 4:57:093155 days ago1499144229
OpenANX Token
0.1 ETH
Transfer39713042017-07-04 4:56:093155 days ago1499144169
OpenANX Token
2.1 ETH
Transfer39713042017-07-04 4:56:093155 days ago1499144169
OpenANX Token
6.95 ETH
Transfer39713032017-07-04 4:55:543155 days ago1499144154
OpenANX Token
1.015 ETH
Transfer39713012017-07-04 4:55:013155 days ago1499144101
OpenANX Token
10.08 ETH
Transfer39712982017-07-04 4:54:223155 days ago1499144062
OpenANX Token
1.01 ETH
Transfer39712952017-07-04 4:53:313155 days ago1499144011
OpenANX Token
1 ETH
Transfer39712922017-07-04 4:52:253155 days ago1499143945
OpenANX Token
2.1908 ETH
Transfer39712872017-07-04 4:51:353155 days ago1499143895
OpenANX Token
1.989 ETH
Transfer39712842017-07-04 4:50:163155 days ago1499143816
OpenANX Token
1 ETH
Transfer39712842017-07-04 4:50:163155 days ago1499143816
OpenANX Token
0.5 ETH
Transfer39712792017-07-04 4:49:023155 days ago1499143742
OpenANX Token
1 ETH
Transfer39712782017-07-04 4:48:543155 days ago1499143734
OpenANX Token
5.01 ETH
Transfer39712782017-07-04 4:48:543155 days ago1499143734
OpenANX Token
1 ETH
Transfer39712782017-07-04 4:48:543155 days ago1499143734
OpenANX Token
0.99 ETH
Transfer39712762017-07-04 4:47:493155 days ago1499143669
OpenANX Token
0.345 ETH
Transfer39712732017-07-04 4:47:393155 days ago1499143659
OpenANX Token
0.039 ETH
Transfer39712732017-07-04 4:47:393155 days ago1499143659
OpenANX Token
2 ETH
Transfer39712732017-07-04 4:47:393155 days ago1499143659
OpenANX Token
6 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OpenANXToken

Compiler Version
v0.4.11+commit.68ef5810

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2017-06-21
*/

pragma solidity ^0.4.11;

// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract - ERC20 Token Interface
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/issues/20
// ----------------------------------------------------------------------------
contract ERC20Interface {
    uint public totalSupply;
    function balanceOf(address _owner) constant returns (uint balance);
    function transfer(address _to, uint _value) returns (bool success);
    function transferFrom(address _from, address _to, uint _value) 
        returns (bool success);
    function approve(address _spender, uint _value) returns (bool success);
    function allowance(address _owner, address _spender) constant 
        returns (uint remaining);
    event Transfer(address indexed _from, address indexed _to, uint _value);
    event Approval(address indexed _owner, address indexed _spender, 
        uint _value);
}


// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract - Owned contracts
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract Owned {

    // ------------------------------------------------------------------------
    // Current owner, and proposed new owner
    // ------------------------------------------------------------------------
    address public owner;
    address public newOwner;

    // ------------------------------------------------------------------------
    // Constructor - assign creator as the owner
    // ------------------------------------------------------------------------
    function Owned() {
        owner = msg.sender;
    }


    // ------------------------------------------------------------------------
    // Modifier to mark that a function can only be executed by the owner
    // ------------------------------------------------------------------------
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }


    // ------------------------------------------------------------------------
    // Owner can initiate transfer of contract to a new owner
    // ------------------------------------------------------------------------
    function transferOwnership(address _newOwner) onlyOwner {
        newOwner = _newOwner;
    }

 
    // ------------------------------------------------------------------------
    // New owner has to accept transfer of contract
    // ------------------------------------------------------------------------
    function acceptOwnership() {
        require(msg.sender == newOwner);
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
    event OwnershipTransferred(address indexed _from, address indexed _to);
}


// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// Safe maths, borrowed from OpenZeppelin
// ----------------------------------------------------------------------------
library SafeMath {

    // ------------------------------------------------------------------------
    // Add a number to another number, checking for overflows
    // ------------------------------------------------------------------------
    function add(uint a, uint b) internal returns (uint) {
        uint c = a + b;
        assert(c >= a && c >= b);
        return c;
    }

    // ------------------------------------------------------------------------
    // Subtract a number from another number, checking for underflows
    // ------------------------------------------------------------------------
    function sub(uint a, uint b) internal returns (uint) {
        assert(b <= a);
        return a - b;
    }
}


// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract - Configuration
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// openANX crowdsale token smart contract - configuration parameters
// ----------------------------------------------------------------------------
contract OpenANXTokenConfig {

    // ------------------------------------------------------------------------
    // Token symbol(), name() and decimals()
    // ------------------------------------------------------------------------
    string public constant SYMBOL = "OAX";
    string public constant NAME = "openANX Token";
    uint8 public constant DECIMALS = 18;


    // ------------------------------------------------------------------------
    // Decimal factor for multiplications from OAX unit to OAX natural unit
    // ------------------------------------------------------------------------
    uint public constant DECIMALSFACTOR = 10**uint(DECIMALS);

    // ------------------------------------------------------------------------
    // Tranche 1 soft cap and hard cap, and total tokens
    // ------------------------------------------------------------------------
    uint public constant TOKENS_SOFT_CAP = 13000000 * DECIMALSFACTOR;
    uint public constant TOKENS_HARD_CAP = 30000000 * DECIMALSFACTOR;
    uint public constant TOKENS_TOTAL = 100000000 * DECIMALSFACTOR;

    // ------------------------------------------------------------------------
    // Tranche 1 crowdsale start date and end date
    // Do not use the `now` function here
    // Start - Thursday, 22-Jun-17 13:00:00 UTC / 1pm GMT 22 June 2017
    // End - Saturday, 22-Jul-17 13:00:00 UTC / 1pm GMT 22 July 2017 
    // ------------------------------------------------------------------------
    uint public constant START_DATE = 1498136400;
    uint public constant END_DATE = 1500728400;

    // ------------------------------------------------------------------------
    // 1 year and 2 year dates for locked tokens
    // Do not use the `now` function here 
    // ------------------------------------------------------------------------
    uint public constant LOCKED_1Y_DATE = START_DATE + 365 days;
    uint public constant LOCKED_2Y_DATE = START_DATE + 2 * 365 days;

    // ------------------------------------------------------------------------
    // Individual transaction contribution min and max amounts
    // Set to 0 to switch off, or `x ether`
    // ------------------------------------------------------------------------
    uint public CONTRIBUTIONS_MIN = 0 ether;
    uint public CONTRIBUTIONS_MAX = 0 ether;
}


// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract - locked tokens
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------



// ----------------------------------------------------------------------------
// Contract that holds the 1Y and 2Y locked token information
// ----------------------------------------------------------------------------
contract LockedTokens is OpenANXTokenConfig {
    using SafeMath for uint;

    // ------------------------------------------------------------------------
    // 1y and 2y locked totals, not including unsold tranche1 and all tranche2
    // tokens
    // ------------------------------------------------------------------------
    uint public constant TOKENS_LOCKED_1Y_TOTAL = 14000000 * DECIMALSFACTOR;
    uint public constant TOKENS_LOCKED_2Y_TOTAL = 26000000 * DECIMALSFACTOR;
    
    // ------------------------------------------------------------------------
    // Tokens locked for 1 year for sale 2 in the following account
    // ------------------------------------------------------------------------
    address public TRANCHE2_ACCOUNT = 0x813703Eb676f3B6C76dA75cBa0cbC49DdbCA7B37;

    // ------------------------------------------------------------------------
    // Current totalSupply of 1y and 2y locked tokens
    // ------------------------------------------------------------------------
    uint public totalSupplyLocked1Y;
    uint public totalSupplyLocked2Y;

    // ------------------------------------------------------------------------
    // Locked tokens mapping
    // ------------------------------------------------------------------------
    mapping (address => uint) public balancesLocked1Y;
    mapping (address => uint) public balancesLocked2Y;

    // ------------------------------------------------------------------------
    // Address of openANX crowdsale token contract
    // ------------------------------------------------------------------------
    ERC20Interface public tokenContract;


    // ------------------------------------------------------------------------
    // Constructor - called by crowdsale token contract
    // ------------------------------------------------------------------------
    function LockedTokens(address _tokenContract) {
        tokenContract = ERC20Interface(_tokenContract);

        // --- 1y locked tokens ---

        // Confirm 1Y totals        
        add1Y(0x4beE088efDBCC610EEEa101ded7204150AF1C8b9,1000000 * DECIMALSFACTOR);
        add1Y(0x839551201f866907Eb5017bE79cEB48aDa58650c,925000 * DECIMALSFACTOR);
        add1Y(0xa92d4Cd3412862386c234Be572Fe4A8FA4BB09c6,925000 * DECIMALSFACTOR);
        add1Y(0xECf2B5fce33007E5669D63de39a4c663e56958dD,925000 * DECIMALSFACTOR);
        add1Y(0xD6B7695bc74E2C950eb953316359Eab283C5Bda8,925000 * DECIMALSFACTOR);
        add1Y(0xBE3463Eae26398D55a7118683079264BcF3ab24B,150000 * DECIMALSFACTOR);
        add1Y(0xf47428Fb9A61c9f3312cB035AEE049FBa76ba62a,150000 * DECIMALSFACTOR);
        add1Y(0xfCcc77165D822Ef9004714d829bDC267C743658a,50000 * DECIMALSFACTOR);
        add1Y(0xaf8df2aCAec3d5d92dE42a6c19d7706A4F3E8D8b,50000 * DECIMALSFACTOR);
        add1Y(0x22a6f9693856374BF2922cd837d07F6670E7FA4d,250000 * DECIMALSFACTOR);
        add1Y(0x3F720Ca8FfF598F00a51DE32A8Cb58Ca73f22aDe,50000 * DECIMALSFACTOR);
        add1Y(0xBd0D1954B301E414F0b5D0827A69EC5dD559e50B,50000 * DECIMALSFACTOR);
        add1Y(0x2ad6B011FEcDE830c9cc4dc0d0b77F055D6b5990,50000 * DECIMALSFACTOR);
        add1Y(0x0c5cD0E971cA18a0F0E0d581f4B93FaD31D608B0,2000085 * DECIMALSFACTOR);
        add1Y(0xFaaDC4d80Eaf430Ab604337CB67d77eC763D3e23,200248 * DECIMALSFACTOR);
        add1Y(0xDAef46f89c264182Cd87Ce93B620B63c7AfB14f7,1616920 * DECIMALSFACTOR);
        add1Y(0x19cc59C30cE54706633dC29EdEbAE1efF1757b25,224980 * DECIMALSFACTOR);
        add1Y(0xa130fE5D399104CA5AF168fbbBBe19F95d739741,745918 * DECIMALSFACTOR);
        add1Y(0xC0cD1bf6F2939095a56B0DFa085Ba2886b84E7d1,745918 * DECIMALSFACTOR);
        add1Y(0xf2C26e79eD264B0E3e5A5DFb1Dd91EA61f512C6e,745918 * DECIMALSFACTOR);
        add1Y(0x5F876a8A5F1B66fbf3D0D119075b62aF4386e319,745918 * DECIMALSFACTOR);
        add1Y(0xb8E046570800Dd76720aF6d42d3cCae451F54f15,745920 * DECIMALSFACTOR);
        add1Y(0xA524fa65Aac4647fa7bA2c20D22F64450c351bBd,714286 * DECIMALSFACTOR);
        add1Y(0x27209b276C15a936BCE08D7D70f0c97aeb3CE8c3,13889 * DECIMALSFACTOR);

        assert(totalSupplyLocked1Y == TOKENS_LOCKED_1Y_TOTAL);

        // --- 2y locked tokens ---
        add2Y(0x4beE088efDBCC610EEEa101ded7204150AF1C8b9,1000000 * DECIMALSFACTOR);
        add2Y(0x839551201f866907Eb5017bE79cEB48aDa58650c,925000 * DECIMALSFACTOR);
        add2Y(0xa92d4Cd3412862386c234Be572Fe4A8FA4BB09c6,925000 * DECIMALSFACTOR);
        add2Y(0xECf2B5fce33007E5669D63de39a4c663e56958dD,925000 * DECIMALSFACTOR);
        add2Y(0xD6B7695bc74E2C950eb953316359Eab283C5Bda8,925000 * DECIMALSFACTOR);
        add2Y(0xBE3463Eae26398D55a7118683079264BcF3ab24B,150000 * DECIMALSFACTOR);
        add2Y(0xf47428Fb9A61c9f3312cB035AEE049FBa76ba62a,150000 * DECIMALSFACTOR);
        add2Y(0xfCcc77165D822Ef9004714d829bDC267C743658a,50000 * DECIMALSFACTOR);
        add2Y(0xDAef46f89c264182Cd87Ce93B620B63c7AfB14f7,500000 * DECIMALSFACTOR);
        add2Y(0xaf8df2aCAec3d5d92dE42a6c19d7706A4F3E8D8b,50000 * DECIMALSFACTOR);
        add2Y(0x22a6f9693856374BF2922cd837d07F6670E7FA4d,250000 * DECIMALSFACTOR);
        add2Y(0x3F720Ca8FfF598F00a51DE32A8Cb58Ca73f22aDe,50000 * DECIMALSFACTOR);
        add2Y(0xBd0D1954B301E414F0b5D0827A69EC5dD559e50B,50000 * DECIMALSFACTOR);
        add2Y(0x2ad6B011FEcDE830c9cc4dc0d0b77F055D6b5990,50000 * DECIMALSFACTOR);

        //treasury
        add2Y(0x990a2D172398007fcbd5078D84696BdD8cCDf7b2,20000000 * DECIMALSFACTOR);

        assert(totalSupplyLocked2Y == TOKENS_LOCKED_2Y_TOTAL);
    }


    // ------------------------------------------------------------------------
    // Add remaining tokens to locked 1y balances
    // ------------------------------------------------------------------------
    function addRemainingTokens() {
        // Only the crowdsale contract can call this function
        require(msg.sender == address(tokenContract));
        // Total tokens to be created
        uint remainingTokens = TOKENS_TOTAL;
        // Minus precommitments and public crowdsale tokens
        remainingTokens = remainingTokens.sub(tokenContract.totalSupply());
        // Minus 1y locked tokens
        remainingTokens = remainingTokens.sub(totalSupplyLocked1Y);
        // Minus 2y locked tokens
        remainingTokens = remainingTokens.sub(totalSupplyLocked2Y);
        // Unsold tranche1 and tranche2 tokens to be locked for 1y 
        add1Y(TRANCHE2_ACCOUNT, remainingTokens);
    }


    // ------------------------------------------------------------------------
    // Add to 1y locked balances and totalSupply
    // ------------------------------------------------------------------------
    function add1Y(address account, uint value) private {
        balancesLocked1Y[account] = balancesLocked1Y[account].add(value);
        totalSupplyLocked1Y = totalSupplyLocked1Y.add(value);
    }


    // ------------------------------------------------------------------------
    // Add to 2y locked balances and totalSupply
    // ------------------------------------------------------------------------
    function add2Y(address account, uint value) private {
        balancesLocked2Y[account] = balancesLocked2Y[account].add(value);
        totalSupplyLocked2Y = totalSupplyLocked2Y.add(value);
    }


    // ------------------------------------------------------------------------
    // 1y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked1Y(address account) constant returns (uint balance) {
        return balancesLocked1Y[account];
    }


    // ------------------------------------------------------------------------
    // 2y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked2Y(address account) constant returns (uint balance) {
        return balancesLocked2Y[account];
    }


    // ------------------------------------------------------------------------
    // 1y and 2y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked(address account) constant returns (uint balance) {
        return balancesLocked1Y[account].add(balancesLocked2Y[account]);
    }


    // ------------------------------------------------------------------------
    // 1y and 2y locked total supply
    // ------------------------------------------------------------------------
    function totalSupplyLocked() constant returns (uint) {
        return totalSupplyLocked1Y + totalSupplyLocked2Y;
    }


    // ------------------------------------------------------------------------
    // An account can unlock their 1y locked tokens 1y after token launch date
    // ------------------------------------------------------------------------
    function unlock1Y() {
        require(now >= LOCKED_1Y_DATE);
        uint amount = balancesLocked1Y[msg.sender];
        require(amount > 0);
        balancesLocked1Y[msg.sender] = 0;
        totalSupplyLocked1Y = totalSupplyLocked1Y.sub(amount);
        if (!tokenContract.transfer(msg.sender, amount)) throw;
    }


    // ------------------------------------------------------------------------
    // An account can unlock their 2y locked tokens 2y after token launch date
    // ------------------------------------------------------------------------
    function unlock2Y() {
        require(now >= LOCKED_2Y_DATE);
        uint amount = balancesLocked2Y[msg.sender];
        require(amount > 0);
        balancesLocked2Y[msg.sender] = 0;
        totalSupplyLocked2Y = totalSupplyLocked2Y.sub(amount);
        if (!tokenContract.transfer(msg.sender, amount)) throw;
    }
}



// ----------------------------------------------------------------------------
// ERC20 Token, with the addition of symbol, name and decimals
// ----------------------------------------------------------------------------
contract ERC20Token is ERC20Interface, Owned {
    using SafeMath for uint;

    // ------------------------------------------------------------------------
    // symbol(), name() and decimals()
    // ------------------------------------------------------------------------
    string public symbol;
    string public name;
    uint8 public decimals;

    // ------------------------------------------------------------------------
    // Balances for each account
    // ------------------------------------------------------------------------
    mapping(address => uint) balances;

    // ------------------------------------------------------------------------
    // Owner of account approves the transfer of an amount to another account
    // ------------------------------------------------------------------------
    mapping(address => mapping (address => uint)) allowed;


    // ------------------------------------------------------------------------
    // Constructor
    // ------------------------------------------------------------------------
    function ERC20Token(
        string _symbol, 
        string _name, 
        uint8 _decimals, 
        uint _totalSupply
    ) Owned() {
        symbol = _symbol;
        name = _name;
        decimals = _decimals;
        totalSupply = _totalSupply;
        balances[owner] = _totalSupply;
    }


    // ------------------------------------------------------------------------
    // Get the account balance of another account with address _owner
    // ------------------------------------------------------------------------
    function balanceOf(address _owner) constant returns (uint balance) {
        return balances[_owner];
    }


    // ------------------------------------------------------------------------
    // Transfer the balance from owner's account to another account
    // ------------------------------------------------------------------------
    function transfer(address _to, uint _amount) returns (bool success) {
        if (balances[msg.sender] >= _amount             // User has balance
            && _amount > 0                              // Non-zero transfer
            && balances[_to] + _amount > balances[_to]  // Overflow check
        ) {
            balances[msg.sender] = balances[msg.sender].sub(_amount);
            balances[_to] = balances[_to].add(_amount);
            Transfer(msg.sender, _to, _amount);
            return true;
        } else {
            return false;
        }
    }


    // ------------------------------------------------------------------------
    // Allow _spender to withdraw from your account, multiple times, up to the
    // _value amount. If this function is called again it overwrites the
    // current allowance with _value.
    // ------------------------------------------------------------------------
    function approve(
        address _spender,
        uint _amount
    ) returns (bool success) {
        allowed[msg.sender][_spender] = _amount;
        Approval(msg.sender, _spender, _amount);
        return true;
    }


    // ------------------------------------------------------------------------
    // Spender of tokens transfer an amount of tokens from the token owner's
    // balance to another account. The owner of the tokens must already
    // have approve(...)-d this transfer
    // ------------------------------------------------------------------------
    function transferFrom(
        address _from,
        address _to,
        uint _amount
    ) returns (bool success) {
        if (balances[_from] >= _amount                  // From a/c has balance
            && allowed[_from][msg.sender] >= _amount    // Transfer approved
            && _amount > 0                              // Non-zero transfer
            && balances[_to] + _amount > balances[_to]  // Overflow check
        ) {
            balances[_from] = balances[_from].sub(_amount);
            allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount);
            balances[_to] = balances[_to].add(_amount);
            Transfer(_from, _to, _amount);
            return true;
        } else {
            return false;
        }
    }


    // ------------------------------------------------------------------------
    // Returns the amount of tokens approved by the owner that can be
    // transferred to the spender's account
    // ------------------------------------------------------------------------
    function allowance(
        address _owner, 
        address _spender
    ) constant returns (uint remaining) {
        return allowed[_owner][_spender];
    }
}


// ----------------------------------------------------------------------------
// openANX crowdsale token smart contract
// ----------------------------------------------------------------------------
contract OpenANXToken is ERC20Token, OpenANXTokenConfig {

    // ------------------------------------------------------------------------
    // Has the crowdsale been finalised?
    // ------------------------------------------------------------------------
    bool public finalised = false;

    // ------------------------------------------------------------------------
    // Number of tokens per 1,000 ETH
    // This can be adjusted as the ETH/USD rate changes
    //
    // Indicative rate of ETH per token of 0.00290923 at 8 June 2017
    // 
    // This is the same as 1 / 0.00290923 = 343.733565238912015 OAX per ETH
    //
    // tokensPerEther  = 343.733565238912015
    // tokensPerKEther = 343,733.565238912015
    // tokensPerKEther = 343,734 rounded to an uint, six significant figures
    // ------------------------------------------------------------------------
    uint public tokensPerKEther = 343734;

    // ------------------------------------------------------------------------
    // Locked Tokens - holds the 1y and 2y locked tokens information
    // ------------------------------------------------------------------------
    LockedTokens public lockedTokens;

    // ------------------------------------------------------------------------
    // Wallet receiving the raised funds 
    // ------------------------------------------------------------------------
    address public wallet;

    // ------------------------------------------------------------------------
    // Crowdsale participant's accounts need to be KYC verified KYC before
    // the participant can move their tokens
    // ------------------------------------------------------------------------
    mapping(address => bool) public kycRequired;


    // ------------------------------------------------------------------------
    // Constructor
    // ------------------------------------------------------------------------
    function OpenANXToken(address _wallet) 
        ERC20Token(SYMBOL, NAME, DECIMALS, 0)
    {
        wallet = _wallet;
        lockedTokens = new LockedTokens(this);
        require(address(lockedTokens) != 0x0);
    }

    // ------------------------------------------------------------------------
    // openANX can change the crowdsale wallet address
    // Can be set at any time before or during the crowdsale
    // Not relevant after the crowdsale is finalised as no more contributions
    // are accepted
    // ------------------------------------------------------------------------
    function setWallet(address _wallet) onlyOwner {
        wallet = _wallet;
        WalletUpdated(wallet);
    }
    event WalletUpdated(address newWallet);


    // ------------------------------------------------------------------------
    // openANX can set number of tokens per 1,000 ETH
    // Can only be set before the start of the crowdsale
    // ------------------------------------------------------------------------
    function setTokensPerKEther(uint _tokensPerKEther) onlyOwner {
        require(now < START_DATE);
        require(_tokensPerKEther > 0);
        tokensPerKEther = _tokensPerKEther;
        TokensPerKEtherUpdated(tokensPerKEther);
    }
    event TokensPerKEtherUpdated(uint tokensPerKEther);


    // ------------------------------------------------------------------------
    // Accept ethers to buy tokens during the crowdsale
    // ------------------------------------------------------------------------
    function () payable {
        proxyPayment(msg.sender);
    }


    // ------------------------------------------------------------------------
    // Accept ethers from one account for tokens to be created for another
    // account. Can be used by exchanges to purchase tokens on behalf of 
    // it's user
    // ------------------------------------------------------------------------
    function proxyPayment(address participant) payable {
        // No contributions after the crowdsale is finalised
        require(!finalised);

        // No contributions before the start of the crowdsale
        require(now >= START_DATE);
        // No contributions after the end of the crowdsale
        require(now <= END_DATE);

        // No contributions below the minimum (can be 0 ETH)
        require(msg.value >= CONTRIBUTIONS_MIN);
        // No contributions above a maximum (if maximum is set to non-0)
        require(CONTRIBUTIONS_MAX == 0 || msg.value < CONTRIBUTIONS_MAX);

        // Calculate number of tokens for contributed ETH
        // `18` is the ETH decimals
        // `- decimals` is the token decimals
        // `+ 3` for the tokens per 1,000 ETH factor
        uint tokens = msg.value * tokensPerKEther / 10**uint(18 - decimals + 3);

        // Check if the hard cap will be exceeded
        require(totalSupply + tokens <= TOKENS_HARD_CAP);

        // Add tokens purchased to account's balance and total supply
        balances[participant] = balances[participant].add(tokens);
        totalSupply = totalSupply.add(tokens);

        // Log the tokens purchased 
        Transfer(0x0, participant, tokens);
        TokensBought(participant, msg.value, this.balance, tokens,
             totalSupply, tokensPerKEther);

        // KYC verification required before participant can transfer the tokens
        kycRequired[participant] = true;

        // Transfer the contributed ethers to the crowdsale wallet
        if (!wallet.send(msg.value)) throw;
    }
    event TokensBought(address indexed buyer, uint ethers, 
        uint newEtherBalance, uint tokens, uint newTotalSupply, 
        uint tokensPerKEther);


    // ------------------------------------------------------------------------
    // openANX to finalise the crowdsale - to adding the locked tokens to 
    // this contract and the total supply
    // ------------------------------------------------------------------------
    function finalise() onlyOwner {
        // Can only finalise if raised > soft cap or after the end date
        require(totalSupply >= TOKENS_SOFT_CAP || now > END_DATE);

        // Can only finalise once
        require(!finalised);

        // Calculate and add remaining tokens to locked balances
        lockedTokens.addRemainingTokens();

        // Allocate locked and premined tokens
        balances[address(lockedTokens)] = balances[address(lockedTokens)].
            add(lockedTokens.totalSupplyLocked());
        totalSupply = totalSupply.add(lockedTokens.totalSupplyLocked());

        // Can only finalise once
        finalised = true;
    }


    // ------------------------------------------------------------------------
    // openANX to add precommitment funding token balance before the crowdsale
    // commences
    // ------------------------------------------------------------------------
    function addPrecommitment(address participant, uint balance) onlyOwner {
        require(now < START_DATE);
        require(balance > 0);
        balances[participant] = balances[participant].add(balance);
        totalSupply = totalSupply.add(balance);
        Transfer(0x0, participant, balance);
    }
    event PrecommitmentAdded(address indexed participant, uint balance);


    // ------------------------------------------------------------------------
    // Transfer the balance from owner's account to another account, with KYC
    // verification check for the crowdsale participant's first transfer
    // ------------------------------------------------------------------------
    function transfer(address _to, uint _amount) returns (bool success) {
        // Cannot transfer before crowdsale ends
        require(finalised);
        // Cannot transfer if KYC verification is required
        require(!kycRequired[msg.sender]);
        // Standard transfer
        return super.transfer(_to, _amount);
    }


    // ------------------------------------------------------------------------
    // Spender of tokens transfer an amount of tokens from the token owner's
    // balance to another account, with KYC verification check for the
    // crowdsale participant's first transfer
    // ------------------------------------------------------------------------
    function transferFrom(address _from, address _to, uint _amount) 
        returns (bool success)
    {
        // Cannot transfer before crowdsale ends
        require(finalised);
        // Cannot transfer if KYC verification is required
        require(!kycRequired[_from]);
        // Standard transferFrom
        return super.transferFrom(_from, _to, _amount);
    }


    // ------------------------------------------------------------------------
    // openANX to KYC verify the participant's account
    // ------------------------------------------------------------------------
    function kycVerify(address participant) onlyOwner {
        kycRequired[participant] = false;
        KycVerified(participant);
    }
    event KycVerified(address indexed participant);


    // ------------------------------------------------------------------------
    // Any account can burn _from's tokens as long as the _from account has 
    // approved the _amount to be burnt using
    //   approve(0x0, _amount)
    // ------------------------------------------------------------------------
    function burnFrom(
        address _from,
        uint _amount
    ) returns (bool success) {
        if (balances[_from] >= _amount                  // From a/c has balance
            && allowed[_from][0x0] >= _amount           // Transfer approved
            && _amount > 0                              // Non-zero transfer
            && balances[0x0] + _amount > balances[0x0]  // Overflow check
        ) {
            balances[_from] = balances[_from].sub(_amount);
            allowed[_from][0x0] = allowed[_from][0x0].sub(_amount);
            balances[0x0] = balances[0x0].add(_amount);
            totalSupply = totalSupply.sub(_amount);
            Transfer(_from, 0x0, _amount);
            return true;
        } else {
            return false;
        }
    }


    // ------------------------------------------------------------------------
    // 1y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked1Y(address account) constant returns (uint balance) {
        return lockedTokens.balanceOfLocked1Y(account);
    }


    // ------------------------------------------------------------------------
    // 2y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked2Y(address account) constant returns (uint balance) {
        return lockedTokens.balanceOfLocked2Y(account);
    }


    // ------------------------------------------------------------------------
    // 1y and 2y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked(address account) constant returns (uint balance) {
        return lockedTokens.balanceOfLocked(account);
    }


    // ------------------------------------------------------------------------
    // 1y locked total supply
    // ------------------------------------------------------------------------
    function totalSupplyLocked1Y() constant returns (uint) {
        if (finalised) {
            return lockedTokens.totalSupplyLocked1Y();
        } else {
            return 0;
        }
    }


    // ------------------------------------------------------------------------
    // 2y locked total supply
    // ------------------------------------------------------------------------
    function totalSupplyLocked2Y() constant returns (uint) {
        if (finalised) {
            return lockedTokens.totalSupplyLocked2Y();
        } else {
            return 0;
        }
    }


    // ------------------------------------------------------------------------
    // 1y and 2y locked total supply
    // ------------------------------------------------------------------------
    function totalSupplyLocked() constant returns (uint) {
        if (finalised) {
            return lockedTokens.totalSupplyLocked();
        } else {
            return 0;
        }
    }


    // ------------------------------------------------------------------------
    // Unlocked total supply
    // ------------------------------------------------------------------------
    function totalSupplyUnlocked() constant returns (uint) {
        if (finalised && totalSupply >= lockedTokens.totalSupplyLocked()) {
            return totalSupply.sub(lockedTokens.totalSupplyLocked());
        } else {
            return 0;
        }
    }


    // ------------------------------------------------------------------------
    // openANX can transfer out any accidentally sent ERC20 tokens
    // ------------------------------------------------------------------------
    function transferAnyERC20Token(address tokenAddress, uint amount)
      onlyOwner returns (bool success) 
    {
        return ERC20Interface(tokenAddress).transfer(owner, amount);
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_TOTAL","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokensPerKEther","type":"uint256"}],"name":"setTokensPerKEther","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"lockedTokens","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"kycVerify","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOfLocked1Y","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"finalised","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTIONS_MIN","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"DECIMALS","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"START_DATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"},{"name":"balance","type":"uint256"}],"name":"addPrecommitment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_SOFT_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"END_DATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyLocked","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyLocked2Y","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_amount","type":"uint256"}],"name":"burnFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_HARD_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"DECIMALSFACTOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTIONS_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"LOCKED_2Y_DATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"NAME","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"finalise","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokensPerKEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"kycRequired","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOfLocked2Y","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyLocked1Y","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyUnlocked","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"setWallet","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOfLocked","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"LOCKED_1Y_DATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"proxyPayment","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"_wallet","type":"address"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newWallet","type":"address"}],"name":"WalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokensPerKEther","type":"uint256"}],"name":"TokensPerKEtherUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"ethers","type":"uint256"},{"indexed":false,"name":"newEtherBalance","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"newTotalSupply","type":"uint256"},{"indexed":false,"name":"tokensPerKEther","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"PrecommitmentAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"}],"name":"KycVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","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"}]

606060405260006008819055600955600a805460ff1916905562053eb6600b5534156200002857fe5b6040516020806200386483398101604052515b604060405190810160405280600381526020017f4f41580000000000000000000000000000000000000000000000000000000000815250604060405190810160405280600d81526020017f6f70656e414e5820546f6b656e00000000000000000000000000000000000000815250601260005b5b60018054600160a060020a03191633600160a060020a03161790555b8351620000e0906003906020870190620001aa565b508251620000f6906004906020860190620001aa565b506005805460ff191660ff84161790556000818155600154600160a060020a031681526006602052604090208190555b5050600d8054600160a060020a031916600160a060020a038516179055503090506200015162000230565b600160a060020a03909116815260405190819003602001906000f08015156200017657fe5b600c8054600160a060020a031916600160a060020a039283161790819055161515620001a25760006000fd5b5b5062000265565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001ed57805160ff19168380011785556200021d565b828001600101855582156200021d579182015b828111156200021d57825182559160200191906001019062000200565b5b506200022c92915062000241565b5090565b604051611661806200220383390190565b6200026291905b808211156200022c576000815560010162000248565b5090565b90565b611f8e80620002756000396000f3006060604052361561022d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461023f578063095ea7b3146102cf5780630b743021146103025780630e9d02cc146103245780630eb347401461033957806318160ddd146103655780631881b0f0146103875780631ab3c515146103a5578063214bb60f146103d357806323b872dd146103f75780632da13d5e146104305780632e0f262514610452578063313ce56714610478578063372c65331461049e5780633818d907146104c05780633a9f967e146104e1578063521eb27314610503578063545599ff1461052f5780635834192214610551578063622c77fe1461057357806370a082311461059557806379ba5097146105c357806379cc6790146105d5578063831a1754146106085780638bc04eb71461062a5780638da5cb5b1461064c57806393fea1841461067857806395d89b411461069a578063978c5b151461072a578063a3f4df7e1461074c578063a4399263146107dc578063a5bc770c146107ee578063a9059cbb14610810578063b7121da414610843578063bc5dc16814610873578063c0c3da9c146108a1578063c0f5dc97146108c3578063d4ee1d90146108e5578063dc39d06d14610911578063dd62ed3e14610944578063deaa59df14610978578063e960bb4814610996578063f2fde38b146109c4578063f4509fc2146109e2578063f48c305414610a04578063f76f8d7814610a1a575b61023d5b61023a33610aaa565b5b565b005b341561024757fe5b61024f610c96565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102d757fe5b6102ee600160a060020a0360043516602435610d24565b604080519115158252519081900360200190f35b341561030a57fe5b610312610d8f565b60408051918252519081900360200190f35b341561032c57fe5b61023d600435610d9e565b005b341561034157fe5b610349610e16565b60408051600160a060020a039092168252519081900360200190f35b341561036d57fe5b610312610e25565b60408051918252519081900360200190f35b341561038f57fe5b61023d600160a060020a0360043516610e2b565b005b34156103ad57fe5b610312600160a060020a0360043516610e92565b60408051918252519081900360200190f35b34156103db57fe5b6102ee610f1d565b604080519115158252519081900360200190f35b34156103ff57fe5b6102ee600160a060020a0360043581169060243516604435610f26565b604080519115158252519081900360200190f35b341561043857fe5b610312610f77565b60408051918252519081900360200190f35b341561045a57fe5b610462610f7d565b6040805160ff9092168252519081900360200190f35b341561048057fe5b610462610f82565b6040805160ff9092168252519081900360200190f35b34156104a657fe5b610312610f8b565b60408051918252519081900360200190f35b34156104c857fe5b61023d600160a060020a0360043516602435610f93565b005b34156104e957fe5b61031261105d565b60408051918252519081900360200190f35b341561050b57fe5b61034961106c565b60408051600160a060020a039092168252519081900360200190f35b341561053757fe5b61031261107b565b60408051918252519081900360200190f35b341561055957fe5b610312611083565b60408051918252519081900360200190f35b341561057b57fe5b610312611104565b60408051918252519081900360200190f35b341561059d57fe5b610312600160a060020a036004351661119f565b60408051918252519081900360200190f35b34156105cb57fe5b61023d6111be565b005b34156105dd57fe5b6102ee600160a060020a036004351660243561124b565b604080519115158252519081900360200190f35b341561061057fe5b61031261142c565b60408051918252519081900360200190f35b341561063257fe5b61031261143b565b60408051918252519081900360200190f35b341561065457fe5b610349611447565b60408051600160a060020a039092168252519081900360200190f35b341561068057fe5b610312611456565b60408051918252519081900360200190f35b34156106a257fe5b61024f61145c565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561073257fe5b6103126114ea565b60408051918252519081900360200190f35b341561075457fe5b61024f6114f2565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156107e457fe5b61023d611529565b005b34156107f657fe5b610312611744565b60408051918252519081900360200190f35b341561081857fe5b6102ee600160a060020a036004351660243561174a565b604080519115158252519081900360200190f35b341561084b57fe5b6102ee600160a060020a0360043516611799565b604080519115158252519081900360200190f35b341561087b57fe5b610312600160a060020a03600435166117ae565b60408051918252519081900360200190f35b34156108a957fe5b610312611839565b60408051918252519081900360200190f35b34156108cb57fe5b6103126118d4565b60408051918252519081900360200190f35b34156108ed57fe5b6103496119db565b60408051600160a060020a039092168252519081900360200190f35b341561091957fe5b6102ee600160a060020a03600435166024356119ea565b604080519115158252519081900360200190f35b341561094c57fe5b610312600160a060020a0360043581169060243516611a9b565b60408051918252519081900360200190f35b341561098057fe5b61023d600160a060020a0360043516611ac8565b005b341561099e57fe5b610312600160a060020a0360043516611b4d565b60408051918252519081900360200190f35b34156109cc57fe5b61023d600160a060020a0360043516611bd8565b005b34156109ea57fe5b610312611c21565b60408051918252519081900360200190f35b61023d600160a060020a0360043516610aaa565b005b3415610a2257fe5b61024f611c29565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600a5460009060ff1615610abe5760006000fd5b63594bbf50421015610ad05760006000fd5b6359734c50421115610ae25760006000fd5b600854341015610af25760006000fd5b6009541580610b02575060095434105b1515610b0e5760006000fd5b600554600b54600360ff92831660120301909116600a0a903402811515610b3157fe5b60005491900491506a18d0bf423c03d8de0000009082011115610b545760006000fd5b600160a060020a038216600090815260066020526040902054610b7d908263ffffffff611c6016565b600160a060020a03831660009081526006602052604081209190915554610baa908263ffffffff611c6016565b6000908155604080518381529051600160a060020a0385169291600080516020611f43833981519152919081900360200190a3600054600b546040805134815230600160a060020a039081163160208301528183018690526060820194909452608081019290925251918416917f6a7381bdc8f4e7ed3c0f0c299382777bde88a65f0c27f670235401d1544546309181900360a00190a2600160a060020a038083166000908152600e6020526040808220805460ff19166001179055600d5490519216913480156108fc0292909190818181858888f193505050501515610c915760006000fd5b5b5050565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b505050505081565b600160a060020a03338116600081815260076020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b6a52b7d2dcc80cd2e400000081565b60015433600160a060020a03908116911614610dba5760006000fd5b63594bbf504210610dcb5760006000fd5b60008111610dd95760006000fd5b600b8190556040805182815290517fee386bebbe46d39825c2b93313aa1ab1dc57d4774cac81c6debb8c611c9227ab9181900360200190a15b5b50565b600c54600160a060020a031681565b60005481565b60015433600160a060020a03908116911614610e475760006000fd5b600160a060020a0381166000818152600e6020526040808220805460ff19169055517fb3e6054663369578ee4831fc6c8ee9486db04e6f78b939250094785f6b6a430b9190a25b5b50565b600c54604080516000602091820181905282517f1ab3c515000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152935191949390931692631ab3c51592602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b600a5460ff1681565b600a5460009060ff161515610f3b5760006000fd5b600160a060020a0384166000908152600e602052604090205460ff1615610f625760006000fd5b610f6d848484611c88565b90505b9392505050565b60085481565b601281565b60055460ff1681565b63594bbf5081565b60015433600160a060020a03908116911614610faf5760006000fd5b63594bbf504210610fc05760006000fd5b60008111610fce5760006000fd5b600160a060020a038216600090815260066020526040902054610ff7908263ffffffff611c6016565b600160a060020a03831660009081526006602052604081209190915554611024908263ffffffff611c6016565b6000908155604080518381529051600160a060020a0385169291600080516020611f43833981519152919081900360200190a35b5b5050565b6a0ac0db698068112d00000081565b600d54600160a060020a031681565b6359734c5081565b600a5460009060ff16156110fc57600c546040805160006020918201819052825160e160020a632c1a0c910281529251600160a060020a039094169363583419229360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b5060005b5b90565b600a5460009060ff16156110fc57600c54604080516000602091820181905282517f622c77fe0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363622c77fe9360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b506000611100565b5b90565b600160a060020a0381166000908152600660205260409020545b919050565b60025433600160a060020a039081169116146111da5760006000fd5b600254600154604051600160a060020a0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36002546001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600160a060020a0382166000908152600660205260408120548290108015906112985750600160a060020a0383166000908152600760209081526040808320838052909152902054829010155b80156112a45750600082115b80156112db57506000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f854828101115b1561141d57600160a060020a038316600090815260066020526040902054611309908363ffffffff611e1d16565b600160a060020a0384166000908152600660209081526040808320939093556007815282822082805290522054611346908363ffffffff611e1d16565b600160a060020a0384166000908152600760209081526040808320838052825290912091909155600690527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8546113a3908363ffffffff611c6016565b600080805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f891909155546113e3908363ffffffff611e1d16565b6000908155604080518481529051600160a060020a03861691600080516020611f43833981519152919081900360200190a3506001610d89565b506000610d89565b5b92915050565b6a18d0bf423c03d8de00000081565b670de0b6b3a764000081565b600154600160a060020a031681565b60095481565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b505050505081565b635d0e265081565b60408051808201909152600d81527f6f70656e414e5820546f6b656e00000000000000000000000000000000000000602082015281565b60015433600160a060020a039081169116146115455760006000fd5b6000546a0ac0db698068112d0000009010158061156557506359734c5042115b15156115715760006000fd5b600a5460ff16156115825760006000fd5b600c54604080517fe9d7f3090000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163e9d7f3099160048082019260009290919082900301818387803b15156115dd57fe5b6102c65a03f115156115eb57fe5b5050506116a2600c60009054906101000a9004600160a060020a0316600160a060020a031663583419226000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b151561166557fe5b6102c65a03f1151561167357fe5b50506040805151600c54600160a060020a0316600090815260066020529190912054915063ffffffff611c6016565b600c8054600160a060020a03908116600090815260066020908152604080832095909555925484518401829052845160e160020a632c1a0c91028152945161173095919093169363583419229360048084019492939192918390030190829087803b151561170c57fe5b6102c65a03f1151561171a57fe5b505060405151600054915063ffffffff611c6016565b600055600a805460ff191660011790555b5b565b600b5481565b600a5460009060ff16151561175f5760006000fd5b600160a060020a0333166000908152600e602052604090205460ff16156117865760006000fd5b6117908383611e34565b90505b92915050565b600e6020526000908152604090205460ff1681565b600c54604080516000602091820181905282517fbc5dc168000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015293519194939093169263bc5dc16892602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b600a5460009060ff16156110fc57600c54604080516000602091820181905282517fc0c3da9c0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363c0c3da9c9360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b506000611100565b5b90565b600a5460009060ff16801561194e5750600c546040805160006020918201819052825160e160020a632c1a0c910281529251600160a060020a039094169363583419229360048082019493918390030190829087803b151561193257fe5b6102c65a03f1151561194057fe5b505060405151600054101590505b156110fc57600c546040805160006020918201819052825160e160020a632c1a0c9102815292516119c894600160a060020a0316936358341922936004808301949193928390030190829087803b15156119a457fe5b6102c65a03f115156119b257fe5b505060405151600054915063ffffffff611e1d16565b9050611100565b506000611100565b5b90565b600254600160a060020a031681565b60015460009033600160a060020a03908116911614611a095760006000fd5b600154604080516000602091820181905282517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0394851660048201526024810187905292519387169363a9059cbb9360448082019493918390030190829087803b1515611a7c57fe5b6102c65a03f11515611a8a57fe5b5050604051519150505b5b92915050565b600160a060020a038083166000908152600760209081526040808320938516835292905220545b92915050565b60015433600160a060020a03908116911614611ae45760006000fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560408051929091168252517f4edbfac5b40fe46ac1af1fd222b224b38cfeeb9e21bd4fc6344526c245f7549b916020908290030190a15b5b50565b600c54604080516000602091820181905282517fe960bb48000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015293519194939093169263e960bb4892602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b60015433600160a060020a03908116911614611bf45760006000fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b635b2cf2d081565b60408051808201909152600381527f4f41580000000000000000000000000000000000000000000000000000000000602082015281565b6000828201838110801590611c755750828110155b1515611c7d57fe5b8091505b5092915050565b600160a060020a038316600090815260066020526040812054829010801590611cd85750600160a060020a0380851660009081526007602090815260408083203390941683529290522054829010155b8015611ce45750600082115b8015611d095750600160a060020a038316600090815260066020526040902054828101115b15611e0d57600160a060020a038416600090815260066020526040902054611d37908363ffffffff611e1d16565b600160a060020a0380861660009081526006602090815260408083209490945560078152838220339093168252919091522054611d7a908363ffffffff611e1d16565b600160a060020a0380861660009081526007602090815260408083203385168452825280832094909455918616815260069091522054611dc0908363ffffffff611c6016565b600160a060020a038085166000818152600660209081526040918290209490945580518681529051919392881692600080516020611f4383398151915292918290030190a3506001610f70565b506000610f70565b5b9392505050565b600082821115611e2957fe5b508082035b92915050565b600160a060020a033316600090815260066020526040812054829010801590611e5d5750600082115b8015611e825750600160a060020a038316600090815260066020526040902054828101115b1561141d57600160a060020a033316600090815260066020526040902054611eb0908363ffffffff611e1d16565b600160a060020a033381166000908152600660205260408082209390935590851681522054611ee5908363ffffffff611c6016565b600160a060020a03808516600081815260066020908152604091829020949094558051868152905191933390931692600080516020611f4383398151915292918290030190a3506001610d89565b506000610d89565b5b929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582002d82e12d01419074eb87e3b53edd24e33c5ad021933496454ed30b3c41a4d1600296060604052600080805560015560028054600160a060020a03191673813703eb676f3b6c76da75cba0cbc49ddbca7b3717905534156200003b57fe5b6040516020806200166183398101604052515b60078054600160a060020a031916600160a060020a038316179055620000a1734bee088efdbcc610eeea101ded7204150af1c8b969d3c21bcecceda10000006401000000006200092a810262000b351704565b620000d973839551201f866907eb5017be79ceb48ada58650c69c3e059b8e3f56820000064010000000062000b356200092a82021704565b6200011173a92d4cd3412862386c234be572fe4a8fa4bb09c669c3e059b8e3f56820000064010000000062000b356200092a82021704565b6200014973ecf2b5fce33007e5669d63de39a4c663e56958dd69c3e059b8e3f56820000064010000000062000b356200092a82021704565b6200018173d6b7695bc74e2c950eb953316359eab283c5bda869c3e059b8e3f56820000064010000000062000b356200092a82021704565b620001b973be3463eae26398d55a7118683079264bcf3ab24b691fc3842bd1f071c0000064010000000062000b356200092a82021704565b620001f173f47428fb9a61c9f3312cb035aee049fba76ba62a691fc3842bd1f071c0000064010000000062000b356200092a82021704565b6200022973fccc77165d822ef9004714d829bdc267c743658a690a968163f0a57b40000064010000000062000b356200092a82021704565b6200026173af8df2acaec3d5d92de42a6c19d7706a4f3e8d8b690a968163f0a57b40000064010000000062000b356200092a82021704565b620002997322a6f9693856374bf2922cd837d07f6670e7fa4d6934f086f3b33b6840000064010000000062000b356200092a82021704565b620002d1733f720ca8fff598f00a51de32a8cb58ca73f22ade690a968163f0a57b40000064010000000062000b356200092a82021704565b6200030973bd0d1954b301e414f0b5d0827a69ec5dd559e50b690a968163f0a57b40000064010000000062000b356200092a82021704565b62000341732ad6b011fecde830c9cc4dc0d0b77f055d6b5990690a968163f0a57b40000064010000000062000b356200092a82021704565b6200037a730c5cd0e971ca18a0f0e0d581f4b93fad31d608b06a01a788d33a4381d634000064010000000062000b356200092a82021704565b620003b273faadc4d80eaf430ab604337cb67d77ec763d3e23692a677740c0a015e0000064010000000062000b356200092a82021704565b620003eb73daef46f89c264182cd87ce93b620b63c7afb14f76a01566568a986aee160000064010000000062000b356200092a82021704565b620004237319cc59c30ce54706633dc29edebae1eff1757b25692fa430b374df96d0000064010000000062000b356200092a82021704565b6200045b73a130fe5d399104ca5af168fbbbbe19f95d739741699df44bb9dd0f2038000064010000000062000b356200092a82021704565b6200049373c0cd1bf6f2939095a56b0dfa085ba2886b84e7d1699df44bb9dd0f2038000064010000000062000b356200092a82021704565b620004cb73f2c26e79ed264b0e3e5a5dfb1dd91ea61f512c6e699df44bb9dd0f2038000064010000000062000b356200092a82021704565b62000503735f876a8a5f1b66fbf3d0d119075b62af4386e319699df44bb9dd0f2038000064010000000062000b356200092a82021704565b6200053b73b8e046570800dd76720af6d42d3ccae451f54f15699df4677b4a766f00000064010000000062000b356200092a82021704565b6200057373a524fa65aac4647fa7ba2c20d22f64450c351bbd699741858ac693ebf8000064010000000062000b356200092a82021704565b620005ab7327209b276c15a936bce08d7d70f0c97aeb3ce8c36902f0ec9848ec9864000064010000000062000b356200092a82021704565b6003546a0b949d854f34fece00000014620005c257fe5b620005fa734bee088efdbcc610eeea101ded7204150af1c8b969d3c21bcecceda100000064010000000062000b926200099b82021704565b6200063273839551201f866907eb5017be79ceb48ada58650c69c3e059b8e3f56820000064010000000062000b926200099b82021704565b6200066a73a92d4cd3412862386c234be572fe4a8fa4bb09c669c3e059b8e3f56820000064010000000062000b926200099b82021704565b620006a273ecf2b5fce33007e5669d63de39a4c663e56958dd69c3e059b8e3f56820000064010000000062000b926200099b82021704565b620006da73d6b7695bc74e2c950eb953316359eab283c5bda869c3e059b8e3f56820000064010000000062000b926200099b82021704565b6200071273be3463eae26398d55a7118683079264bcf3ab24b691fc3842bd1f071c0000064010000000062000b926200099b82021704565b6200074a73f47428fb9a61c9f3312cb035aee049fba76ba62a691fc3842bd1f071c0000064010000000062000b926200099b82021704565b6200078273fccc77165d822ef9004714d829bdc267c743658a690a968163f0a57b40000064010000000062000b926200099b82021704565b620007ba73daef46f89c264182cd87ce93b620b63c7afb14f76969e10de76676d080000064010000000062000b926200099b82021704565b620007f273af8df2acaec3d5d92de42a6c19d7706a4f3e8d8b690a968163f0a57b40000064010000000062000b926200099b82021704565b6200082a7322a6f9693856374bf2922cd837d07f6670e7fa4d6934f086f3b33b6840000064010000000062000b926200099b82021704565b62000862733f720ca8fff598f00a51de32a8cb58ca73f22ade690a968163f0a57b40000064010000000062000b926200099b82021704565b6200089a73bd0d1954b301e414f0b5d0827a69ec5dd559e50b690a968163f0a57b40000064010000000062000b926200099b82021704565b620008d2732ad6b011fecde830c9cc4dc0d0b77f055d6b5990690a968163f0a57b40000064010000000062000b926200099b82021704565b6200090b73990a2d172398007fcbd5078d84696bdd8ccdf7b26a108b2a2c2802909400000064010000000062000b926200099b82021704565b6004546a1581b6d300d0225a000000146200092257fe5b5b5062000a36565b600160a060020a0382166000908152600560205260409020546200095d908264010000000062000b0d62000a0c82021704565b600160a060020a03831660009081526005602052604090205560035462000993908264010000000062000b0d62000a0c82021704565b6003555b5050565b600160a060020a038216600090815260066020526040902054620009ce908264010000000062000b0d62000a0c82021704565b600160a060020a03831660009081526006602052604090205560045462000a04908264010000000062000b0d62000a0c82021704565b6004555b5050565b600082820183811080159062000a225750828110155b151562000a2b57fe5b8091505b5092915050565b610c1b8062000a466000396000f300606060405236156101675763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630b74302181146101695780631a6f56a01461018b5780631ab3c515146101b95780632da13d5e146101e75780632e0f262514610209578063372c65331461022f57806338c80857146102515780633a9f967e14610263578063400ee78314610285578063545599ff146102a757806355a373d6146102c957806358341922146102f5578063622c77fe1461031757806376e403ec146103395780637f592be414610367578063831a1754146103935780638bc04eb7146103b557806393fea184146103d7578063978c5b15146103f9578063a3f4df7e1461041b578063bc5dc168146104ab578063c0c3da9c146104d9578063e5494be1146104fb578063e960bb481461050d578063e9d7f3091461053b578063f4509fc21461054d578063f76f8d781461056f578063ffb00df1146105ff575bfe5b341561017157fe5b610179610621565b60408051918252519081900360200190f35b341561019357fe5b610179600160a060020a0360043516610630565b60408051918252519081900360200190f35b34156101c157fe5b610179600160a060020a0360043516610642565b60408051918252519081900360200190f35b34156101ef57fe5b610179610661565b60408051918252519081900360200190f35b341561021157fe5b610219610667565b6040805160ff9092168252519081900360200190f35b341561023757fe5b61017961066c565b60408051918252519081900360200190f35b341561025957fe5b610261610674565b005b341561026b57fe5b610179610779565b60408051918252519081900360200190f35b341561028d57fe5b610179610788565b60408051918252519081900360200190f35b34156102af57fe5b610179610797565b60408051918252519081900360200190f35b34156102d157fe5b6102d961079f565b60408051600160a060020a039092168252519081900360200190f35b34156102fd57fe5b6101796107ae565b60408051918252519081900360200190f35b341561031f57fe5b6101796107b9565b60408051918252519081900360200190f35b341561034157fe5b610179600160a060020a03600435166107bf565b60408051918252519081900360200190f35b341561036f57fe5b6102d96107d1565b60408051600160a060020a039092168252519081900360200190f35b341561039b57fe5b6101796107e0565b60408051918252519081900360200190f35b34156103bd57fe5b6101796107ef565b60408051918252519081900360200190f35b34156103df57fe5b6101796107fb565b60408051918252519081900360200190f35b341561040157fe5b610179610801565b60408051918252519081900360200190f35b341561042357fe5b61042b610809565b604080516020808252835181830152835191928392908301918501908083838215610471575b80518252602083111561047157601f199092019160209182019101610451565b505050905090810190601f16801561049d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104b357fe5b610179600160a060020a0360043516610840565b60408051918252519081900360200190f35b34156104e157fe5b61017961085f565b60408051918252519081900360200190f35b341561050357fe5b610261610865565b005b341561051557fe5b610179600160a060020a036004351661096b565b60408051918252519081900360200190f35b341561054357fe5b6102616109a6565b005b341561055557fe5b610179610aa8565b60408051918252519081900360200190f35b341561057757fe5b61042b610ab0565b604080516020808252835181830152835191928392908301918501908083838215610471575b80518252602083111561047157601f199092019160209182019101610451565b505050905090810190601f16801561049d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561060757fe5b610179610ae7565b60408051918252519081900360200190f35b6a52b7d2dcc80cd2e400000081565b60066020526000908152604090205481565b600160a060020a0381166000908152600560205260409020545b919050565b60005481565b601281565b63594bbf5081565b6000635b2cf2d04210156106885760006000fd5b50600160a060020a0333166000908152600560205260408120549081116106af5760006000fd5b600160a060020a0333166000908152600560205260408120556003546106db908263ffffffff610af616565b600355600754604080516000602091820181905282517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018790529351939094169363a9059cbb936044808301949391928390030190829087803b151561075357fe5b6102c65a03f1151561076157fe5b505060405151151590506107755760006000fd5b5b50565b6a0ac0db698068112d00000081565b6a0b949d854f34fece00000081565b6359734c5081565b600754600160a060020a031681565b600454600354015b90565b60045481565b60056020526000908152604090205481565b600254600160a060020a031681565b6a18d0bf423c03d8de00000081565b670de0b6b3a764000081565b60015481565b635d0e265081565b60408051808201909152600d81527f6f70656e414e5820546f6b656e00000000000000000000000000000000000000602082015281565b600160a060020a0381166000908152600660205260409020545b919050565b60035481565b6000635d0e26504210156108795760006000fd5b50600160a060020a0333166000908152600660205260408120549081116108a05760006000fd5b600160a060020a0333166000908152600660205260408120556004546108cc908263ffffffff610af616565b6004908155600754604080516000602091820181905282517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0333811696820196909652602481018790529251949093169363a9059cbb936044808501948390030190829087803b151561075357fe5b6102c65a03f1151561076157fe5b505060405151151590506107755760006000fd5b5b50565b600160a060020a038116600090815260066020908152604080832054600590925282205461099e9163ffffffff610b0d16565b90505b919050565b60075460009033600160a060020a039081169116146109c55760006000fd5b50600754604080516000602091820181905282517f18160ddd00000000000000000000000000000000000000000000000000000000815292516a52b7d2dcc80cd2e400000094610a5d94600160a060020a03909116936318160ddd9360048084019492938390030190829087803b1515610a3b57fe5b6102c65a03f11515610a4957fe5b50506040515183915063ffffffff610af616565b9050610a7460035482610af690919063ffffffff16565b9050610a8b60045482610af690919063ffffffff16565b60025490915061077590600160a060020a031682610b35565b5b50565b635b2cf2d081565b60408051808201909152600381527f4f41580000000000000000000000000000000000000000000000000000000000602082015281565b6a1581b6d300d0225a00000081565b600082821115610b0257fe5b508082035b92915050565b6000828201838110801590610b225750828110155b1515610b2a57fe5b8091505b5092915050565b600160a060020a038216600090815260056020526040902054610b5e908263ffffffff610b0d16565b600160a060020a038316600090815260056020526040902055600354610b8a908263ffffffff610b0d16565b6003555b5050565b600160a060020a038216600090815260066020526040902054610bbb908263ffffffff610b0d16565b600160a060020a038316600090815260066020526040902055600454610be7908263ffffffff610b0d16565b6004555b50505600a165627a7a723058201ebf78c948e9b064875413e10729508a8cb3f4fc7b2decd423f81a4a0a420b8000290000000000000000000000002b3b67c6dffc2bcdda2315491eac9bbe868fbcdd

Deployed Bytecode

0x6060604052361561022d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461023f578063095ea7b3146102cf5780630b743021146103025780630e9d02cc146103245780630eb347401461033957806318160ddd146103655780631881b0f0146103875780631ab3c515146103a5578063214bb60f146103d357806323b872dd146103f75780632da13d5e146104305780632e0f262514610452578063313ce56714610478578063372c65331461049e5780633818d907146104c05780633a9f967e146104e1578063521eb27314610503578063545599ff1461052f5780635834192214610551578063622c77fe1461057357806370a082311461059557806379ba5097146105c357806379cc6790146105d5578063831a1754146106085780638bc04eb71461062a5780638da5cb5b1461064c57806393fea1841461067857806395d89b411461069a578063978c5b151461072a578063a3f4df7e1461074c578063a4399263146107dc578063a5bc770c146107ee578063a9059cbb14610810578063b7121da414610843578063bc5dc16814610873578063c0c3da9c146108a1578063c0f5dc97146108c3578063d4ee1d90146108e5578063dc39d06d14610911578063dd62ed3e14610944578063deaa59df14610978578063e960bb4814610996578063f2fde38b146109c4578063f4509fc2146109e2578063f48c305414610a04578063f76f8d7814610a1a575b61023d5b61023a33610aaa565b5b565b005b341561024757fe5b61024f610c96565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102d757fe5b6102ee600160a060020a0360043516602435610d24565b604080519115158252519081900360200190f35b341561030a57fe5b610312610d8f565b60408051918252519081900360200190f35b341561032c57fe5b61023d600435610d9e565b005b341561034157fe5b610349610e16565b60408051600160a060020a039092168252519081900360200190f35b341561036d57fe5b610312610e25565b60408051918252519081900360200190f35b341561038f57fe5b61023d600160a060020a0360043516610e2b565b005b34156103ad57fe5b610312600160a060020a0360043516610e92565b60408051918252519081900360200190f35b34156103db57fe5b6102ee610f1d565b604080519115158252519081900360200190f35b34156103ff57fe5b6102ee600160a060020a0360043581169060243516604435610f26565b604080519115158252519081900360200190f35b341561043857fe5b610312610f77565b60408051918252519081900360200190f35b341561045a57fe5b610462610f7d565b6040805160ff9092168252519081900360200190f35b341561048057fe5b610462610f82565b6040805160ff9092168252519081900360200190f35b34156104a657fe5b610312610f8b565b60408051918252519081900360200190f35b34156104c857fe5b61023d600160a060020a0360043516602435610f93565b005b34156104e957fe5b61031261105d565b60408051918252519081900360200190f35b341561050b57fe5b61034961106c565b60408051600160a060020a039092168252519081900360200190f35b341561053757fe5b61031261107b565b60408051918252519081900360200190f35b341561055957fe5b610312611083565b60408051918252519081900360200190f35b341561057b57fe5b610312611104565b60408051918252519081900360200190f35b341561059d57fe5b610312600160a060020a036004351661119f565b60408051918252519081900360200190f35b34156105cb57fe5b61023d6111be565b005b34156105dd57fe5b6102ee600160a060020a036004351660243561124b565b604080519115158252519081900360200190f35b341561061057fe5b61031261142c565b60408051918252519081900360200190f35b341561063257fe5b61031261143b565b60408051918252519081900360200190f35b341561065457fe5b610349611447565b60408051600160a060020a039092168252519081900360200190f35b341561068057fe5b610312611456565b60408051918252519081900360200190f35b34156106a257fe5b61024f61145c565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561073257fe5b6103126114ea565b60408051918252519081900360200190f35b341561075457fe5b61024f6114f2565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156107e457fe5b61023d611529565b005b34156107f657fe5b610312611744565b60408051918252519081900360200190f35b341561081857fe5b6102ee600160a060020a036004351660243561174a565b604080519115158252519081900360200190f35b341561084b57fe5b6102ee600160a060020a0360043516611799565b604080519115158252519081900360200190f35b341561087b57fe5b610312600160a060020a03600435166117ae565b60408051918252519081900360200190f35b34156108a957fe5b610312611839565b60408051918252519081900360200190f35b34156108cb57fe5b6103126118d4565b60408051918252519081900360200190f35b34156108ed57fe5b6103496119db565b60408051600160a060020a039092168252519081900360200190f35b341561091957fe5b6102ee600160a060020a03600435166024356119ea565b604080519115158252519081900360200190f35b341561094c57fe5b610312600160a060020a0360043581169060243516611a9b565b60408051918252519081900360200190f35b341561098057fe5b61023d600160a060020a0360043516611ac8565b005b341561099e57fe5b610312600160a060020a0360043516611b4d565b60408051918252519081900360200190f35b34156109cc57fe5b61023d600160a060020a0360043516611bd8565b005b34156109ea57fe5b610312611c21565b60408051918252519081900360200190f35b61023d600160a060020a0360043516610aaa565b005b3415610a2257fe5b61024f611c29565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600a5460009060ff1615610abe5760006000fd5b63594bbf50421015610ad05760006000fd5b6359734c50421115610ae25760006000fd5b600854341015610af25760006000fd5b6009541580610b02575060095434105b1515610b0e5760006000fd5b600554600b54600360ff92831660120301909116600a0a903402811515610b3157fe5b60005491900491506a18d0bf423c03d8de0000009082011115610b545760006000fd5b600160a060020a038216600090815260066020526040902054610b7d908263ffffffff611c6016565b600160a060020a03831660009081526006602052604081209190915554610baa908263ffffffff611c6016565b6000908155604080518381529051600160a060020a0385169291600080516020611f43833981519152919081900360200190a3600054600b546040805134815230600160a060020a039081163160208301528183018690526060820194909452608081019290925251918416917f6a7381bdc8f4e7ed3c0f0c299382777bde88a65f0c27f670235401d1544546309181900360a00190a2600160a060020a038083166000908152600e6020526040808220805460ff19166001179055600d5490519216913480156108fc0292909190818181858888f193505050501515610c915760006000fd5b5b5050565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b505050505081565b600160a060020a03338116600081815260076020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b6a52b7d2dcc80cd2e400000081565b60015433600160a060020a03908116911614610dba5760006000fd5b63594bbf504210610dcb5760006000fd5b60008111610dd95760006000fd5b600b8190556040805182815290517fee386bebbe46d39825c2b93313aa1ab1dc57d4774cac81c6debb8c611c9227ab9181900360200190a15b5b50565b600c54600160a060020a031681565b60005481565b60015433600160a060020a03908116911614610e475760006000fd5b600160a060020a0381166000818152600e6020526040808220805460ff19169055517fb3e6054663369578ee4831fc6c8ee9486db04e6f78b939250094785f6b6a430b9190a25b5b50565b600c54604080516000602091820181905282517f1ab3c515000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152935191949390931692631ab3c51592602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b600a5460ff1681565b600a5460009060ff161515610f3b5760006000fd5b600160a060020a0384166000908152600e602052604090205460ff1615610f625760006000fd5b610f6d848484611c88565b90505b9392505050565b60085481565b601281565b60055460ff1681565b63594bbf5081565b60015433600160a060020a03908116911614610faf5760006000fd5b63594bbf504210610fc05760006000fd5b60008111610fce5760006000fd5b600160a060020a038216600090815260066020526040902054610ff7908263ffffffff611c6016565b600160a060020a03831660009081526006602052604081209190915554611024908263ffffffff611c6016565b6000908155604080518381529051600160a060020a0385169291600080516020611f43833981519152919081900360200190a35b5b5050565b6a0ac0db698068112d00000081565b600d54600160a060020a031681565b6359734c5081565b600a5460009060ff16156110fc57600c546040805160006020918201819052825160e160020a632c1a0c910281529251600160a060020a039094169363583419229360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b5060005b5b90565b600a5460009060ff16156110fc57600c54604080516000602091820181905282517f622c77fe0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363622c77fe9360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b506000611100565b5b90565b600160a060020a0381166000908152600660205260409020545b919050565b60025433600160a060020a039081169116146111da5760006000fd5b600254600154604051600160a060020a0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36002546001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600160a060020a0382166000908152600660205260408120548290108015906112985750600160a060020a0383166000908152600760209081526040808320838052909152902054829010155b80156112a45750600082115b80156112db57506000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f854828101115b1561141d57600160a060020a038316600090815260066020526040902054611309908363ffffffff611e1d16565b600160a060020a0384166000908152600660209081526040808320939093556007815282822082805290522054611346908363ffffffff611e1d16565b600160a060020a0384166000908152600760209081526040808320838052825290912091909155600690527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8546113a3908363ffffffff611c6016565b600080805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f891909155546113e3908363ffffffff611e1d16565b6000908155604080518481529051600160a060020a03861691600080516020611f43833981519152919081900360200190a3506001610d89565b506000610d89565b5b92915050565b6a18d0bf423c03d8de00000081565b670de0b6b3a764000081565b600154600160a060020a031681565b60095481565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b505050505081565b635d0e265081565b60408051808201909152600d81527f6f70656e414e5820546f6b656e00000000000000000000000000000000000000602082015281565b60015433600160a060020a039081169116146115455760006000fd5b6000546a0ac0db698068112d0000009010158061156557506359734c5042115b15156115715760006000fd5b600a5460ff16156115825760006000fd5b600c54604080517fe9d7f3090000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163e9d7f3099160048082019260009290919082900301818387803b15156115dd57fe5b6102c65a03f115156115eb57fe5b5050506116a2600c60009054906101000a9004600160a060020a0316600160a060020a031663583419226000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b151561166557fe5b6102c65a03f1151561167357fe5b50506040805151600c54600160a060020a0316600090815260066020529190912054915063ffffffff611c6016565b600c8054600160a060020a03908116600090815260066020908152604080832095909555925484518401829052845160e160020a632c1a0c91028152945161173095919093169363583419229360048084019492939192918390030190829087803b151561170c57fe5b6102c65a03f1151561171a57fe5b505060405151600054915063ffffffff611c6016565b600055600a805460ff191660011790555b5b565b600b5481565b600a5460009060ff16151561175f5760006000fd5b600160a060020a0333166000908152600e602052604090205460ff16156117865760006000fd5b6117908383611e34565b90505b92915050565b600e6020526000908152604090205460ff1681565b600c54604080516000602091820181905282517fbc5dc168000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015293519194939093169263bc5dc16892602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b600a5460009060ff16156110fc57600c54604080516000602091820181905282517fc0c3da9c0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363c0c3da9c9360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b506000611100565b5b90565b600a5460009060ff16801561194e5750600c546040805160006020918201819052825160e160020a632c1a0c910281529251600160a060020a039094169363583419229360048082019493918390030190829087803b151561193257fe5b6102c65a03f1151561194057fe5b505060405151600054101590505b156110fc57600c546040805160006020918201819052825160e160020a632c1a0c9102815292516119c894600160a060020a0316936358341922936004808301949193928390030190829087803b15156119a457fe5b6102c65a03f115156119b257fe5b505060405151600054915063ffffffff611e1d16565b9050611100565b506000611100565b5b90565b600254600160a060020a031681565b60015460009033600160a060020a03908116911614611a095760006000fd5b600154604080516000602091820181905282517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0394851660048201526024810187905292519387169363a9059cbb9360448082019493918390030190829087803b1515611a7c57fe5b6102c65a03f11515611a8a57fe5b5050604051519150505b5b92915050565b600160a060020a038083166000908152600760209081526040808320938516835292905220545b92915050565b60015433600160a060020a03908116911614611ae45760006000fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560408051929091168252517f4edbfac5b40fe46ac1af1fd222b224b38cfeeb9e21bd4fc6344526c245f7549b916020908290030190a15b5b50565b600c54604080516000602091820181905282517fe960bb48000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015293519194939093169263e960bb4892602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b60015433600160a060020a03908116911614611bf45760006000fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b635b2cf2d081565b60408051808201909152600381527f4f41580000000000000000000000000000000000000000000000000000000000602082015281565b6000828201838110801590611c755750828110155b1515611c7d57fe5b8091505b5092915050565b600160a060020a038316600090815260066020526040812054829010801590611cd85750600160a060020a0380851660009081526007602090815260408083203390941683529290522054829010155b8015611ce45750600082115b8015611d095750600160a060020a038316600090815260066020526040902054828101115b15611e0d57600160a060020a038416600090815260066020526040902054611d37908363ffffffff611e1d16565b600160a060020a0380861660009081526006602090815260408083209490945560078152838220339093168252919091522054611d7a908363ffffffff611e1d16565b600160a060020a0380861660009081526007602090815260408083203385168452825280832094909455918616815260069091522054611dc0908363ffffffff611c6016565b600160a060020a038085166000818152600660209081526040918290209490945580518681529051919392881692600080516020611f4383398151915292918290030190a3506001610f70565b506000610f70565b5b9392505050565b600082821115611e2957fe5b508082035b92915050565b600160a060020a033316600090815260066020526040812054829010801590611e5d5750600082115b8015611e825750600160a060020a038316600090815260066020526040902054828101115b1561141d57600160a060020a033316600090815260066020526040902054611eb0908363ffffffff611e1d16565b600160a060020a033381166000908152600660205260408082209390935590851681522054611ee5908363ffffffff611c6016565b600160a060020a03808516600081815260066020908152604091829020949094558051868152905191933390931692600080516020611f4383398151915292918290030190a3506001610d89565b506000610d89565b5b929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582002d82e12d01419074eb87e3b53edd24e33c5ad021933496454ed30b3c41a4d160029

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

0000000000000000000000002b3b67c6dffc2bcdda2315491eac9bbe868fbcdd

-----Decoded View---------------
Arg [0] : _wallet (address): 0x2b3b67c6dffc2BCDDa2315491Eac9bbE868fbCDD

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


Swarm Source

bzzr://1ebf78c948e9b064875413e10729508a8cb3f4fc7b2decd423f81a4a0a420b80

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.