ETH Price: $3,334.52 (-1.77%)
Gas: 40 Gwei

Token

CHERR.IO (CHR)
 

Overview

Max Total Supply

85,105,190.561525582111104511 CHR

Holders

1,945

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
290 CHR

Value
$0.00
0x242f2a4e97f77237b6c72ad0cc17b4f77240e617
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

CHERR.IO is a blockchain solution for charitable donations, aiming to open new horizons for the way charitable, humanitarian and socially responsible organizations operate.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Cherrio

Compiler Version
v0.4.23+commit.124ca40d

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-05-15
*/

pragma solidity ^0.4.22;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a * b;
        assert(a == 0 || c / a == b);

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;

        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        assert(b <= a);

        return a - b;
    }

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

        return c;
    }
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address and
 *      provides basic authorization control functions
 */
contract Ownable {
    // Public properties
    address public owner;

    // Log if ownership has been changed
    event ChangeOwnership(address indexed _owner, address indexed _newOwner);

    // Checks if address is an owner
    modifier OnlyOwner() {
        require(msg.sender == owner);

        _;
    }

    // The Ownable constructor sets the owner address
    function Ownable() public {
        owner = msg.sender;
    }

    // Transfer current ownership to the new account
    function transferOwnership(address _newOwner) public OnlyOwner {
        require(_newOwner != address(0x0));

        owner = _newOwner;

        emit ChangeOwnership(owner, _newOwner);
    }
}

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    /*
    * @dev Event to notify listeners about pause.
    * @param pauseReason  string Reason the token was paused for.
    */
    event Pause(string pauseReason);
    /*
    * @dev Event to notify listeners about pause.
    * @param unpauseReason  string Reason the token was unpaused for.
    */
    event Unpause(string unpauseReason);

    bool public isPaused;
    string public pauseNotice;

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

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

    /**
    * @dev called by the owner to pause, triggers stopped state
    * @param _reason string The reason for the pause.
    */
    function pause(string _reason) OnlyOwner IsNotPaused public {
        isPaused = true;
        pauseNotice = _reason;
        emit Pause(_reason);
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     * @param _reason string Reason for the un pause.
     */
    function unpause(string _reason) OnlyOwner IsPaused public {
        isPaused = false;
        pauseNotice = _reason;
        emit Unpause(_reason);
    }
}

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
    uint256 public totalSupply;

    function balanceOf(address who) public view returns(uint256 theBalance);
    function transfer(address to, uint256 value) public returns(bool success);

    event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
    function allowance(address owner, address spender) public view returns(uint256 theAllowance);
    function transferFrom(address from, address to, uint256 value) public returns(bool success);
    function approve(address spender, uint256 value) public returns(bool success);

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

/**
 * @title Basic token
 * @dev Basic version of StandardToken without allowances.
 */
contract BasicToken is ERC20Basic {
    using SafeMath for uint256;

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

    /**
    * @dev Get the token balance for account
    * @param _address The address to query the balance of._address
    * @return An uint256 representing the amount owned by the passed address.
    */
    function balanceOf(address _address) public constant returns(uint256 theBalance){
        return balances[_address];
    }

    /**
    * @dev Transfer the balance from owner's account to another account
    * @param _to The address to transfer to.
    * @param _value The amount to be transferred.
    * @return Returns true if transfer has been successful
    */
    function transfer(address _to, uint256 _value) public returns(bool success){
        require(_to != address(0x0) && _value <= balances[msg.sender]);

        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);

        emit Transfer(msg.sender, _to, _value);

        return true;
    }
}

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 */
contract StandardToken is BasicToken, ERC20 {
    // Owner of account approves the transfer of an amount to another account
    mapping (address => mapping (address => uint256)) allowed;

    /**
     * @dev Returns the amount of tokens approved by the owner that can be transferred to the spender's account
     * @param _owner The address which owns the funds.
     * @param _spender The address which will spend the funds.
     * @return An uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(address _owner, address _spender) public constant returns(uint256 theAllowance){
        return allowed[_owner][_spender];
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     *
     * To change the approve amount you first have to reduce the addresses`
     * allowance to zero by calling `approve(_spender, 0)` if it is not
     * already 0 to mitigate the race condition described here:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * @param _spender The address which will spend the funds.
     * @param _value The amount of tokens to be spent.
     */
    function approve(address _spender, uint256 _value) public returns(bool success){
        require(allowed[msg.sender][_spender] == 0 || _value == 0);

        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);

        return true;
    }

    /**
     * Transfer from `from` account to `to` account using allowance in `from` account to the sender
     *
     * @param _from  Origin address
     * @param _to    Destination address
     * @param _value Amount of CHR tokens to send
     */
    function transferFrom(address _from, address _to, uint256 _value) public returns(bool success) {
        require(_to != address(0));
        require(_value <= balances[_from]);
        require(_value <= allowed[_from][msg.sender]);

        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);

        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);

        emit Transfer(_from, _to, _value);

        return true;
    }
}

/**
 * @title Burnable Token
 * @dev Token that can be irreversibly burned (destroyed).
 */
contract BurnableToken is BasicToken {
    event Burn(address indexed burner, uint256 value);

    /**
     * @dev Burns a specific amount of tokens.
     * @param _value The amount of token to be burned.
     */
    function burn(uint256 _value) public {
        require(_value <= balances[msg.sender]);

        balances[msg.sender] = balances[msg.sender].sub(_value);
        totalSupply = totalSupply.sub(_value);

        emit Burn(msg.sender, _value);
    }
}

/**
 * CHERR.IO is a standard ERC20 token with some additional functionalities:
 * - Transfers are only enabled after contract owner enables it (after the ICO)
 * - Contract sets 60% of the total supply as allowance for ICO contract
 */
contract Cherrio is StandardToken, BurnableToken, Ownable, Pausable {
    using SafeMath for uint256;

    // Metadata
    string  public constant name = "CHERR.IO";
    string  public constant symbol = "CHR";
    uint8   public constant decimals = 18;

    // Token supplies
    uint256 public constant INITIAL_SUPPLY =  200000000 * (10 ** uint256(decimals));
    uint256 public constant ADMIN_ALLOWANCE =  80000000 * (10 ** uint256(decimals));
    uint256 public constant CONTRACT_ALLOWANCE = INITIAL_SUPPLY - ADMIN_ALLOWANCE;

    // Funding cap in ETH. Change to equal $12M at time of token offering
    uint256 public constant FUNDING_ETH_HARD_CAP = 15000 ether;
    // Minimum cap in ETH. Change to equal $3M at time of token offering
    uint256 public constant MINIMUM_ETH_SOFT_CAP = 3750 ether;
    // Min contribution is 0.1 ether
    uint256 public constant MINIMUM_CONTRIBUTION = 100 finney;
    // Price of the tokens as in tokens per ether
    uint256 public constant RATE = 5333;
    // Price of the tokens in tier 1
    uint256 public constant RATE_TIER1 = 8743;
    // Price of the tokens in tier 2
    uint256 public constant RATE_TIER2 = 7306;
    // Price of the tokens in tier 3
    uint256 public constant RATE_TIER3 = 6584;
    // Price of the tokens in public sale for limited timeline
    uint256 public constant RATE_PUBLIC_SALE = 5926;
    // Maximum cap for tier 1 (60M CHR tokens)
    uint256 public constant TIER1_CAP = 60000000 * (10 ** uint256(decimals));
    // Maximum cap for tier 2 (36M CHR tokens)
    uint256 public constant TIER2_CAP = 36000000 * (10 ** uint256(decimals));

    // Maximum cap for each contributor in tier 1
    uint256 public participantCapTier1;
    // Maximum cap for each contributor in tier 2
    uint256 public participantCapTier2;

    // ETH cap for pool addres only in tier 1
    uint256 public poolAddressCapTier1;
    // ETH cap for pool addres only in tier 2
    uint256 public poolAddressCapTier2;

    // The address of the token admin
    address public adminAddress;
    // The address where ETH funds are collected
    address public beneficiaryAddress;
    // The address of the contract
    address public contractAddress;
    // The address of the pool who can send unlimited ETH to the contract
    address public poolAddress;

    // Enable transfers after conclusion of the token offering
    bool public transferIsEnabled;

    // Amount of raised in Wei
    uint256 public weiRaised;

    // Amount of CHR tokens sent to participant for presale and public sale
    uint256[4] public tokensSent;

    // Start of public pre-sale in timestamp
    uint256 startTimePresale;

    // Start and end time of public sale in timestamp
    uint256 startTime;
    uint256 endTime;

    // Discount period for public sale
    uint256 publicSaleDiscountEndTime;

    // End time limits in timestamp for each tier bonus
    uint256[3] public tierEndTime;

    //Check if contract address is already set
    bool contractAddressIsSet;

    struct Contributor {
        bool canContribute;
        uint8 tier;
        uint256 contributionInWeiTier1;
        uint256 contributionInWeiTier2;
        uint256 contributionInWeiTier3;
        uint256 contributionInWeiPublicSale;
    }

    struct Pool {
        uint256 contributionInWei;
    }

    enum Stages {
        Pending,
        PreSale,
        PublicSale,
        Ended
    }

    // The current stage of the offering
    Stages public stage;

    mapping(address => Contributor) public contributors;
    mapping(address => mapping(uint8 => Pool)) public pool;

    // Check if transfer is enabled
    modifier TransferIsEnabled {
        require(transferIsEnabled || msg.sender == adminAddress || msg.sender == contractAddress);

        _;
    }

    /**
     * @dev Check if address is a valid destination to transfer tokens to
     * - must not be zero address
     * - must not be the token address
     * - must not be the owner's address
     * - must not be the admin's address
     * - must not be the token offering contract address
     * - must not be the beneficiary address
     */
    modifier ValidDestination(address _to) {
        require(_to != address(0x0));
        require(_to != address(this));
        require(_to != owner);
        require(_to != address(adminAddress));
        require(_to != address(contractAddress));
        require(_to != address(beneficiaryAddress));

        _;
    }

    /**
     * Modifier that requires certain stage before executing the main function body
     *
     * @param _expectedStage Value that the current stage is required to match
     */
    modifier AtStage(Stages _expectedStage) {
        require(stage == _expectedStage);

        _;
    }

    // Check if ICO is live
    modifier CheckIfICOIsLive() {
        require(stage != Stages.Pending && stage != Stages.Ended);

        if(stage == Stages.PreSale) {
            require(
                startTimePresale > 0 &&
                now >= startTimePresale &&
                now <= tierEndTime[2]
            );
        }
        else {
            require(
                startTime > 0 &&
                now >= startTime &&
                now <= endTime
            );
        }

        _;
    }

    // Check if participant sent more then miniminum required contribution
    modifier CheckPurchase() {
        require(msg.value >= MINIMUM_CONTRIBUTION);

        _;
    }

    /**
     * Event for token purchase logging
     *
     * @param _purchaser Participant who paid for CHR tokens
     * @param _value     Amount in WEI paid for token
     * @param _tokens    Amount of tokens purchased
     */
    event TokenPurchase(address indexed _purchaser, uint256 _value, uint256 _tokens);

    /**
     * Event when token offering started
     *
     * @param _msg       Message
     * @param _startTime Start time in timestamp
     * @param _endTime   End time in timestamp
     */
    event OfferingOpens(string _msg, uint256 _startTime, uint256 _endTime);

    /**
     * Event when token offering ended and how much has been raised in wei
     *
     * @param _endTime        End time in timestamp
     * @param _totalWeiRaised Total raised funds in wei
     */
    event OfferingCloses(uint256 _endTime, uint256 _totalWeiRaised);

    /**
     * Cherrio constructor
     */
    function Cherrio() public {
        totalSupply = INITIAL_SUPPLY;

        // Mint tokens
        balances[msg.sender] = totalSupply;
        emit Transfer(address(0x0), msg.sender, totalSupply);

        // Aprove an allowance for admin account
        adminAddress = 0xe0509bB3921aacc433108D403f020a7c2f92e936;
        approve(adminAddress, ADMIN_ALLOWANCE);

        participantCapTier1 = 100 ether;
        participantCapTier2 = 100 ether;
        poolAddressCapTier1 = 2000 ether; 
        poolAddressCapTier2 = 2000 ether;

        weiRaised = 0;
        startTimePresale = 0;
        startTime = 0;
        endTime = 0;
        publicSaleDiscountEndTime = 0;
        transferIsEnabled = false;
        contractAddressIsSet = false;
    }

    /**
     * Add approved addresses
     *
     * @param _addresses Array of approved addresses
     * @param _tier      Tier
     */
    function addApprovedAddresses(address[] _addresses, uint8 _tier) external OnlyOwner {
        uint256 length = _addresses.length;

        for(uint256 i = 0; i < length; i++) {
            if(!contributors[_addresses[i]].canContribute) {
                contributors[_addresses[i]].canContribute = true;
                contributors[_addresses[i]].tier = _tier;
                contributors[_addresses[i]].contributionInWeiTier1 = 0;
                contributors[_addresses[i]].contributionInWeiTier2 = 0;
                contributors[_addresses[i]].contributionInWeiTier3 = 0;
                contributors[_addresses[i]].contributionInWeiPublicSale = 0;
            }
        }
    }

    /**
     * Add approved address
     *
     * @param _address Approved address
     * @param _tier    Tier
     */
    function addSingleApprovedAddress(address _address, uint8 _tier) external OnlyOwner {
        if(!contributors[_address].canContribute) {
            contributors[_address].canContribute = true;
            contributors[_address].tier = _tier;
            contributors[_address].contributionInWeiTier1 = 0;
            contributors[_address].contributionInWeiTier2 = 0;
            contributors[_address].contributionInWeiTier3 = 0;
            contributors[_address].contributionInWeiPublicSale = 0;
        }
    }

    /**
     * Set token offering address to approve allowance for offering contract to distribute tokens
     */
    function setTokenOffering() external OnlyOwner{
        require(!contractAddressIsSet);
        require(!transferIsEnabled);

        contractAddress = address(this);
        approve(contractAddress, CONTRACT_ALLOWANCE);

        beneficiaryAddress = 0xAec8c4242c8c2E532c6D6478A7de380263234845;
        poolAddress = 0x1A2C916B640520E1e93A78fEa04A49D8345a5aa9;

        pool[poolAddress][0].contributionInWei = 0;
        pool[poolAddress][1].contributionInWei = 0;
        pool[poolAddress][2].contributionInWei = 0;
        pool[poolAddress][3].contributionInWei = 0;

        tokensSent[0] = 0;
        tokensSent[1] = 0;
        tokensSent[2] = 0;
        tokensSent[3] = 0;

        stage = Stages.Pending;
        contractAddressIsSet = true;
    }

    /**
     * Set when presale starts
     *
     * @param _startTimePresale Start time of presale in timestamp
     */
    function startPresale(uint256 _startTimePresale) external OnlyOwner AtStage(Stages.Pending) {
        if(_startTimePresale == 0) {
            startTimePresale = now;
        }
        else {
            startTimePresale = _startTimePresale;
        }

        setTierEndTime();

        stage = Stages.PreSale;
    }

    /**
     * Set when public sale starts
     *
     * @param _startTime Start time of public sale in timestamp
     */
    function startPublicSale(uint256 _startTime) external OnlyOwner AtStage(Stages.PreSale) {
        if(_startTime == 0) {
            startTime = now;
        }
        else {
            startTime = _startTime;
        }

        endTime = startTime + 15 days;
        publicSaleDiscountEndTime = startTime + 3 days;

        stage = Stages.PublicSale;
    }

    // Fallback function can be used to buy CHR tokens
    function () public payable {
        buy();
    }

    function buy() public payable IsNotPaused CheckIfICOIsLive returns(bool _success) {
        uint8 currentTier = getCurrentTier();

        if(currentTier > 3) {
            revert();
        }

        if(!buyTokens(currentTier)) {
            revert();
        }

        return true;
    }

    /**
     * @param _tier Current Token Sale tier
     */
    function buyTokens(uint8 _tier) internal ValidDestination(msg.sender) CheckPurchase returns(bool _success) {
        if(weiRaised.add(msg.value) > FUNDING_ETH_HARD_CAP) {
            revert();
        }

        uint256 contributionInWei = msg.value;

        if(!checkTierCap(_tier, contributionInWei)) {
            revert();
        }

        uint256 rate = getTierTokens(_tier);
        uint256 tokens = contributionInWei.mul(rate);

        if(msg.sender != poolAddress) {
            if(stage == Stages.PreSale) {
                if(!checkAllowedTier(msg.sender, _tier)) {
                    revert();
                }
            }

            if(!checkAllowedContribution(msg.sender, contributionInWei, _tier)) {
                revert();
            }

            if(!this.transferFrom(owner, msg.sender, tokens)) {
                revert();
            }

            if(stage == Stages.PreSale) {
                if(_tier == 0) {
                    contributors[msg.sender].contributionInWeiTier1 = contributors[msg.sender].contributionInWeiTier1.add(contributionInWei);
                }
                else if(_tier == 1) {
                    contributors[msg.sender].contributionInWeiTier2 = contributors[msg.sender].contributionInWeiTier2.add(contributionInWei);
                }
                else if(_tier == 2) {
                    contributors[msg.sender].contributionInWeiTier3 = contributors[msg.sender].contributionInWeiTier3.add(contributionInWei);
                }
            }
            else {
                contributors[msg.sender].contributionInWeiPublicSale = contributors[msg.sender].contributionInWeiPublicSale.add(contributionInWei);
            }
        }
        else {
            if(!checkPoolAddressTierCap(_tier, contributionInWei)) {
                revert();
            }

            if(!this.transferFrom(owner, msg.sender, tokens)) {
                revert();
            }

            pool[poolAddress][_tier].contributionInWei = pool[poolAddress][_tier].contributionInWei.add(contributionInWei);
        }

        weiRaised = weiRaised.add(contributionInWei);
        tokensSent[_tier] = tokensSent[_tier].add(tokens);

        if(weiRaised >= FUNDING_ETH_HARD_CAP) {
            offeringEnded();
        }

        beneficiaryAddress.transfer(address(this).balance);
        emit TokenPurchase(msg.sender, contributionInWei, tokens);

        return true;
    }

    /**
     * Manually withdraw tokens to private investors
     *
     * @param _to    Address of private investor
     * @param _value The number of tokens to send to private investor
     */
    function withdrawCrowdsaleTokens(address _to, uint256 _value) external OnlyOwner ValidDestination(_to) returns (bool _success) {
        if(!this.transferFrom(owner, _to, _value)) {
            revert();
        }

        return true;
    }

    /**
     * Transfer from sender to another account
     *
     * @param _to    Destination address
     * @param _value Amount of CHR tokens to send
     */
    function transfer(address _to, uint256 _value) public ValidDestination(_to) TransferIsEnabled IsNotPaused returns(bool _success){
         return super.transfer(_to, _value);
    }

    /**
     * Transfer from `from` account to `to` account using allowance in `from` account to the sender
     *
     * @param _from  Origin address
     * @param _to    Destination address
     * @param _value Amount of CHR tokens to send
     */
    function transferFrom(address _from, address _to, uint256 _value) public ValidDestination(_to) TransferIsEnabled IsNotPaused returns(bool _success){
        return super.transferFrom(_from, _to, _value);
    }

    /**
     * Check if participant is allowed to contribute in current tier
     *
     * @param _address Participant address
     * @param _tier    Current tier
     */
    function checkAllowedTier(address _address, uint8 _tier) internal view returns (bool _allowed) {
        if(contributors[_address].tier <= _tier) {
            return true;
        }
        else{
          return false;
        }
    }

    /**
     * Check contribution cap for only tier 1 and 2
     *
     * @param _tier  Current tier
     * @param _value Participant contribution
     */
    function checkTierCap(uint8 _tier, uint256 _value) internal view returns (bool _success) {
        uint256 currentlyTokensSent = tokensSent[_tier];
        bool status = true;

        if(_tier == 0) {
            if(TIER1_CAP < currentlyTokensSent.add(_value)) {
                status = false;
            }
        }
        else if(_tier == 1) {
            if(TIER2_CAP < currentlyTokensSent.add(_value)) {
                status = false;
            }
        }

        return status;
    }
    
    /**
     * Check cap for pool address in tier 1 and 2
     *
     * @param _tier  Current tier
     * @param _value Pool contribution
     */
    function checkPoolAddressTierCap(uint8 _tier, uint256 _value) internal view returns (bool _success) {
        uint256 currentContribution = pool[poolAddress][_tier].contributionInWei;

        if((_tier == 0 && (poolAddressCapTier1 < currentContribution.add(_value))) || (_tier == 1 && (poolAddressCapTier2 < currentContribution.add(_value)))) {
            return false;
        }

        return true;
    }

    /**
     * Check cap for pool address in tier 1 and 2
     *
     * @param _address  Participant address
     * @param _value    Participant contribution
     * @param _tier     Current tier
     */
    function checkAllowedContribution(address _address, uint256 _value, uint8 _tier) internal view returns (bool _success) {
        bool status = false;

        if(contributors[_address].canContribute) {
            if(_tier == 0) {
                if(participantCapTier1 >= contributors[_address].contributionInWeiTier1.add(_value)) {
                    status = true;
                }
            }
            else if(_tier == 1) {
                if(participantCapTier2 >= contributors[_address].contributionInWeiTier2.add(_value)) {
                    status = true;
                }
            }
            else if(_tier == 2) {
                status = true;
            }
            else {
                status = true;
            }
        }

        return status;
    }
    
    /**
     * Get current tier tokens rate
     *
     * @param _tier     Current tier
     */
    function getTierTokens(uint8 _tier) internal view returns(uint256 _tokens) {
        uint256 tokens = RATE_TIER1;

        if(_tier == 1) {
            tokens = RATE_TIER2;
        }
        else if(_tier == 2) {
            tokens = RATE_TIER3;
        }
        else if(_tier == 3) {
            if(now <= publicSaleDiscountEndTime) {
                tokens = RATE_PUBLIC_SALE;
            }
            else {
                tokens = RATE;
            }
        }

        return tokens;
    }

    // Get current tier
    function getCurrentTier() public view returns(uint8 _tier) {
        uint8 currentTier = 3; // 3 is public sale

        if(stage == Stages.PreSale) {
            if(now <= tierEndTime[0]) {
                currentTier = 0;
            }
            else if(now <= tierEndTime[1]) {
                currentTier = 1;
            }
            else if(now <= tierEndTime[2]) {
                currentTier = 2;
            }
        }
        else {
            if(now > endTime) {
                currentTier = 4; // Token offering ended
            }
        }

        return currentTier;
    }

    // Set end time for each tier
    function setTierEndTime() internal AtStage(Stages.Pending) {
        tierEndTime[0] = startTimePresale + 1 days; 
        tierEndTime[1] = tierEndTime[0] + 2 days;   
        tierEndTime[2] = tierEndTime[1] + 6 days;   
    }

    // End the token offering
    function endOffering() public OnlyOwner {
        offeringEnded();
    }

    // Token offering is ended
    function offeringEnded() internal {
        endTime = now;
        stage = Stages.Ended;

        emit OfferingCloses(endTime, weiRaised);
    }

    // Enable transfers, burn unsold tokens & set tokenOfferingAddress to 0
    function enableTransfer() public OnlyOwner returns(bool _success){
        transferIsEnabled = true;
        uint256 tokensToBurn = allowed[msg.sender][contractAddress];

        if(tokensToBurn != 0){
            burn(tokensToBurn);
            approve(contractAddress, 0);
        }

        return true;
    }
    
    /**
     * Extend end time
     *
     * @param _addedTime Addtional time in secods
     */
    function extendEndTime(uint256 _addedTime) external OnlyOwner {
        endTime = endTime + _addedTime;
    }
    
    /**
     * Extend public sale discount time
     *
     * @param _addedPublicSaleDiscountEndTime Addtional time in secods
     */
    function extendPublicSaleDiscountEndTime(uint256 _addedPublicSaleDiscountEndTime) external OnlyOwner {
        publicSaleDiscountEndTime = publicSaleDiscountEndTime + _addedPublicSaleDiscountEndTime;
    }
    
    /**
     * Update pool cap for tier 1
     *
     * @param _poolAddressCapTier1 Tier cap
     */
    function updatePoolAddressCapTier1(uint256 _poolAddressCapTier1) external OnlyOwner {
        poolAddressCapTier1 = _poolAddressCapTier1;
    }
    
    /**
     * Update pool cap for tier 2
     *
     * @param _poolAddressCapTier2 Tier cap
     */
    function updatePoolAddressCapTier2(uint256 _poolAddressCapTier2) external OnlyOwner {
        poolAddressCapTier2 = _poolAddressCapTier2;
    }

    //
    
    /**
     * Update participant cap for tier 1
     *
     * @param _participantCapTier1 Tier cap
     */
    function updateParticipantCapTier1(uint256 _participantCapTier1) external OnlyOwner {
        participantCapTier1 = _participantCapTier1;
    }
    
    /**
     * Update participant cap for tier 2
     *
     * @param _participantCapTier2 Tier cap
     */
    function updateParticipantCapTier2(uint256 _participantCapTier2) external OnlyOwner {
        participantCapTier2 = _participantCapTier2;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"CONTRACT_ALLOWANCE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_participantCapTier1","type":"uint256"}],"name":"updateParticipantCapTier1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"poolAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributors","outputs":[{"name":"canContribute","type":"bool"},{"name":"tier","type":"uint8"},{"name":"contributionInWeiTier1","type":"uint256"},{"name":"contributionInWeiTier2","type":"uint256"},{"name":"contributionInWeiTier3","type":"uint256"},{"name":"contributionInWeiPublicSale","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"poolAddressCapTier1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transferIsEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tierEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pauseNotice","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint8"}],"name":"pool","outputs":[{"name":"contributionInWei","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"RATE_TIER3","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addresses","type":"address[]"},{"name":"_tier","type":"uint8"}],"name":"addApprovedAddresses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"RATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"participantCapTier2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_reason","type":"string"}],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"balanceOf","outputs":[{"name":"theBalance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokensSent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setTokenOffering","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTier","outputs":[{"name":"_tier","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_startTime","type":"uint256"}],"name":"startPublicSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"RATE_TIER1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_participantCapTier2","type":"uint256"}],"name":"updateParticipantCapTier2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addedTime","type":"uint256"}],"name":"extendEndTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_CONTRIBUTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_tier","type":"uint8"}],"name":"addSingleApprovedAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TIER1_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"poolAddressCapTier2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"endOffering","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_startTimePresale","type":"uint256"}],"name":"startPresale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[{"name":"_success","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isPaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_poolAddressCapTier2","type":"uint256"}],"name":"updatePoolAddressCapTier2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TIER2_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"participantCapTier1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_poolAddressCapTier1","type":"uint256"}],"name":"updatePoolAddressCapTier1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"beneficiaryAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"theAllowance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FUNDING_ETH_HARD_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"RATE_PUBLIC_SALE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"withdrawCrowdsaleTokens","outputs":[{"name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_reason","type":"string"}],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"RATE_TIER2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableTransfer","outputs":[{"name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_ETH_SOFT_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ADMIN_ALLOWANCE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addedPublicSaleDiscountEndTime","type":"uint256"}],"name":"extendPublicSaleDiscountEndTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_purchaser","type":"address"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_msg","type":"string"},{"indexed":false,"name":"_startTime","type":"uint256"},{"indexed":false,"name":"_endTime","type":"uint256"}],"name":"OfferingOpens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_endTime","type":"uint256"},{"indexed":false,"name":"_totalWeiRaised","type":"uint256"}],"name":"OfferingCloses","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pauseReason","type":"string"}],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"unpauseReason","type":"string"}],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_newOwner","type":"address"}],"name":"ChangeOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

60806040523480156200001157600080fd5b5033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260ff16600a0a630bebc20002600081905550600054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000546040518082815260200191505060405180910390a373e0509bb3921aacc433108d403f020a7c2f92e936600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001b4600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260ff16600a0a6304c4b4000262000259640100000000026401000000009004565b5068056bc75e2d6310000060058190555068056bc75e2d63100000600681905550686c6b935b8bbd400000600781905550686c6b935b8bbd4000006008819055506000600d8190555060006012819055506000601381905550600060148190555060006015819055506000600c60146101000a81548160ff0219169083151502179055506000601960006101000a81548160ff021916908315150217905550620003e2565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480620002e65750600082145b1515620002f257600080fd5b81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b61506d80620003f26000396000f3006080604052600436106102ca576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063021e7f85146102d557806306fdde0314610300578063090d993a14610390578063095ea7b3146103bd5780631755ff211461042257806318160ddd146104795780631f6d4942146104a4578063205dc0ee146105285780632282d9f21461055357806323b872dd1461058257806328a647ee146106075780632ad0a4e9146106485780632f1c167c146106d85780632ff2e9dc1461073c578063313ce567146107675780634042b66f1461079857806342966c68146107c35780634f961a6b146107f05780635659856c1461081b578063664e970414610863578063672acef01461088e5780636da66355146108b957806370a0823114610922578063716b01ce1461097957806372dd236a146109ba5780637412c223146109d157806374817d9b14610a025780637b283b7114610a2f578063842bfad214610a5a57806388770cb014610a875780638d0bba0314610ab45780638da5cb5b14610adf57806395c3239114610b3657806395d89b4114610b86578063964ad43414610c16578063999dd03e14610c415780639be3b28614610c6c578063a132aad114610c83578063a6f2ae3a14610cb0578063a9059cbb14610cd2578063b187bd2614610d37578063bf2b752414610d66578063c040e6b814610d93578063c7f43b5714610dcc578063d458c52214610df7578063d4ed899014610e22578063d9c4870e14610e4f578063dd62ed3e14610ea6578063e072830c14610f1d578063e2c3f9a814610f48578063e5c6258d14610f73578063e79faa5814610fd8578063ee2127c814611041578063f1b50c1d1461106c578063f206cf741461109b578063f2fde38b146110c6578063f6b4dfb414611109578063fc53f95814611160578063fc6f94681461118b578063fe1829b6146111e2575b6102d261120f565b50005b3480156102e157600080fd5b506102ea611368565b6040518082815260200191505060405180910390f35b34801561030c57600080fd5b50610315611388565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035557808201518184015260208101905061033a565b50505050905090810190601f1680156103825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039c57600080fd5b506103bb600480360381019080803590602001909291905050506113c1565b005b3480156103c957600080fd5b50610408600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611427565b604051808215151515815260200191505060405180910390f35b34801561042e57600080fd5b506104376115ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561048557600080fd5b5061048e6115d4565b6040518082815260200191505060405180910390f35b3480156104b057600080fd5b506104e5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115da565b60405180871515151581526020018660ff1660ff168152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561053457600080fd5b5061053d611630565b6040518082815260200191505060405180910390f35b34801561055f57600080fd5b50610568611636565b604051808215151515815260200191505060405180910390f35b34801561058e57600080fd5b506105ed600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611649565b604051808215151515815260200191505060405180910390f35b34801561061357600080fd5b5061063260048036038101908080359060200190929190505050611933565b6040518082815260200191505060405180910390f35b34801561065457600080fd5b5061065d61194d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561069d578082015181840152602081019050610682565b50505050905090810190601f1680156106ca5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156106e457600080fd5b50610726600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291905050506119eb565b6040518082815260200191505060405180910390f35b34801561074857600080fd5b50610751611a16565b6040518082815260200191505060405180910390f35b34801561077357600080fd5b5061077c611a27565b604051808260ff1660ff16815260200191505060405180910390f35b3480156107a457600080fd5b506107ad611a2c565b6040518082815260200191505060405180910390f35b3480156107cf57600080fd5b506107ee60048036038101908080359060200190929190505050611a32565b005b3480156107fc57600080fd5b50610805611b81565b6040518082815260200191505060405180910390f35b34801561082757600080fd5b50610861600480360381019080803590602001908201803590602001919091929391929390803560ff169060200190929190505050611b87565b005b34801561086f57600080fd5b50610878611f60565b6040518082815260200191505060405180910390f35b34801561089a57600080fd5b506108a3611f66565b6040518082815260200191505060405180910390f35b3480156108c557600080fd5b50610920600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611f6c565b005b34801561092e57600080fd5b50610963600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120b5565b6040518082815260200191505060405180910390f35b34801561098557600080fd5b506109a4600480360381019080803590602001909291905050506120fe565b6040518082815260200191505060405180910390f35b3480156109c657600080fd5b506109cf612118565b005b3480156109dd57600080fd5b506109e6612578565b604051808260ff1660ff16815260200191505060405180910390f35b348015610a0e57600080fd5b50610a2d60048036038101908080359060200190929190505050612630565b005b348015610a3b57600080fd5b50610a44612722565b6040518082815260200191505060405180910390f35b348015610a6657600080fd5b50610a8560048036038101908080359060200190929190505050612728565b005b348015610a9357600080fd5b50610ab26004803603810190808035906020019092919050505061278e565b005b348015610ac057600080fd5b50610ac96127f8565b6040518082815260200191505060405180910390f35b348015610aeb57600080fd5b50610af4612804565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b4257600080fd5b50610b84600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919050505061282a565b005b348015610b9257600080fd5b50610b9b612ab7565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bdb578082015181840152602081019050610bc0565b50505050905090810190601f168015610c085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c2257600080fd5b50610c2b612af0565b6040518082815260200191505060405180910390f35b348015610c4d57600080fd5b50610c56612b01565b6040518082815260200191505060405180910390f35b348015610c7857600080fd5b50610c81612b07565b005b348015610c8f57600080fd5b50610cae60048036038101908080359060200190929190505050612b6d565b005b610cb861120f565b604051808215151515815260200191505060405180910390f35b348015610cde57600080fd5b50610d1d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c4b565b604051808215151515815260200191505060405180910390f35b348015610d4357600080fd5b50610d4c612f33565b604051808215151515815260200191505060405180910390f35b348015610d7257600080fd5b50610d9160048036038101908080359060200190929190505050612f46565b005b348015610d9f57600080fd5b50610da8612fac565b60405180826003811115610db857fe5b60ff16815260200191505060405180910390f35b348015610dd857600080fd5b50610de1612fbf565b6040518082815260200191505060405180910390f35b348015610e0357600080fd5b50610e0c612fd0565b6040518082815260200191505060405180910390f35b348015610e2e57600080fd5b50610e4d60048036038101908080359060200190929190505050612fd6565b005b348015610e5b57600080fd5b50610e6461303c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610eb257600080fd5b50610f07600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613062565b6040518082815260200191505060405180910390f35b348015610f2957600080fd5b50610f326130e9565b6040518082815260200191505060405180910390f35b348015610f5457600080fd5b50610f5d6130f7565b6040518082815260200191505060405180910390f35b348015610f7f57600080fd5b50610fbe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506130fd565b604051808215151515815260200191505060405180910390f35b348015610fe457600080fd5b5061103f600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613491565b005b34801561104d57600080fd5b506110566135d9565b6040518082815260200191505060405180910390f35b34801561107857600080fd5b506110816135df565b604051808215151515815260200191505060405180910390f35b3480156110a757600080fd5b506110b0613744565b6040518082815260200191505060405180910390f35b3480156110d257600080fd5b50611107600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613751565b005b34801561111557600080fd5b5061111e6138a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561116c57600080fd5b506111756138cf565b6040518082815260200191505060405180910390f35b34801561119757600080fd5b506111a06138e0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111ee57600080fd5b5061120d60048036038101908080359060200190929190505050613906565b005b600080600360149054906101000a900460ff1615151561122e57600080fd5b6000600381111561123b57fe5b601960019054906101000a900460ff16600381111561125657fe5b14158015611289575060038081111561126b57fe5b601960019054906101000a900460ff16600381111561128657fe5b14155b151561129457600080fd5b600160038111156112a157fe5b601960019054906101000a900460ff1660038111156112bc57fe5b14156113035760006012541180156112d657506012544210155b80156112f35750601660026003811015156112ed57fe5b01544211155b15156112fe57600080fd5b611331565b600060135411801561131757506013544210155b801561132557506014544211155b151561133057600080fd5b5b611339612578565b905060038160ff16111561134c57600080fd5b61135581613970565b151561136057600080fd5b600191505090565b601260ff16600a0a6304c4b40002601260ff16600a0a630bebc200020381565b6040805190810160405280600881526020017f43484552522e494f00000000000000000000000000000000000000000000000081525081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561141d57600080fd5b8060058190555050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806114b35750600082145b15156114be57600080fd5b81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b601a6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060010154908060020154908060030154908060040154905086565b60075481565b600c60149054906101000a900460ff1681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561168857600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116c357600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561172057600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561177d57600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156117da57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561183757600080fd5b600c60149054906101000a900460ff168061189f5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806118f75750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561190257600080fd5b600360149054906101000a900460ff1615151561191e57600080fd5b61192985858561445d565b9150509392505050565b60168160038110151561194257fe5b016000915090505481565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119e35780601f106119b8576101008083540402835291602001916119e3565b820191906000526020600020905b8154815290600101906020018083116119c657829003601f168201915b505050505081565b601b602052816000526040600020602052806000526040600020600091509150508060000154905081565b601260ff16600a0a630bebc2000281565b601281565b600d5481565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111151515611a8057600080fd5b611ad281600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461481c90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b2a8160005461481c90919063ffffffff16565b6000819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a250565b6119b881565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611be657600080fd5b848490509150600090505b81811015611f5957601a60008686848181101515611c0b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515611f4c576001601a60008787858181101515611c8d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555082601a60008787858181101515611d1157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055506000601a60008787858181101515611d9757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000601a60008787858181101515611e0957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000601a60008787858181101515611e7b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506000601a60008787858181101515611eed57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b8080600101915050611bf1565b5050505050565b6114d581565b60065481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fc857600080fd5b600360149054906101000a900460ff16151515611fe457600080fd5b6001600360146101000a81548160ff0219169083151502179055508060049080519060200190612015929190614f9c565b507f46f81aedb227deef794d5c737014a5414db3c678220a521b747734688cc6a9fe816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561207857808201518184015260208101905061205d565b50505050905090810190601f1680156120a55780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e8160048110151561210d57fe5b016000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561217457600080fd5b601960009054906101000a900460ff1615151561219057600080fd5b600c60149054906101000a900460ff161515156121ac57600080fd5b30600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612235600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260ff16600a0a6304c4b40002601260ff16600a0a630bebc2000203611427565b5073aec8c4242c8c2e532c6d6478a7de380263234845600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731a2c916b640520e1e93a78fea04a49d8345a5aa9600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008060ff168152602001908152602001600020600001819055506000601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600160ff168152602001908152602001600020600001819055506000601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260ff168152602001908152602001600020600001819055506000601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600360ff168152602001908152602001600020600001819055506000600e60006004811015156124ed57fe5b01819055506000600e600160048110151561250457fe5b01819055506000600e600260048110151561251b57fe5b01819055506000600e600360048110151561253257fe5b01819055506000601960016101000a81548160ff0219169083600381111561255657fe5b02179055506001601960006101000a81548160ff021916908315150217905550565b600080600390506001600381111561258c57fe5b601960019054906101000a900460ff1660038111156125a757fe5b141561261957601660006003811015156125bd57fe5b0154421115156125d05760009050612614565b601660016003811015156125e057fe5b0154421115156125f35760019050612613565b6016600260038110151561260357fe5b01544211151561261257600290505b5b5b612629565b60145442111561262857600490505b5b8091505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561268c57600080fd5b600180600381111561269a57fe5b601960019054906101000a900460ff1660038111156126b557fe5b1415156126c157600080fd5b60008214156126d657426013819055506126de565b816013819055505b6213c680601354016014819055506203f480601354016015819055506002601960016101000a81548160ff0219169083600381111561271957fe5b02179055505050565b61222781565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561278457600080fd5b8060068190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127ea57600080fd5b806014540160148190555050565b67016345785d8a000081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561288657600080fd5b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515612ab3576001601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555080601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b5050565b6040805190810160405280600381526020017f434852000000000000000000000000000000000000000000000000000000000081525081565b601260ff16600a0a63039387000281565b60085481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612b6357600080fd5b612b6b614835565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612bc957600080fd5b6000806003811115612bd757fe5b601960019054906101000a900460ff166003811115612bf257fe5b141515612bfe57600080fd5b6000821415612c135742601281905550612c1b565b816012819055505b612c236148a5565b6001601960016101000a81548160ff02191690836003811115612c4257fe5b02179055505050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612c8a57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612cc557600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612d2257600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612d7f57600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612ddc57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612e3957600080fd5b600c60149054906101000a900460ff1680612ea15750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80612ef95750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612f0457600080fd5b600360149054906101000a900460ff16151515612f2057600080fd5b612f2a8484614952565b91505092915050565b600360149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612fa257600080fd5b8060088190555050565b601960019054906101000a900460ff1681565b601260ff16600a0a63022551000281565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561303257600080fd5b8060078190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b69032d26d12e980b60000081565b61172681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561315b57600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561319857600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156131d357600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561323057600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561328d57600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156132ea57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561334757600080fd5b3073ffffffffffffffffffffffffffffffffffffffff166323b872dd600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b505050506040513d602081101561346a57600080fd5b8101908080519060200190929190505050151561348657600080fd5b600191505092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156134ed57600080fd5b600360149054906101000a900460ff16151561350857600080fd5b6000600360146101000a81548160ff0219169083151502179055508060049080519060200190613539929190614f9c565b507fab8f771d320c36af1f739e78861e82b4a21f97b123153ce1657e6904c8645da1816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561359c578082015181840152602081019050613581565b50505050905090810190601f1680156135c95780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b611c8a81565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561363e57600080fd5b6001600c60146101000a81548160ff021916908315150217905550600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114151561373c5761370d81611a32565b61373a600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000611427565b505b600191505090565b68cb49b44ba602d8000081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156137ad57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156137e957600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdf73496bb06edd4685dc2027b9d115504a7130d57f4f33dfd66679517060f45760405160405180910390a350565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260ff16600a0a6304c4b4000281565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561396257600080fd5b806015540160158190555050565b60008060008033600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156139b357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156139ee57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613a4b57600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613aa857600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613b0557600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613b6257600080fd5b67016345785d8a00003410151515613b7957600080fd5b69032d26d12e980b600000613b9934600d54614b7390919063ffffffff16565b1115613ba457600080fd5b349350613bb18685614b91565b1515613bbc57600080fd5b613bc586614c32565b9250613bda8385614c9990919063ffffffff16565b9150600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156140a25760016003811115613c4057fe5b601960019054906101000a900460ff166003811115613c5b57fe5b1415613c7757613c6b3387614ccc565b1515613c7657600080fd5b5b613c82338588614d40565b1515613c8d57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff166323b872dd600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613d8657600080fd5b505af1158015613d9a573d6000803e3d6000fd5b505050506040513d6020811015613db057600080fd5b81019080805190602001909291905050501515613dcc57600080fd5b60016003811115613dd957fe5b601960019054906101000a900460ff166003811115613df457fe5b14156140015760008660ff161415613ea657613e5b84601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154614b7390919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550613ffc565b60018660ff161415613f5257613f0784601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614b7390919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550613ffb565b60028660ff161415613ffa57613fb384601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154614b7390919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055505b5b5b61409d565b61405684601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154614b7390919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b614304565b6140ac8685614eae565b15156140b757600080fd5b3073ffffffffffffffffffffffffffffffffffffffff166323b872dd600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156141b057600080fd5b505af11580156141c4573d6000803e3d6000fd5b505050506040513d60208110156141da57600080fd5b810190808051906020019092919050505015156141f657600080fd5b61428484601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008960ff1660ff16815260200190815260200160002060000154614b7390919063ffffffff16565b601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008860ff1660ff168152602001908152602001600020600001819055505b61431984600d54614b7390919063ffffffff16565b600d8190555061434582600e8860ff1660048110151561433557fe5b0154614b7390919063ffffffff16565b600e8760ff1660048110151561435757fe5b018190555069032d26d12e980b600000600d5410151561437a57614379614835565b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156143f9573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f8584604051808381526020018281526020019250505060405180910390a26001945050505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561449a57600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111515156144e857600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561457357600080fd5b6145c582600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461481c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061465a82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b7390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061472c82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461481c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600082821115151561482a57fe5b818303905092915050565b426014819055506003601960016101000a81548160ff0219169083600381111561485b57fe5b02179055507f02359fdde4491e11fa0985b799db1f730257a9715a67fd4b9ed9956e194025f0601454600d54604051808381526020018281526020019250505060405180910390a1565b60008060038111156148b357fe5b601960019054906101000a900460ff1660038111156148ce57fe5b1415156148da57600080fd5b6201518060125401601660006003811015156148f257fe5b01819055506202a3006016600060038110151561490b57fe5b0154016016600160038110151561491e57fe5b01819055506207e9006016600160038110151561493757fe5b0154016016600260038110151561494a57fe5b018190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156149cf5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211155b15156149da57600080fd5b614a2c82600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461481c90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ac182600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b7390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000808284019050838110151515614b8757fe5b8091505092915050565b6000806000600e8560ff16600481101515614ba857fe5b015491506001905060008560ff161415614bed57614bcf8483614b7390919063ffffffff16565b601260ff16600a0a6303938700021015614be857600090505b614c27565b60018560ff161415614c2657614c0c8483614b7390919063ffffffff16565b601260ff16600a0a6302255100021015614c2557600090505b5b5b809250505092915050565b600080612227905060018360ff161415614c5057611c8a9050614c90565b60028360ff161415614c66576119b89050614c8f565b60038360ff161415614c8e5760155442111515614c87576117269050614c8d565b6114d590505b5b5b5b80915050919050565b60008082840290506000841480614cba5750828482811515614cb757fe5b04145b1515614cc257fe5b8091505092915050565b60008160ff16601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660ff16111515614d355760019050614d3a565b600090505b92915050565b60008060009050601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1615614ea35760008360ff161415614e1157614dfd84601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154614b7390919063ffffffff16565b600554101515614e0c57600190505b614ea2565b60018360ff161415614e8657614e7284601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614b7390919063ffffffff16565b600654101515614e8157600190505b614ea1565b60028360ff161415614e9b5760019050614ea0565b600190505b5b5b5b809150509392505050565b600080601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008560ff1660ff16815260200190815260200160002060000154905060008460ff16148015614f555750614f508382614b7390919063ffffffff16565b600754105b80614f82575060018460ff16148015614f815750614f7c8382614b7390919063ffffffff16565b600854105b5b15614f905760009150614f95565b600191505b5092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614fdd57805160ff191683800117855561500b565b8280016001018555821561500b579182015b8281111561500a578251825591602001919060010190614fef565b5b509050615018919061501c565b5090565b61503e91905b8082111561503a576000816000905550600101615022565b5090565b905600a165627a7a7230582022e215f661d78eb641dd83534c19cb916ddbcf51dac40cf0707cdc08cd5ec7db0029

Deployed Bytecode

0x6080604052600436106102ca576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063021e7f85146102d557806306fdde0314610300578063090d993a14610390578063095ea7b3146103bd5780631755ff211461042257806318160ddd146104795780631f6d4942146104a4578063205dc0ee146105285780632282d9f21461055357806323b872dd1461058257806328a647ee146106075780632ad0a4e9146106485780632f1c167c146106d85780632ff2e9dc1461073c578063313ce567146107675780634042b66f1461079857806342966c68146107c35780634f961a6b146107f05780635659856c1461081b578063664e970414610863578063672acef01461088e5780636da66355146108b957806370a0823114610922578063716b01ce1461097957806372dd236a146109ba5780637412c223146109d157806374817d9b14610a025780637b283b7114610a2f578063842bfad214610a5a57806388770cb014610a875780638d0bba0314610ab45780638da5cb5b14610adf57806395c3239114610b3657806395d89b4114610b86578063964ad43414610c16578063999dd03e14610c415780639be3b28614610c6c578063a132aad114610c83578063a6f2ae3a14610cb0578063a9059cbb14610cd2578063b187bd2614610d37578063bf2b752414610d66578063c040e6b814610d93578063c7f43b5714610dcc578063d458c52214610df7578063d4ed899014610e22578063d9c4870e14610e4f578063dd62ed3e14610ea6578063e072830c14610f1d578063e2c3f9a814610f48578063e5c6258d14610f73578063e79faa5814610fd8578063ee2127c814611041578063f1b50c1d1461106c578063f206cf741461109b578063f2fde38b146110c6578063f6b4dfb414611109578063fc53f95814611160578063fc6f94681461118b578063fe1829b6146111e2575b6102d261120f565b50005b3480156102e157600080fd5b506102ea611368565b6040518082815260200191505060405180910390f35b34801561030c57600080fd5b50610315611388565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035557808201518184015260208101905061033a565b50505050905090810190601f1680156103825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039c57600080fd5b506103bb600480360381019080803590602001909291905050506113c1565b005b3480156103c957600080fd5b50610408600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611427565b604051808215151515815260200191505060405180910390f35b34801561042e57600080fd5b506104376115ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561048557600080fd5b5061048e6115d4565b6040518082815260200191505060405180910390f35b3480156104b057600080fd5b506104e5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115da565b60405180871515151581526020018660ff1660ff168152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561053457600080fd5b5061053d611630565b6040518082815260200191505060405180910390f35b34801561055f57600080fd5b50610568611636565b604051808215151515815260200191505060405180910390f35b34801561058e57600080fd5b506105ed600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611649565b604051808215151515815260200191505060405180910390f35b34801561061357600080fd5b5061063260048036038101908080359060200190929190505050611933565b6040518082815260200191505060405180910390f35b34801561065457600080fd5b5061065d61194d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561069d578082015181840152602081019050610682565b50505050905090810190601f1680156106ca5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156106e457600080fd5b50610726600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291905050506119eb565b6040518082815260200191505060405180910390f35b34801561074857600080fd5b50610751611a16565b6040518082815260200191505060405180910390f35b34801561077357600080fd5b5061077c611a27565b604051808260ff1660ff16815260200191505060405180910390f35b3480156107a457600080fd5b506107ad611a2c565b6040518082815260200191505060405180910390f35b3480156107cf57600080fd5b506107ee60048036038101908080359060200190929190505050611a32565b005b3480156107fc57600080fd5b50610805611b81565b6040518082815260200191505060405180910390f35b34801561082757600080fd5b50610861600480360381019080803590602001908201803590602001919091929391929390803560ff169060200190929190505050611b87565b005b34801561086f57600080fd5b50610878611f60565b6040518082815260200191505060405180910390f35b34801561089a57600080fd5b506108a3611f66565b6040518082815260200191505060405180910390f35b3480156108c557600080fd5b50610920600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611f6c565b005b34801561092e57600080fd5b50610963600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120b5565b6040518082815260200191505060405180910390f35b34801561098557600080fd5b506109a4600480360381019080803590602001909291905050506120fe565b6040518082815260200191505060405180910390f35b3480156109c657600080fd5b506109cf612118565b005b3480156109dd57600080fd5b506109e6612578565b604051808260ff1660ff16815260200191505060405180910390f35b348015610a0e57600080fd5b50610a2d60048036038101908080359060200190929190505050612630565b005b348015610a3b57600080fd5b50610a44612722565b6040518082815260200191505060405180910390f35b348015610a6657600080fd5b50610a8560048036038101908080359060200190929190505050612728565b005b348015610a9357600080fd5b50610ab26004803603810190808035906020019092919050505061278e565b005b348015610ac057600080fd5b50610ac96127f8565b6040518082815260200191505060405180910390f35b348015610aeb57600080fd5b50610af4612804565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b4257600080fd5b50610b84600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919050505061282a565b005b348015610b9257600080fd5b50610b9b612ab7565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bdb578082015181840152602081019050610bc0565b50505050905090810190601f168015610c085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c2257600080fd5b50610c2b612af0565b6040518082815260200191505060405180910390f35b348015610c4d57600080fd5b50610c56612b01565b6040518082815260200191505060405180910390f35b348015610c7857600080fd5b50610c81612b07565b005b348015610c8f57600080fd5b50610cae60048036038101908080359060200190929190505050612b6d565b005b610cb861120f565b604051808215151515815260200191505060405180910390f35b348015610cde57600080fd5b50610d1d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c4b565b604051808215151515815260200191505060405180910390f35b348015610d4357600080fd5b50610d4c612f33565b604051808215151515815260200191505060405180910390f35b348015610d7257600080fd5b50610d9160048036038101908080359060200190929190505050612f46565b005b348015610d9f57600080fd5b50610da8612fac565b60405180826003811115610db857fe5b60ff16815260200191505060405180910390f35b348015610dd857600080fd5b50610de1612fbf565b6040518082815260200191505060405180910390f35b348015610e0357600080fd5b50610e0c612fd0565b6040518082815260200191505060405180910390f35b348015610e2e57600080fd5b50610e4d60048036038101908080359060200190929190505050612fd6565b005b348015610e5b57600080fd5b50610e6461303c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610eb257600080fd5b50610f07600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613062565b6040518082815260200191505060405180910390f35b348015610f2957600080fd5b50610f326130e9565b6040518082815260200191505060405180910390f35b348015610f5457600080fd5b50610f5d6130f7565b6040518082815260200191505060405180910390f35b348015610f7f57600080fd5b50610fbe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506130fd565b604051808215151515815260200191505060405180910390f35b348015610fe457600080fd5b5061103f600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613491565b005b34801561104d57600080fd5b506110566135d9565b6040518082815260200191505060405180910390f35b34801561107857600080fd5b506110816135df565b604051808215151515815260200191505060405180910390f35b3480156110a757600080fd5b506110b0613744565b6040518082815260200191505060405180910390f35b3480156110d257600080fd5b50611107600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613751565b005b34801561111557600080fd5b5061111e6138a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561116c57600080fd5b506111756138cf565b6040518082815260200191505060405180910390f35b34801561119757600080fd5b506111a06138e0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111ee57600080fd5b5061120d60048036038101908080359060200190929190505050613906565b005b600080600360149054906101000a900460ff1615151561122e57600080fd5b6000600381111561123b57fe5b601960019054906101000a900460ff16600381111561125657fe5b14158015611289575060038081111561126b57fe5b601960019054906101000a900460ff16600381111561128657fe5b14155b151561129457600080fd5b600160038111156112a157fe5b601960019054906101000a900460ff1660038111156112bc57fe5b14156113035760006012541180156112d657506012544210155b80156112f35750601660026003811015156112ed57fe5b01544211155b15156112fe57600080fd5b611331565b600060135411801561131757506013544210155b801561132557506014544211155b151561133057600080fd5b5b611339612578565b905060038160ff16111561134c57600080fd5b61135581613970565b151561136057600080fd5b600191505090565b601260ff16600a0a6304c4b40002601260ff16600a0a630bebc200020381565b6040805190810160405280600881526020017f43484552522e494f00000000000000000000000000000000000000000000000081525081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561141d57600080fd5b8060058190555050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806114b35750600082145b15156114be57600080fd5b81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b601a6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060010154908060020154908060030154908060040154905086565b60075481565b600c60149054906101000a900460ff1681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561168857600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116c357600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561172057600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561177d57600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156117da57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561183757600080fd5b600c60149054906101000a900460ff168061189f5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806118f75750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561190257600080fd5b600360149054906101000a900460ff1615151561191e57600080fd5b61192985858561445d565b9150509392505050565b60168160038110151561194257fe5b016000915090505481565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119e35780601f106119b8576101008083540402835291602001916119e3565b820191906000526020600020905b8154815290600101906020018083116119c657829003601f168201915b505050505081565b601b602052816000526040600020602052806000526040600020600091509150508060000154905081565b601260ff16600a0a630bebc2000281565b601281565b600d5481565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111151515611a8057600080fd5b611ad281600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461481c90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b2a8160005461481c90919063ffffffff16565b6000819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a250565b6119b881565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611be657600080fd5b848490509150600090505b81811015611f5957601a60008686848181101515611c0b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515611f4c576001601a60008787858181101515611c8d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555082601a60008787858181101515611d1157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055506000601a60008787858181101515611d9757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000601a60008787858181101515611e0957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000601a60008787858181101515611e7b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506000601a60008787858181101515611eed57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b8080600101915050611bf1565b5050505050565b6114d581565b60065481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fc857600080fd5b600360149054906101000a900460ff16151515611fe457600080fd5b6001600360146101000a81548160ff0219169083151502179055508060049080519060200190612015929190614f9c565b507f46f81aedb227deef794d5c737014a5414db3c678220a521b747734688cc6a9fe816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561207857808201518184015260208101905061205d565b50505050905090810190601f1680156120a55780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e8160048110151561210d57fe5b016000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561217457600080fd5b601960009054906101000a900460ff1615151561219057600080fd5b600c60149054906101000a900460ff161515156121ac57600080fd5b30600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612235600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260ff16600a0a6304c4b40002601260ff16600a0a630bebc2000203611427565b5073aec8c4242c8c2e532c6d6478a7de380263234845600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731a2c916b640520e1e93a78fea04a49d8345a5aa9600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008060ff168152602001908152602001600020600001819055506000601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600160ff168152602001908152602001600020600001819055506000601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260ff168152602001908152602001600020600001819055506000601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600360ff168152602001908152602001600020600001819055506000600e60006004811015156124ed57fe5b01819055506000600e600160048110151561250457fe5b01819055506000600e600260048110151561251b57fe5b01819055506000600e600360048110151561253257fe5b01819055506000601960016101000a81548160ff0219169083600381111561255657fe5b02179055506001601960006101000a81548160ff021916908315150217905550565b600080600390506001600381111561258c57fe5b601960019054906101000a900460ff1660038111156125a757fe5b141561261957601660006003811015156125bd57fe5b0154421115156125d05760009050612614565b601660016003811015156125e057fe5b0154421115156125f35760019050612613565b6016600260038110151561260357fe5b01544211151561261257600290505b5b5b612629565b60145442111561262857600490505b5b8091505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561268c57600080fd5b600180600381111561269a57fe5b601960019054906101000a900460ff1660038111156126b557fe5b1415156126c157600080fd5b60008214156126d657426013819055506126de565b816013819055505b6213c680601354016014819055506203f480601354016015819055506002601960016101000a81548160ff0219169083600381111561271957fe5b02179055505050565b61222781565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561278457600080fd5b8060068190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127ea57600080fd5b806014540160148190555050565b67016345785d8a000081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561288657600080fd5b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515612ab3576001601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555080601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b5050565b6040805190810160405280600381526020017f434852000000000000000000000000000000000000000000000000000000000081525081565b601260ff16600a0a63039387000281565b60085481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612b6357600080fd5b612b6b614835565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612bc957600080fd5b6000806003811115612bd757fe5b601960019054906101000a900460ff166003811115612bf257fe5b141515612bfe57600080fd5b6000821415612c135742601281905550612c1b565b816012819055505b612c236148a5565b6001601960016101000a81548160ff02191690836003811115612c4257fe5b02179055505050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612c8a57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612cc557600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612d2257600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612d7f57600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612ddc57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612e3957600080fd5b600c60149054906101000a900460ff1680612ea15750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80612ef95750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612f0457600080fd5b600360149054906101000a900460ff16151515612f2057600080fd5b612f2a8484614952565b91505092915050565b600360149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612fa257600080fd5b8060088190555050565b601960019054906101000a900460ff1681565b601260ff16600a0a63022551000281565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561303257600080fd5b8060078190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b69032d26d12e980b60000081565b61172681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561315b57600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561319857600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156131d357600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561323057600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561328d57600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156132ea57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561334757600080fd5b3073ffffffffffffffffffffffffffffffffffffffff166323b872dd600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b505050506040513d602081101561346a57600080fd5b8101908080519060200190929190505050151561348657600080fd5b600191505092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156134ed57600080fd5b600360149054906101000a900460ff16151561350857600080fd5b6000600360146101000a81548160ff0219169083151502179055508060049080519060200190613539929190614f9c565b507fab8f771d320c36af1f739e78861e82b4a21f97b123153ce1657e6904c8645da1816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561359c578082015181840152602081019050613581565b50505050905090810190601f1680156135c95780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b611c8a81565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561363e57600080fd5b6001600c60146101000a81548160ff021916908315150217905550600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114151561373c5761370d81611a32565b61373a600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000611427565b505b600191505090565b68cb49b44ba602d8000081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156137ad57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156137e957600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdf73496bb06edd4685dc2027b9d115504a7130d57f4f33dfd66679517060f45760405160405180910390a350565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260ff16600a0a6304c4b4000281565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561396257600080fd5b806015540160158190555050565b60008060008033600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156139b357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156139ee57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613a4b57600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613aa857600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613b0557600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613b6257600080fd5b67016345785d8a00003410151515613b7957600080fd5b69032d26d12e980b600000613b9934600d54614b7390919063ffffffff16565b1115613ba457600080fd5b349350613bb18685614b91565b1515613bbc57600080fd5b613bc586614c32565b9250613bda8385614c9990919063ffffffff16565b9150600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156140a25760016003811115613c4057fe5b601960019054906101000a900460ff166003811115613c5b57fe5b1415613c7757613c6b3387614ccc565b1515613c7657600080fd5b5b613c82338588614d40565b1515613c8d57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff166323b872dd600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613d8657600080fd5b505af1158015613d9a573d6000803e3d6000fd5b505050506040513d6020811015613db057600080fd5b81019080805190602001909291905050501515613dcc57600080fd5b60016003811115613dd957fe5b601960019054906101000a900460ff166003811115613df457fe5b14156140015760008660ff161415613ea657613e5b84601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154614b7390919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550613ffc565b60018660ff161415613f5257613f0784601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614b7390919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550613ffb565b60028660ff161415613ffa57613fb384601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154614b7390919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055505b5b5b61409d565b61405684601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154614b7390919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b614304565b6140ac8685614eae565b15156140b757600080fd5b3073ffffffffffffffffffffffffffffffffffffffff166323b872dd600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156141b057600080fd5b505af11580156141c4573d6000803e3d6000fd5b505050506040513d60208110156141da57600080fd5b810190808051906020019092919050505015156141f657600080fd5b61428484601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008960ff1660ff16815260200190815260200160002060000154614b7390919063ffffffff16565b601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008860ff1660ff168152602001908152602001600020600001819055505b61431984600d54614b7390919063ffffffff16565b600d8190555061434582600e8860ff1660048110151561433557fe5b0154614b7390919063ffffffff16565b600e8760ff1660048110151561435757fe5b018190555069032d26d12e980b600000600d5410151561437a57614379614835565b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156143f9573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f8584604051808381526020018281526020019250505060405180910390a26001945050505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561449a57600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111515156144e857600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561457357600080fd5b6145c582600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461481c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061465a82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b7390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061472c82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461481c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600082821115151561482a57fe5b818303905092915050565b426014819055506003601960016101000a81548160ff0219169083600381111561485b57fe5b02179055507f02359fdde4491e11fa0985b799db1f730257a9715a67fd4b9ed9956e194025f0601454600d54604051808381526020018281526020019250505060405180910390a1565b60008060038111156148b357fe5b601960019054906101000a900460ff1660038111156148ce57fe5b1415156148da57600080fd5b6201518060125401601660006003811015156148f257fe5b01819055506202a3006016600060038110151561490b57fe5b0154016016600160038110151561491e57fe5b01819055506207e9006016600160038110151561493757fe5b0154016016600260038110151561494a57fe5b018190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156149cf5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211155b15156149da57600080fd5b614a2c82600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461481c90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ac182600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b7390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000808284019050838110151515614b8757fe5b8091505092915050565b6000806000600e8560ff16600481101515614ba857fe5b015491506001905060008560ff161415614bed57614bcf8483614b7390919063ffffffff16565b601260ff16600a0a6303938700021015614be857600090505b614c27565b60018560ff161415614c2657614c0c8483614b7390919063ffffffff16565b601260ff16600a0a6302255100021015614c2557600090505b5b5b809250505092915050565b600080612227905060018360ff161415614c5057611c8a9050614c90565b60028360ff161415614c66576119b89050614c8f565b60038360ff161415614c8e5760155442111515614c87576117269050614c8d565b6114d590505b5b5b5b80915050919050565b60008082840290506000841480614cba5750828482811515614cb757fe5b04145b1515614cc257fe5b8091505092915050565b60008160ff16601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660ff16111515614d355760019050614d3a565b600090505b92915050565b60008060009050601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1615614ea35760008360ff161415614e1157614dfd84601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154614b7390919063ffffffff16565b600554101515614e0c57600190505b614ea2565b60018360ff161415614e8657614e7284601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614b7390919063ffffffff16565b600654101515614e8157600190505b614ea1565b60028360ff161415614e9b5760019050614ea0565b600190505b5b5b5b809150509392505050565b600080601b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008560ff1660ff16815260200190815260200160002060000154905060008460ff16148015614f555750614f508382614b7390919063ffffffff16565b600754105b80614f82575060018460ff16148015614f815750614f7c8382614b7390919063ffffffff16565b600854105b5b15614f905760009150614f95565b600191505b5092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614fdd57805160ff191683800117855561500b565b8280016001018555821561500b579182015b8281111561500a578251825591602001919060010190614fef565b5b509050615018919061501c565b5090565b61503e91905b8082111561503a576000816000905550600101615022565b5090565b905600a165627a7a7230582022e215f661d78eb641dd83534c19cb916ddbcf51dac40cf0707cdc08cd5ec7db0029

Swarm Source

bzzr://22e215f661d78eb641dd83534c19cb916ddbcf51dac40cf0707cdc08cd5ec7db
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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