ETH Price: $3,489.31 (+0.98%)

Contract

0x0BE4A987fd8Dcbd2FfF64BA4131d3A208307F667
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer151190592022-07-11 3:56:01897 days ago1657511761IN
0x0BE4A987...08307F667
0 ETH0.0010324917.4357054
Transfer115408962020-12-28 6:59:501457 days ago1609138790IN
0x0BE4A987...08307F667
0 ETH0.0023067154
Transfer115401742020-12-28 4:19:511457 days ago1609129191IN
0x0BE4A987...08307F667
0 ETH0.0031043112
Transfer115401552020-12-28 4:16:041457 days ago1609128964IN
0x0BE4A987...08307F667
0 ETH0.0023490840.70000023
Transfer115351262020-12-27 9:55:321458 days ago1609062932IN
0x0BE4A987...08307F667
0 ETH0.0036299285
Transfer115341992020-12-27 6:26:581458 days ago1609050418IN
0x0BE4A987...08307F667
0 ETH0.0023490840.70000023
Transfer115265952020-12-26 2:39:571459 days ago1608950397IN
0x0BE4A987...08307F667
0 ETH0.0043855876
Transfer109173532020-09-23 6:59:001553 days ago1600844340IN
0x0BE4A987...08307F667
0 ETH0.0038007489
Transfer90878062019-12-11 8:29:501840 days ago1576052990IN
0x0BE4A987...08307F667
0 ETH0.0004271710
Transfer86239622019-09-26 10:29:491916 days ago1569493789IN
0x0BE4A987...08307F667
0 ETH0.0008335734
Transfer86239422019-09-26 10:25:421916 days ago1569493542IN
0x0BE4A987...08307F667
0 ETH0.0011993722
Transfer86239322019-09-26 10:24:111916 days ago1569493451IN
0x0BE4A987...08307F667
0 ETH0.0005393722
Transfer86238872019-09-26 10:10:191916 days ago1569492619IN
0x0BE4A987...08307F667
0 ETH0.001308424
Transfer66798652018-11-10 17:59:582236 days ago1541872798IN
0x0BE4A987...08307F667
0 ETH0.0010916220
Transfer65232012018-10-16 2:17:442261 days ago1539656264IN
0x0BE4A987...08307F667
0 ETH0.0004903420
Transfer65231722018-10-16 2:09:032261 days ago1539655743IN
0x0BE4A987...08307F667
0 ETH0.0010903420
Transfer64750842018-10-08 6:51:532269 days ago1538981513IN
0x0BE4A987...08307F667
0 ETH0.0004916220
Transfer64750562018-10-08 6:45:582269 days ago1538981158IN
0x0BE4A987...08307F667
0 ETH0.0010916220
Transfer64437602018-10-03 4:51:222274 days ago1538542282IN
0x0BE4A987...08307F667
0 ETH0.0006549712
Transfer64275232018-09-30 13:18:132277 days ago1538313493IN
0x0BE4A987...08307F667
0 ETH0.0002696811
Transfer64275062018-09-30 13:12:362277 days ago1538313156IN
0x0BE4A987...08307F667
0 ETH0.0006214911.4
Transfer64248952018-09-30 2:46:292277 days ago1538275589IN
0x0BE4A987...08307F667
0 ETH0.003278760
Transfer63706522018-09-21 5:14:502286 days ago1537506890IN
0x0BE4A987...08307F667
0 ETH0.0009832440
Transfer63705452018-09-21 4:48:412286 days ago1537505321IN
0x0BE4A987...08307F667
0 ETH0.00044218.1
Transfer63653272018-09-20 7:47:172287 days ago1537429637IN
0x0BE4A987...08307F667
0 ETH0.0016228241
View all transactions

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WitToken

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity 0.4.24;
  
//@title WitToken
//@author([email protected]) 
//@dev 该合约参考自openzeppelin的erc20实现
//1.使用openzeppelin的SafeMath库防止运算溢出
//2.使用openzeppelin的Ownable,Roles,RBAC来做权限控制,自定义了ceo,coo,cro等角色  
//3.ERC20扩展了ERC20Basic,实现了授权转移
//4.BasicToken,StandardToken,PausableToken均是erc20的具体实现
//5.BlackListToken加入黑名单方法
//6.TwoPhaseToken可以发行和赎回资产,并采用经办复核的二阶段提交
//7.UpgradedStandardToken参考自TetherUSD合约,可以在另一个合约升级erc20的方法
//8.可以设置交易的手续费率


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

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


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


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


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

}

  /**
 * @title Roles
 * @author Francisco Giordano (@frangio)
 * @dev Library for managing addresses assigned to a Role.
 *      See RBAC.sol for example usage.
 */
library Roles {
  struct Role {
    mapping (address => bool) bearer;
  }

  /**
   * @dev give an address access to this role
   */
  function add(Role storage role, address addr) internal {
    role.bearer[addr] = true;
  }

  /**
   * @dev remove an address' access to this role
   */
  function remove(Role storage role, address addr) internal {
    role.bearer[addr] = false;
  }

  /**
   * @dev check if an address has this role
   * // reverts
   */
  function check(Role storage role, address addr) view internal {
    require(has(role, addr));
  }

  /**
   * @dev check if an address has this role
   * @return bool
   */
  function has(Role storage role, address addr) view internal returns (bool) {
    return role.bearer[addr];
  }
}

/**
 * @title RBAC (Role-Based Access Control)
 * @author Matt Condon (@Shrugs)
 * @dev Stores and provides setters and getters for roles and addresses.
 *      Supports unlimited numbers of roles and addresses.
 *      See //contracts/mocks/RBACMock.sol for an example of usage.
 * This RBAC method uses strings to key roles. It may be beneficial
 *  for you to write your own implementation of this interface using Enums or similar.
 * It's also recommended that you define constants in the contract, like ROLE_ADMIN below,
 *  to avoid typos.
 */
contract RBAC is Ownable {
  using Roles for Roles.Role;

  mapping (string => Roles.Role) private roles;

  event RoleAdded(address addr, string roleName);
  event RoleRemoved(address addr, string roleName);

  /**
   * A constant role name for indicating admins.
   */
  string public constant ROLE_CEO = "ceo";
  string public constant ROLE_COO = "coo";//运营
  string public constant ROLE_CRO = "cro";//风控
  string public constant ROLE_MANAGER = "manager";//经办员
  string public constant ROLE_REVIEWER = "reviewer";//审核员
  
  /**
   * @dev constructor. Sets msg.sender as ceo by default
   */
  constructor() public{
    addRole(msg.sender, ROLE_CEO);
  }
  
  /**
   * @dev reverts if addr does not have role
   * @param addr address
   * @param roleName the name of the role
   * // reverts
   */
  function checkRole(address addr, string roleName) view internal {
    roles[roleName].check(addr);
  }

  /**
   * @dev determine if addr has role
   * @param addr address
   * @param roleName the name of the role
   * @return bool
   */
  function hasRole(address addr, string roleName) view public returns (bool) {
    return roles[roleName].has(addr);
  }

  function ownerAddCeo(address addr) onlyOwner public {
    addRole(addr, ROLE_CEO);
  }
  
  function ownerRemoveCeo(address addr) onlyOwner public{
    removeRole(addr, ROLE_CEO);
  }

  function ceoAddCoo(address addr) onlyCEO public {
    addRole(addr, ROLE_COO);
  }
  
  function ceoRemoveCoo(address addr) onlyCEO public{
    removeRole(addr, ROLE_COO);
  }
  
  function cooAddManager(address addr) onlyCOO public {
    addRole(addr, ROLE_MANAGER);
  }
  
  function cooRemoveManager(address addr) onlyCOO public {
    removeRole(addr, ROLE_MANAGER);
  }
  
  function cooAddReviewer(address addr) onlyCOO public {
    addRole(addr, ROLE_REVIEWER);
  }
  
  function cooRemoveReviewer(address addr) onlyCOO public {
    removeRole(addr, ROLE_REVIEWER);
  }
  
  function cooAddCro(address addr) onlyCOO public {
    addRole(addr, ROLE_CRO);
  }
  
  function cooRemoveCro(address addr) onlyCOO public {
    removeRole(addr, ROLE_CRO);
  }

  /**
   * @dev add a role to an address
   * @param addr address
   * @param roleName the name of the role
   */
  function addRole(address addr, string roleName) internal {
    roles[roleName].add(addr);
    emit RoleAdded(addr, roleName);
  }

  /**
   * @dev remove a role from an address
   * @param addr address
   * @param roleName the name of the role
   */
  function removeRole(address addr, string roleName) internal {
    roles[roleName].remove(addr);
    emit RoleRemoved(addr, roleName);
  }


  /**
   * @dev modifier to scope access to ceo
   * // reverts
   */
  modifier onlyCEO() {
    checkRole(msg.sender, ROLE_CEO);
    _;
  }

  /**
   * @dev modifier to scope access to coo
   * // reverts
   */
  modifier onlyCOO() {
    checkRole(msg.sender, ROLE_COO);
    _;
  }
  
  /**
   * @dev modifier to scope access to cro
   * // reverts
   */
  modifier onlyCRO() {
    checkRole(msg.sender, ROLE_CRO);
    _;
  }
  
  /**
   * @dev modifier to scope access to manager
   * // reverts
   */
  modifier onlyMANAGER() {
    checkRole(msg.sender, ROLE_MANAGER);
    _;
  }
  
  /**
   * @dev modifier to scope access to reviewer
   * // reverts
   */
  modifier onlyREVIEWER() {
    checkRole(msg.sender, ROLE_REVIEWER);
    _;
  }

}


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

  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 ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @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);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}



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

  mapping(address => uint256) balances;

  uint256 totalSupply_;
  
  uint256 public basisPointsRate;//手续费率 
  uint256 public maximumFee;//最大手续费 
  address public assetOwner;//收取的手续费和增发的资产都到这个地址上, 赎回资产时会从这个地址销毁资产 

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

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

    uint256 fee = (_value.mul(basisPointsRate)).div(10000);
    if (fee > maximumFee) {
        fee = maximumFee;
    }
    uint256 sendAmount = _value.sub(fee);
    
    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(sendAmount);
    if (fee > 0) {
        balances[assetOwner] = balances[assetOwner].add(fee);
        emit Transfer(msg.sender, assetOwner, fee);
    }
    
    emit Transfer(msg.sender, _to, sendAmount);
    return true;
  }

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

}


/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken  {

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


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

    uint256 fee = (_value.mul(basisPointsRate)).div(10000);
        if (fee > maximumFee) {
            fee = maximumFee;
        }
    uint256 sendAmount = _value.sub(fee);
    
    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(sendAmount);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    if (fee > 0) {
            balances[assetOwner] = balances[assetOwner].add(fee);
            emit Transfer(_from, assetOwner, fee);
        }
    emit Transfer(_from, _to, sendAmount);
    return true;
  }

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

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

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

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

}




/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is RBAC {
  event Pause();
  event Unpause();

  bool public paused = false;

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

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

  /**
   * @dev called by the ceo to pause, triggers stopped state
   */
  function pause() onlyCEO whenNotPaused public {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the ceo to unpause, returns to normal state
   */
  function unpause() onlyCEO whenPaused public {
    paused = false;
    emit Unpause();
  }
}



/**
 * @title Pausable token
 * @dev StandardToken modified with pausable transfers.
 **/
contract PausableToken is StandardToken, Pausable {

  function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
    return super.transfer(_to, _value);
  }

  function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {
    return super.transferFrom(_from, _to, _value);
  }

  function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) {
    return super.approve(_spender, _value);
  }

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

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


contract BlackListToken is PausableToken  {

  
    function getBlackListStatus(address _maker) external view returns (bool) {
        return isBlackListed[_maker];
    }

    mapping (address => bool) public isBlackListed;
    
    function addBlackList (address _evilUser) public onlyCRO {
        isBlackListed[_evilUser] = true;
        emit AddedBlackList(_evilUser);
    }

    function removeBlackList (address _clearedUser) public onlyCRO {
        isBlackListed[_clearedUser] = false;
        emit RemovedBlackList(_clearedUser);
    }

    function destroyBlackFunds (address _blackListedUser) public onlyCEO {
        require(isBlackListed[_blackListedUser]);
        uint dirtyFunds = balanceOf(_blackListedUser);
        balances[_blackListedUser] = 0;
        totalSupply_ = totalSupply_.sub(dirtyFunds);
        emit DestroyedBlackFunds(_blackListedUser, dirtyFunds);
    }

    event DestroyedBlackFunds(address _blackListedUser, uint _balance);

    event AddedBlackList(address _user);

    event RemovedBlackList(address _user);

}





/**
* 增发和赎回token由经办人和复核人配合完成
* 1.由经办人角色先执行submitIssue或submitRedeem;
* 2.复核人角色再来执行comfirmIsses或comfirmRedeem;
* 3.两者提交的参数一致,则增发和赎回才能成功
* 4.经办人提交数据后,复核人执行成功后,需要经办人再次提交才能再次执行
**/
contract TwoPhaseToken is BlackListToken{
    
    //保存经办人提交的参数
    struct MethodParam {
        string method; //方法名
        uint value;  //增发或者赎回的数量
        bool state;  //true表示经办人有提交数据,复核人执行成功后变为false
    }
    
    mapping (string => MethodParam) params;
    
    //方法名常量 
    string public constant ISSUE_METHOD = "issue";
    string public constant REDEEM_METHOD = "redeem";
    
    
    //经办人提交增发数量
    function submitIssue(uint _value) public onlyMANAGER {
        params[ISSUE_METHOD] = MethodParam(ISSUE_METHOD, _value, true);
        emit SubmitIsses(msg.sender,_value);
    }
    
    //复核人第二次确认增发数量并执行
    function comfirmIsses(uint _value) public onlyREVIEWER {
       
        require(params[ISSUE_METHOD].value == _value);
        require(params[ISSUE_METHOD].state == true);
        
        balances[assetOwner]=balances[assetOwner].add(_value);
        totalSupply_ = totalSupply_.add(_value);
        params[ISSUE_METHOD].state=false; 
        emit ComfirmIsses(msg.sender,_value);
    }
    
    //经办人提交赎回数量
    function submitRedeem(uint _value) public onlyMANAGER {
        params[REDEEM_METHOD] = MethodParam(REDEEM_METHOD, _value, true);
         emit SubmitRedeem(msg.sender,_value);
    }
    
    //复核人第二次确认赎回数量并执行
    function comfirmRedeem(uint _value) public onlyREVIEWER {
       
       require(params[REDEEM_METHOD].value == _value);
       require(params[REDEEM_METHOD].state == true);
       
       balances[assetOwner]=balances[assetOwner].sub(_value);
       totalSupply_ = totalSupply_.sub(_value);
       params[REDEEM_METHOD].state=false;
       emit ComfirmIsses(msg.sender,_value);
    }
    
    //根据方法名,查看经办人提交的参数
    function getMethodValue(string _method) public view returns(uint){
        return params[_method].value;
    }
    
    //根据方法名,查看经办人是否有提交数据
    function getMethodState(string _method) public view returns(bool) {
      return params[_method].state;
    }
   
     event SubmitRedeem(address submit, uint _value);
     event ComfirmRedeem(address comfirm, uint _value);
     event SubmitIsses(address submit, uint _value);
     event ComfirmIsses(address comfirm, uint _value);

    
}



contract UpgradedStandardToken {
    // those methods are called by the legacy contract
    function totalSupplyByLegacy() public view returns (uint256);
    function balanceOfByLegacy(address who) public view returns (uint256);
    function transferByLegacy(address origSender, address to, uint256 value) public returns (bool);
    function allowanceByLegacy(address owner, address spender) public view returns (uint256);
    function transferFromByLegacy(address origSender, address from, address to, uint256 value) public returns (bool);
    function approveByLegacy(address origSender, address spender, uint256 value) public returns (bool);
    function increaseApprovalByLegacy(address origSender, address spender, uint addedValue) public returns (bool);
    function decreaseApprovalByLegacy(address origSende, address spender, uint subtractedValue) public returns (bool);
}




contract WitToken is TwoPhaseToken {
    string  public  constant name = "Wealth in Token";
    string  public  constant symbol = "WIT";
    uint8   public  constant decimals = 18;
    address public upgradedAddress;
    bool public deprecated;

    modifier validDestination( address to ) {
        require(to != address(0x0));
        require(to != address(this));
        _;
    }

    constructor ( uint _totalTokenAmount ) public {
        basisPointsRate = 0;
        maximumFee = 0;
        totalSupply_ = _totalTokenAmount;
        balances[msg.sender] = _totalTokenAmount;
        deprecated = false;
        assetOwner = msg.sender;
        emit Transfer(address(0x0), msg.sender, _totalTokenAmount);
    }
    
    
    
     // Forward ERC20 methods to upgraded contract if this one is deprecated
     function totalSupply() public view returns (uint256) {
         if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).totalSupplyByLegacy();
        } else {
            return totalSupply_;
        }
    }
    
    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function balanceOf(address _owner) public view returns (uint256 balance) {
         if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).balanceOfByLegacy( _owner);
        } else {
           return super.balanceOf(_owner);
        }
    }

    
    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function transfer(address _to, uint _value) public validDestination(_to) returns (bool) {
        require(!isBlackListed[msg.sender]);
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).transferByLegacy(msg.sender, _to, _value);
        } else {
            return super.transfer(_to, _value);
        }
        
    }


    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function allowance(address _owner, address _spender) public view returns (uint256) {
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).allowanceByLegacy(_owner, _spender);
        } else {
           return super.allowance(_owner, _spender);
        }
        
    }


    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function transferFrom(address _from, address _to, uint _value) public validDestination(_to) returns (bool) {
        require(!isBlackListed[_from]);
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).transferFromByLegacy(msg.sender, _from, _to, _value);
        } else {
            return super.transferFrom(_from, _to, _value);
        }
       
    }
    
    
     // Forward ERC20 methods to upgraded contract if this one is deprecated
     function approve(address _spender, uint256 _value) public returns (bool) {
          if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).approveByLegacy(msg.sender, _spender, _value);
        } else {
            return super.approve(_spender, _value);
        } 
    }
    
    
    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function increaseApproval(address _spender, uint _value) public returns (bool) {
         if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).increaseApprovalByLegacy(msg.sender, _spender, _value);
        } else {
            return super.increaseApproval(_spender, _value);
        } 
    }


    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function decreaseApproval(address _spender, uint _value) public returns (bool) {
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).decreaseApprovalByLegacy(msg.sender, _spender, _value);
        } else {
            return super.decreaseApproval(_spender, _value);
        } 
   }
   
   
    // deprecate current contract in favour of a new one
    function deprecate(address _upgradedAddress) public onlyCEO whenPaused {
        deprecated = true;
        upgradedAddress = _upgradedAddress;
        emit Deprecate(_upgradedAddress);
    }
    
    // Called when contract is deprecated
    event Deprecate(address newAddress);
    
    
   /**
   * @dev Set up transaction fees
   * @param newBasisPoints  A few ten-thousandth (设置手续费率为万分之几)
   * @param newMaxFee Maximum fee (设置最大手续费,不需要添加decimals)
   */
    function setFeeParams(uint newBasisPoints, uint newMaxFee) public onlyCEO {
       
        basisPointsRate = newBasisPoints;
        maximumFee = newMaxFee.mul(uint(10)**decimals);
        emit FeeParams(basisPointsRate, maximumFee);
    }
    

    function transferAssetOwner(address newAssetOwner) public onlyCEO {
      require(newAssetOwner != address(0));
      assetOwner = newAssetOwner;
      emit TransferAssetOwner(assetOwner, newAssetOwner);
    }
    
    event TransferAssetOwner(address assetOwner, address newAssetOwner);
    
     // Called if contract ever adds fees
    event FeeParams(uint feeBasisPoints, uint maxFee);
    
    
    

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_upgradedAddress","type":"address"}],"name":"deprecate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"deprecated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_evilUser","type":"address"}],"name":"addBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_CRO","outputs":[{"name":"","type":"string"}],"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":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"hasRole","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":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradedAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"cooAddReviewer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_method","type":"string"}],"name":"getMethodState","outputs":[{"name":"","type":"bool"}],"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":"maximumFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAssetOwner","type":"address"}],"name":"transferAssetOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"comfirmRedeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"ownerRemoveCeo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"cooAddManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_maker","type":"address"}],"name":"getBlackListStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_REVIEWER","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"ceoAddCoo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_CEO","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REDEEM_METHOD","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"cooRemoveManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"ownerAddCeo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"submitIssue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"assetOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newBasisPoints","type":"uint256"},{"name":"newMaxFee","type":"uint256"}],"name":"setFeeParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"submitRedeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_COO","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"comfirmIsses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_method","type":"string"}],"name":"getMethodValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"cooRemoveReviewer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"cooAddCro","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"basisPointsRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBlackListed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ISSUE_METHOD","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_blackListedUser","type":"address"}],"name":"destroyBlackFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_MANAGER","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"ceoRemoveCoo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"cooRemoveCro","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_totalTokenAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAddress","type":"address"}],"name":"Deprecate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"assetOwner","type":"address"},{"indexed":false,"name":"newAssetOwner","type":"address"}],"name":"TransferAssetOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"feeBasisPoints","type":"uint256"},{"indexed":false,"name":"maxFee","type":"uint256"}],"name":"FeeParams","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"submit","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"SubmitRedeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"comfirm","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"ComfirmRedeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"submit","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"SubmitIsses","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"comfirm","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"ComfirmIsses","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_blackListedUser","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"AddedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"RemovedBlackList","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"roleName","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"roleName","type":"string"}],"name":"RoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

60806040526000600860006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516020806200593b83398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000e0336040805190810160405280600381526020017f63656f000000000000000000000000000000000000000000000000000000000081525062000204640100000000026401000000009004565b600060048190555060006005819055508060038190555080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60146101000a81548160ff02191690831515021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350620003c8565b62000293826001836040518082805190602001908083835b6020831015156200024357805182526020820191506020810190506020830392506200021c565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206200036a6401000000000262004b4b179091906401000000009004565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200032a5780820151818401526020810190506200030d565b50505050905090810190601f168015620003585780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61556380620003d86000396000f30060806040526004361061027d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146102825780630753c30c14610312578063095ea7b3146103555780630e136b19146103ba5780630ecb93c0146103e9578063112cc0151461042c57806318160ddd146104bc578063217fe6c6146104e757806323b872dd1461058857806326976e3f1461060d5780632bd2523e146106645780632c4617d7146106a7578063313ce5671461072857806335390714146107595780633cf26a33146107845780633f4ba83a146107c75780634876f3e5146107de57806350159de61461080b578063585bc5231461084e57806359bf1abe146108915780635c975abb146108ec5780635f6a45461461091b5780636494b55b146109ab57806366188463146109ee57806370a0823114610a535780637708ea1d14610aaa5780637d79265b14610b3a57806383879c1514610bca57806383e5cb2614610c0d5780638456cb5914610c505780638bd031fe14610c675780638da5cb5b14610c9457806395d89b4114610ceb5780639ac9940f14610d7b5780639d2ec18814610dd2578063a657cb9c14610e09578063a9059cbb14610e36578063bac9dbab14610e9b578063c678ca1914610f2b578063ccda4b9914610f58578063cd47c0e114610fd5578063d73dd62314611018578063dc61456c1461107d578063dd62ed3e146110c0578063dd644f7214611137578063e47d606014611162578063e4997dc5146111bd578063e8bfebec14611200578063f2fde38b14611290578063f3bdc228146112d3578063f5b944eb14611316578063f69e8384146113a6578063faea1878146113e9575b600080fd5b34801561028e57600080fd5b5061029761142c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d75780820151818401526020810190506102bc565b50505050905090810190601f1680156103045780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031e57600080fd5b50610353600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611465565b005b34801561036157600080fd5b506103a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611581565b604051808215151515815260200191505060405180910390f35b3480156103c657600080fd5b506103cf6116e6565b604051808215151515815260200191505060405180910390f35b3480156103f557600080fd5b5061042a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116f9565b005b34801561043857600080fd5b506104416117f6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610481578082015181840152602081019050610466565b50505050905090810190601f1680156104ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104c857600080fd5b506104d161182f565b6040518082815260200191505060405180910390f35b3480156104f357600080fd5b5061056e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611917565b604051808215151515815260200191505060405180910390f35b34801561059457600080fd5b506105f3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061199e565b604051808215151515815260200191505060405180910390f35b34801561061957600080fd5b50610622611c0b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067057600080fd5b506106a5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c31565b005b3480156106b357600080fd5b5061070e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611cb2565b604051808215151515815260200191505060405180910390f35b34801561073457600080fd5b5061073d611d37565b604051808260ff1660ff16815260200191505060405180910390f35b34801561076557600080fd5b5061076e611d3c565b6040518082815260200191505060405180910390f35b34801561079057600080fd5b506107c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d42565b005b3480156107d357600080fd5b506107dc611eba565b005b3480156107ea57600080fd5b5061080960048036038101908080359060200190929190505050611f5d565b005b34801561081757600080fd5b5061084c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061232e565b005b34801561085a57600080fd5b5061088f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123cb565b005b34801561089d57600080fd5b506108d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061244c565b604051808215151515815260200191505060405180910390f35b3480156108f857600080fd5b506109016124a2565b604051808215151515815260200191505060405180910390f35b34801561092757600080fd5b506109306124b5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610970578082015181840152602081019050610955565b50505050905090810190601f16801561099d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109b757600080fd5b506109ec600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ee565b005b3480156109fa57600080fd5b50610a39600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061256f565b604051808215151515815260200191505060405180910390f35b348015610a5f57600080fd5b50610a94600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d4565b6040518082815260200191505060405180910390f35b348015610ab657600080fd5b50610abf6127fb565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aff578082015181840152602081019050610ae4565b50505050905090810190601f168015610b2c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b4657600080fd5b50610b4f612834565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b8f578082015181840152602081019050610b74565b50505050905090810190601f168015610bbc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bd657600080fd5b50610c0b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061286d565b005b348015610c1957600080fd5b50610c4e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ee565b005b348015610c5c57600080fd5b50610c6561298b565b005b348015610c7357600080fd5b50610c9260048036038101908080359060200190929190505050612a2f565b005b348015610ca057600080fd5b50610ca9612c1a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cf757600080fd5b50610d00612c3f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d40578082015181840152602081019050610d25565b50505050905090810190601f168015610d6d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d8757600080fd5b50610d90612c78565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dde57600080fd5b50610e076004803603810190808035906020019092919080359060200190929190505050612c9e565b005b348015610e1557600080fd5b50610e3460048036038101908080359060200190929190505050612d4b565b005b348015610e4257600080fd5b50610e81600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f36565b604051808215151515815260200191505060405180910390f35b348015610ea757600080fd5b50610eb061316d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ef0578082015181840152602081019050610ed5565b50505050905090810190601f168015610f1d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f3757600080fd5b50610f56600480360381019080803590602001909291905050506131a6565b005b348015610f6457600080fd5b50610fbf600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613577565b6040518082815260200191505060405180910390f35b348015610fe157600080fd5b50611016600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135ef565b005b34801561102457600080fd5b50611063600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613670565b604051808215151515815260200191505060405180910390f35b34801561108957600080fd5b506110be600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137d5565b005b3480156110cc57600080fd5b50611121600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613856565b6040518082815260200191505060405180910390f35b34801561114357600080fd5b5061114c6139b3565b6040518082815260200191505060405180910390f35b34801561116e57600080fd5b506111a3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139b9565b604051808215151515815260200191505060405180910390f35b3480156111c957600080fd5b506111fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139d9565b005b34801561120c57600080fd5b50611215613ad6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561125557808201518184015260208101905061123a565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561129c57600080fd5b506112d1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b0f565b005b3480156112df57600080fd5b50611314600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c64565b005b34801561132257600080fd5b5061132b613dd7565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561136b578082015181840152602081019050611350565b50505050905090810190601f1680156113985780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156113b257600080fd5b506113e7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e10565b005b3480156113f557600080fd5b5061142a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e91565b005b6040805190810160405280600f81526020017f5765616c746820696e20546f6b656e000000000000000000000000000000000081525081565b6114a4336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b600860009054906101000a900460ff1615156114bf57600080fd5b6001600b60146101000a81548160ff02191690831515021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000600b60149054906101000a900460ff16156116d357600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aee92d333385856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561169157600080fd5b505af11580156116a5573d6000803e3d6000fd5b505050506040513d60208110156116bb57600080fd5b810190808051906020019092919050505090506116e0565b6116dd8383613f93565b90505b92915050565b600b60149054906101000a900460ff1681565b611738336040805190810160405280600381526020017f63726f0000000000000000000000000000000000000000000000000000000000815250613f12565b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6040805190810160405280600381526020017f63726f000000000000000000000000000000000000000000000000000000000081525081565b6000600b60149054906101000a900460ff161561190e57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a43dc9a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156118cc57600080fd5b505af11580156118e0573d6000803e3d6000fd5b505050506040513d60208110156118f657600080fd5b81019080805190602001909291905050509050611914565b60035490505b90565b6000611996836001846040518082805190602001908083835b6020831015156119555780518252602082019150602081019050602083039250611930565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020613fc390919063ffffffff16565b905092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156119dd57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a1857600080fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611a7157600080fd5b600b60149054906101000a900460ff1615611bf557600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b477adb338787876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b158015611bb357600080fd5b505af1158015611bc7573d6000803e3d6000fd5b505050506040513d6020811015611bdd57600080fd5b81019080805190602001909291905050509150611c03565b611c0085858561401c565b91505b509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c70336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b611caf816040805190810160405280600881526020017f726576696577657200000000000000000000000000000000000000000000000081525061404e565b50565b6000600a826040518082805190602001908083835b602083101515611cec5780518252602082019150602081019050602083039250611cc7565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060020160009054906101000a900460ff169050919050565b601281565b60055481565b611d81336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611dbd57600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f62889cdd87f4e0d4084e5f7075fed868ac6ba4fc6983dcea7552fa699fe6980f600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b611ef9336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b600860009054906101000a900460ff161515611f1457600080fd5b6000600860006101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b611f9c336040805190810160405280600881526020017f7265766965776572000000000000000000000000000000000000000000000000815250613f12565b80600a6040805190810160405280600681526020017f72656465656d00000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b60208310151561200a5780518252602082019150602081019050602083039250611fe5565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001015414151561204d57600080fd5b60011515600a6040805190810160405280600681526020017f72656465656d00000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b6020831015156120be5780518252602082019150602081019050602083039250612099565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060020160009054906101000a900460ff16151514151561211057600080fd5b6121848160026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419f90919063ffffffff16565b60026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121fe8160035461419f90919063ffffffff16565b6003819055506000600a6040805190810160405280600681526020017f72656465656d00000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515612273578051825260208201915060208101905060208303925061224e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060020160006101000a81548160ff0219169083151502179055507feb153a1f0a3c659807b0b4d30ef52b681c91f674138ee84e2dccc4389aaf890e3382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561238957600080fd5b6123c8816040805190810160405280600381526020017f63656f00000000000000000000000000000000000000000000000000000000008152506141b8565b50565b61240a336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b612449816040805190810160405280600781526020017f6d616e616765720000000000000000000000000000000000000000000000000081525061404e565b50565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900460ff1681565b6040805190810160405280600881526020017f726576696577657200000000000000000000000000000000000000000000000081525081565b61252d336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b61256c816040805190810160405280600381526020017f636f6f000000000000000000000000000000000000000000000000000000000081525061404e565b50565b6000600b60149054906101000a900460ff16156126c157600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636001279f3385856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561267f57600080fd5b505af1158015612693573d6000803e3d6000fd5b505050506040513d60208110156126a957600080fd5b810190808051906020019092919050505090506126ce565b6126cb8383614309565b90505b92915050565b6000600b60149054906101000a900460ff16156127ea57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663829bd99c836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156127a857600080fd5b505af11580156127bc573d6000803e3d6000fd5b505050506040513d60208110156127d257600080fd5b810190808051906020019092919050505090506127f6565b6127f382614339565b90505b919050565b6040805190810160405280600381526020017f63656f000000000000000000000000000000000000000000000000000000000081525081565b6040805190810160405280600681526020017f72656465656d000000000000000000000000000000000000000000000000000081525081565b6128ac336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b6128eb816040805190810160405280600781526020017f6d616e61676572000000000000000000000000000000000000000000000000008152506141b8565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561294957600080fd5b612988816040805190810160405280600381526020017f63656f000000000000000000000000000000000000000000000000000000000081525061404e565b50565b6129ca336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b600860009054906101000a900460ff161515156129e657600080fd5b6001600860006101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b612a6e336040805190810160405280600781526020017f6d616e6167657200000000000000000000000000000000000000000000000000815250613f12565b6060604051908101604052806040805190810160405280600581526020017f6973737565000000000000000000000000000000000000000000000000000000815250815260200182815260200160011515815250600a6040805190810160405280600581526020017f69737375650000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515612b2f5780518252602082019150602081019050602083039250612b0a565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000820151816000019080519060200190612b7e929190615492565b506020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055509050507f6b49368b8298d796165e68603ed8032a161e6d0988419044b2e7c373bd0dbec93382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600381526020017f574954000000000000000000000000000000000000000000000000000000000081525081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612cdd336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b81600481905550612cfe601260ff16600a0a8261438290919063ffffffff16565b6005819055507f985878220f966f0190ab4e8e8f7c5e724e21f793272f6a4c315d6d98b6349a8a600454600554604051808381526020018281526020019250505060405180910390a15050565b612d8a336040805190810160405280600781526020017f6d616e6167657200000000000000000000000000000000000000000000000000815250613f12565b6060604051908101604052806040805190810160405280600681526020017f72656465656d0000000000000000000000000000000000000000000000000000815250815260200182815260200160011515815250600a6040805190810160405280600681526020017f72656465656d00000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515612e4b5780518252602082019150602081019050602083039250612e26565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000820151816000019080519060200190612e9a929190615492565b506020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055509050507f1b4b0b49b8d5aabe40d0ec4ad63768235ad21c8d96f6dd0e7d0706f6d742c3003382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612f7557600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612fb057600080fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561300957600080fd5b600b60149054906101000a900460ff161561315957600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e18980a3386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561311757600080fd5b505af115801561312b573d6000803e3d6000fd5b505050506040513d602081101561314157600080fd5b81019080805190602001909291905050509150613166565b61316384846143bd565b91505b5092915050565b6040805190810160405280600381526020017f636f6f000000000000000000000000000000000000000000000000000000000081525081565b6131e5336040805190810160405280600881526020017f7265766965776572000000000000000000000000000000000000000000000000815250613f12565b80600a6040805190810160405280600581526020017f69737375650000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515613253578051825260208201915060208101905060208303925061322e565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001015414151561329657600080fd5b60011515600a6040805190810160405280600581526020017f69737375650000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b60208310151561330757805182526020820191506020810190506020830392506132e2565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060020160009054906101000a900460ff16151514151561335957600080fd5b6133cd8160026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b60026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613447816003546143ed90919063ffffffff16565b6003819055506000600a6040805190810160405280600581526020017f69737375650000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b6020831015156134bc5780518252602082019150602081019050602083039250613497565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060020160006101000a81548160ff0219169083151502179055507feb153a1f0a3c659807b0b4d30ef52b681c91f674138ee84e2dccc4389aaf890e3382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b6000600a826040518082805190602001908083835b6020831015156135b1578051825260208201915060208101905060208303925061358c565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600101549050919050565b61362e336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b61366d816040805190810160405280600881526020017f72657669657765720000000000000000000000000000000000000000000000008152506141b8565b50565b6000600b60149054906101000a900460ff16156137c257600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a95381573385856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561378057600080fd5b505af1158015613794573d6000803e3d6000fd5b505050506040513d60208110156137aa57600080fd5b810190808051906020019092919050505090506137cf565b6137cc838361440b565b90505b92915050565b613814336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b613853816040805190810160405280600381526020017f63726f000000000000000000000000000000000000000000000000000000000081525061404e565b50565b6000600b60149054906101000a900460ff16156139a057600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634cbd2b7484846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561395e57600080fd5b505af1158015613972573d6000803e3d6000fd5b505050506040513d602081101561398857600080fd5b810190808051906020019092919050505090506139ad565b6139aa838361443b565b90505b92915050565b60045481565b60096020528060005260406000206000915054906101000a900460ff1681565b613a18336040805190810160405280600381526020017f63726f0000000000000000000000000000000000000000000000000000000000815250613f12565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6040805190810160405280600581526020017f697373756500000000000000000000000000000000000000000000000000000081525081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613b6a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613ba657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000613ca5336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613cfd57600080fd5b613d06826126d4565b90506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d628160035461419f90919063ffffffff16565b6003819055507f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c68282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6040805190810160405280600781526020017f6d616e616765720000000000000000000000000000000000000000000000000081525081565b613e4f336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b613e8e816040805190810160405280600381526020017f636f6f00000000000000000000000000000000000000000000000000000000008152506141b8565b50565b613ed0336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b613f0f816040805190810160405280600381526020017f63726f00000000000000000000000000000000000000000000000000000000008152506141b8565b50565b613f8f826001836040518082805190602001908083835b602083101515613f4e5780518252602082019150602081019050602083039250613f29565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206144c290919063ffffffff16565b5050565b6000600860009054906101000a900460ff16151515613fb157600080fd5b613fbb83836144db565b905092915050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600860009054906101000a900460ff1615151561403a57600080fd5b6140458484846145cd565b90509392505050565b6140cb826001836040518082805190602001908083835b60208310151561408a5780518252602082019150602081019050602083039250614065565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020614b4b90919063ffffffff16565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614160578082015181840152602081019050614145565b50505050905090810190601f16801561418d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b60008282111515156141ad57fe5b818303905092915050565b614235826001836040518082805190602001908083835b6020831015156141f457805182526020820191506020810190506020830392506141cf565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020614ba990919063ffffffff16565b7fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156142ca5780820151818401526020810190506142af565b50505050905090810190601f1680156142f75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b6000600860009054906101000a900460ff1615151561432757600080fd5b6143318383614c07565b905092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600084141561439757600091506143b6565b82840290508284828115156143a857fe5b041415156143b257fe5b8091505b5092915050565b6000600860009054906101000a900460ff161515156143db57600080fd5b6143e58383614e98565b905092915050565b600080828401905083811015151561440157fe5b8091505092915050565b6000600860009054906101000a900460ff1615151561442957600080fd5b614433838361527b565b905092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6144cc8282613fc3565b15156144d757600080fd5b5050565b600081600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60008060008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415151561460d57600080fd5b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054841115151561465b57600080fd5b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484111515156146e657600080fd5b61470f6127106147016004548761438290919063ffffffff16565b61547790919063ffffffff16565b91506005548211156147215760055491505b614734828561419f90919063ffffffff16565b905061478884600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419f90919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061481d81600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148ef84600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419f90919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115614ad9576149ec8260026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b60026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36001925050509392505050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115614d18576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614dac565b614d2b838261419f90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151515614ed857600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411151515614f2657600080fd5b614f4f612710614f416004548761438290919063ffffffff16565b61547790919063ffffffff16565b9150600554821115614f615760055491505b614f74828561419f90919063ffffffff16565b9050614fc884600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419f90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061505d81600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600082111561520a5761511d8260026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b60026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019250505092915050565b600061530c82600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600080828481151561548557fe5b0490508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106154d357805160ff1916838001178555615501565b82800160010185558215615501579182015b828111156155005782518255916020019190600101906154e5565b5b50905061550e9190615512565b5090565b61553491905b80821115615530576000816000905550600101615518565b5090565b905600a165627a7a7230582047f997bbd6c63982befef57f6e0be44ad2f1100fccc676afec6280f71d71c6f400290000000000000000000000000000000000000000033b2e3c9fd0803ce8000000

Deployed Bytecode

0x60806040526004361061027d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146102825780630753c30c14610312578063095ea7b3146103555780630e136b19146103ba5780630ecb93c0146103e9578063112cc0151461042c57806318160ddd146104bc578063217fe6c6146104e757806323b872dd1461058857806326976e3f1461060d5780632bd2523e146106645780632c4617d7146106a7578063313ce5671461072857806335390714146107595780633cf26a33146107845780633f4ba83a146107c75780634876f3e5146107de57806350159de61461080b578063585bc5231461084e57806359bf1abe146108915780635c975abb146108ec5780635f6a45461461091b5780636494b55b146109ab57806366188463146109ee57806370a0823114610a535780637708ea1d14610aaa5780637d79265b14610b3a57806383879c1514610bca57806383e5cb2614610c0d5780638456cb5914610c505780638bd031fe14610c675780638da5cb5b14610c9457806395d89b4114610ceb5780639ac9940f14610d7b5780639d2ec18814610dd2578063a657cb9c14610e09578063a9059cbb14610e36578063bac9dbab14610e9b578063c678ca1914610f2b578063ccda4b9914610f58578063cd47c0e114610fd5578063d73dd62314611018578063dc61456c1461107d578063dd62ed3e146110c0578063dd644f7214611137578063e47d606014611162578063e4997dc5146111bd578063e8bfebec14611200578063f2fde38b14611290578063f3bdc228146112d3578063f5b944eb14611316578063f69e8384146113a6578063faea1878146113e9575b600080fd5b34801561028e57600080fd5b5061029761142c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d75780820151818401526020810190506102bc565b50505050905090810190601f1680156103045780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031e57600080fd5b50610353600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611465565b005b34801561036157600080fd5b506103a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611581565b604051808215151515815260200191505060405180910390f35b3480156103c657600080fd5b506103cf6116e6565b604051808215151515815260200191505060405180910390f35b3480156103f557600080fd5b5061042a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116f9565b005b34801561043857600080fd5b506104416117f6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610481578082015181840152602081019050610466565b50505050905090810190601f1680156104ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104c857600080fd5b506104d161182f565b6040518082815260200191505060405180910390f35b3480156104f357600080fd5b5061056e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611917565b604051808215151515815260200191505060405180910390f35b34801561059457600080fd5b506105f3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061199e565b604051808215151515815260200191505060405180910390f35b34801561061957600080fd5b50610622611c0b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067057600080fd5b506106a5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c31565b005b3480156106b357600080fd5b5061070e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611cb2565b604051808215151515815260200191505060405180910390f35b34801561073457600080fd5b5061073d611d37565b604051808260ff1660ff16815260200191505060405180910390f35b34801561076557600080fd5b5061076e611d3c565b6040518082815260200191505060405180910390f35b34801561079057600080fd5b506107c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d42565b005b3480156107d357600080fd5b506107dc611eba565b005b3480156107ea57600080fd5b5061080960048036038101908080359060200190929190505050611f5d565b005b34801561081757600080fd5b5061084c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061232e565b005b34801561085a57600080fd5b5061088f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123cb565b005b34801561089d57600080fd5b506108d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061244c565b604051808215151515815260200191505060405180910390f35b3480156108f857600080fd5b506109016124a2565b604051808215151515815260200191505060405180910390f35b34801561092757600080fd5b506109306124b5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610970578082015181840152602081019050610955565b50505050905090810190601f16801561099d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109b757600080fd5b506109ec600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ee565b005b3480156109fa57600080fd5b50610a39600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061256f565b604051808215151515815260200191505060405180910390f35b348015610a5f57600080fd5b50610a94600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d4565b6040518082815260200191505060405180910390f35b348015610ab657600080fd5b50610abf6127fb565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aff578082015181840152602081019050610ae4565b50505050905090810190601f168015610b2c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b4657600080fd5b50610b4f612834565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b8f578082015181840152602081019050610b74565b50505050905090810190601f168015610bbc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bd657600080fd5b50610c0b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061286d565b005b348015610c1957600080fd5b50610c4e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ee565b005b348015610c5c57600080fd5b50610c6561298b565b005b348015610c7357600080fd5b50610c9260048036038101908080359060200190929190505050612a2f565b005b348015610ca057600080fd5b50610ca9612c1a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cf757600080fd5b50610d00612c3f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d40578082015181840152602081019050610d25565b50505050905090810190601f168015610d6d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d8757600080fd5b50610d90612c78565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dde57600080fd5b50610e076004803603810190808035906020019092919080359060200190929190505050612c9e565b005b348015610e1557600080fd5b50610e3460048036038101908080359060200190929190505050612d4b565b005b348015610e4257600080fd5b50610e81600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f36565b604051808215151515815260200191505060405180910390f35b348015610ea757600080fd5b50610eb061316d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ef0578082015181840152602081019050610ed5565b50505050905090810190601f168015610f1d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f3757600080fd5b50610f56600480360381019080803590602001909291905050506131a6565b005b348015610f6457600080fd5b50610fbf600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613577565b6040518082815260200191505060405180910390f35b348015610fe157600080fd5b50611016600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135ef565b005b34801561102457600080fd5b50611063600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613670565b604051808215151515815260200191505060405180910390f35b34801561108957600080fd5b506110be600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137d5565b005b3480156110cc57600080fd5b50611121600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613856565b6040518082815260200191505060405180910390f35b34801561114357600080fd5b5061114c6139b3565b6040518082815260200191505060405180910390f35b34801561116e57600080fd5b506111a3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139b9565b604051808215151515815260200191505060405180910390f35b3480156111c957600080fd5b506111fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139d9565b005b34801561120c57600080fd5b50611215613ad6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561125557808201518184015260208101905061123a565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561129c57600080fd5b506112d1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b0f565b005b3480156112df57600080fd5b50611314600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c64565b005b34801561132257600080fd5b5061132b613dd7565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561136b578082015181840152602081019050611350565b50505050905090810190601f1680156113985780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156113b257600080fd5b506113e7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e10565b005b3480156113f557600080fd5b5061142a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e91565b005b6040805190810160405280600f81526020017f5765616c746820696e20546f6b656e000000000000000000000000000000000081525081565b6114a4336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b600860009054906101000a900460ff1615156114bf57600080fd5b6001600b60146101000a81548160ff02191690831515021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000600b60149054906101000a900460ff16156116d357600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aee92d333385856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561169157600080fd5b505af11580156116a5573d6000803e3d6000fd5b505050506040513d60208110156116bb57600080fd5b810190808051906020019092919050505090506116e0565b6116dd8383613f93565b90505b92915050565b600b60149054906101000a900460ff1681565b611738336040805190810160405280600381526020017f63726f0000000000000000000000000000000000000000000000000000000000815250613f12565b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6040805190810160405280600381526020017f63726f000000000000000000000000000000000000000000000000000000000081525081565b6000600b60149054906101000a900460ff161561190e57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a43dc9a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156118cc57600080fd5b505af11580156118e0573d6000803e3d6000fd5b505050506040513d60208110156118f657600080fd5b81019080805190602001909291905050509050611914565b60035490505b90565b6000611996836001846040518082805190602001908083835b6020831015156119555780518252602082019150602081019050602083039250611930565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020613fc390919063ffffffff16565b905092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156119dd57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a1857600080fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611a7157600080fd5b600b60149054906101000a900460ff1615611bf557600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b477adb338787876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b158015611bb357600080fd5b505af1158015611bc7573d6000803e3d6000fd5b505050506040513d6020811015611bdd57600080fd5b81019080805190602001909291905050509150611c03565b611c0085858561401c565b91505b509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c70336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b611caf816040805190810160405280600881526020017f726576696577657200000000000000000000000000000000000000000000000081525061404e565b50565b6000600a826040518082805190602001908083835b602083101515611cec5780518252602082019150602081019050602083039250611cc7565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060020160009054906101000a900460ff169050919050565b601281565b60055481565b611d81336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611dbd57600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f62889cdd87f4e0d4084e5f7075fed868ac6ba4fc6983dcea7552fa699fe6980f600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b611ef9336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b600860009054906101000a900460ff161515611f1457600080fd5b6000600860006101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b611f9c336040805190810160405280600881526020017f7265766965776572000000000000000000000000000000000000000000000000815250613f12565b80600a6040805190810160405280600681526020017f72656465656d00000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b60208310151561200a5780518252602082019150602081019050602083039250611fe5565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001015414151561204d57600080fd5b60011515600a6040805190810160405280600681526020017f72656465656d00000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b6020831015156120be5780518252602082019150602081019050602083039250612099565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060020160009054906101000a900460ff16151514151561211057600080fd5b6121848160026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419f90919063ffffffff16565b60026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121fe8160035461419f90919063ffffffff16565b6003819055506000600a6040805190810160405280600681526020017f72656465656d00000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515612273578051825260208201915060208101905060208303925061224e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060020160006101000a81548160ff0219169083151502179055507feb153a1f0a3c659807b0b4d30ef52b681c91f674138ee84e2dccc4389aaf890e3382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561238957600080fd5b6123c8816040805190810160405280600381526020017f63656f00000000000000000000000000000000000000000000000000000000008152506141b8565b50565b61240a336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b612449816040805190810160405280600781526020017f6d616e616765720000000000000000000000000000000000000000000000000081525061404e565b50565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900460ff1681565b6040805190810160405280600881526020017f726576696577657200000000000000000000000000000000000000000000000081525081565b61252d336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b61256c816040805190810160405280600381526020017f636f6f000000000000000000000000000000000000000000000000000000000081525061404e565b50565b6000600b60149054906101000a900460ff16156126c157600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636001279f3385856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561267f57600080fd5b505af1158015612693573d6000803e3d6000fd5b505050506040513d60208110156126a957600080fd5b810190808051906020019092919050505090506126ce565b6126cb8383614309565b90505b92915050565b6000600b60149054906101000a900460ff16156127ea57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663829bd99c836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156127a857600080fd5b505af11580156127bc573d6000803e3d6000fd5b505050506040513d60208110156127d257600080fd5b810190808051906020019092919050505090506127f6565b6127f382614339565b90505b919050565b6040805190810160405280600381526020017f63656f000000000000000000000000000000000000000000000000000000000081525081565b6040805190810160405280600681526020017f72656465656d000000000000000000000000000000000000000000000000000081525081565b6128ac336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b6128eb816040805190810160405280600781526020017f6d616e61676572000000000000000000000000000000000000000000000000008152506141b8565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561294957600080fd5b612988816040805190810160405280600381526020017f63656f000000000000000000000000000000000000000000000000000000000081525061404e565b50565b6129ca336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b600860009054906101000a900460ff161515156129e657600080fd5b6001600860006101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b612a6e336040805190810160405280600781526020017f6d616e6167657200000000000000000000000000000000000000000000000000815250613f12565b6060604051908101604052806040805190810160405280600581526020017f6973737565000000000000000000000000000000000000000000000000000000815250815260200182815260200160011515815250600a6040805190810160405280600581526020017f69737375650000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515612b2f5780518252602082019150602081019050602083039250612b0a565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000820151816000019080519060200190612b7e929190615492565b506020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055509050507f6b49368b8298d796165e68603ed8032a161e6d0988419044b2e7c373bd0dbec93382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600381526020017f574954000000000000000000000000000000000000000000000000000000000081525081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612cdd336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b81600481905550612cfe601260ff16600a0a8261438290919063ffffffff16565b6005819055507f985878220f966f0190ab4e8e8f7c5e724e21f793272f6a4c315d6d98b6349a8a600454600554604051808381526020018281526020019250505060405180910390a15050565b612d8a336040805190810160405280600781526020017f6d616e6167657200000000000000000000000000000000000000000000000000815250613f12565b6060604051908101604052806040805190810160405280600681526020017f72656465656d0000000000000000000000000000000000000000000000000000815250815260200182815260200160011515815250600a6040805190810160405280600681526020017f72656465656d00000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515612e4b5780518252602082019150602081019050602083039250612e26565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000820151816000019080519060200190612e9a929190615492565b506020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055509050507f1b4b0b49b8d5aabe40d0ec4ad63768235ad21c8d96f6dd0e7d0706f6d742c3003382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612f7557600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612fb057600080fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561300957600080fd5b600b60149054906101000a900460ff161561315957600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e18980a3386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561311757600080fd5b505af115801561312b573d6000803e3d6000fd5b505050506040513d602081101561314157600080fd5b81019080805190602001909291905050509150613166565b61316384846143bd565b91505b5092915050565b6040805190810160405280600381526020017f636f6f000000000000000000000000000000000000000000000000000000000081525081565b6131e5336040805190810160405280600881526020017f7265766965776572000000000000000000000000000000000000000000000000815250613f12565b80600a6040805190810160405280600581526020017f69737375650000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515613253578051825260208201915060208101905060208303925061322e565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001015414151561329657600080fd5b60011515600a6040805190810160405280600581526020017f69737375650000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b60208310151561330757805182526020820191506020810190506020830392506132e2565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060020160009054906101000a900460ff16151514151561335957600080fd5b6133cd8160026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b60026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613447816003546143ed90919063ffffffff16565b6003819055506000600a6040805190810160405280600581526020017f69737375650000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b6020831015156134bc5780518252602082019150602081019050602083039250613497565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060020160006101000a81548160ff0219169083151502179055507feb153a1f0a3c659807b0b4d30ef52b681c91f674138ee84e2dccc4389aaf890e3382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b6000600a826040518082805190602001908083835b6020831015156135b1578051825260208201915060208101905060208303925061358c565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600101549050919050565b61362e336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b61366d816040805190810160405280600881526020017f72657669657765720000000000000000000000000000000000000000000000008152506141b8565b50565b6000600b60149054906101000a900460ff16156137c257600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a95381573385856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561378057600080fd5b505af1158015613794573d6000803e3d6000fd5b505050506040513d60208110156137aa57600080fd5b810190808051906020019092919050505090506137cf565b6137cc838361440b565b90505b92915050565b613814336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b613853816040805190810160405280600381526020017f63726f000000000000000000000000000000000000000000000000000000000081525061404e565b50565b6000600b60149054906101000a900460ff16156139a057600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634cbd2b7484846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561395e57600080fd5b505af1158015613972573d6000803e3d6000fd5b505050506040513d602081101561398857600080fd5b810190808051906020019092919050505090506139ad565b6139aa838361443b565b90505b92915050565b60045481565b60096020528060005260406000206000915054906101000a900460ff1681565b613a18336040805190810160405280600381526020017f63726f0000000000000000000000000000000000000000000000000000000000815250613f12565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6040805190810160405280600581526020017f697373756500000000000000000000000000000000000000000000000000000081525081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613b6a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613ba657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000613ca5336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613cfd57600080fd5b613d06826126d4565b90506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d628160035461419f90919063ffffffff16565b6003819055507f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c68282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6040805190810160405280600781526020017f6d616e616765720000000000000000000000000000000000000000000000000081525081565b613e4f336040805190810160405280600381526020017f63656f0000000000000000000000000000000000000000000000000000000000815250613f12565b613e8e816040805190810160405280600381526020017f636f6f00000000000000000000000000000000000000000000000000000000008152506141b8565b50565b613ed0336040805190810160405280600381526020017f636f6f0000000000000000000000000000000000000000000000000000000000815250613f12565b613f0f816040805190810160405280600381526020017f63726f00000000000000000000000000000000000000000000000000000000008152506141b8565b50565b613f8f826001836040518082805190602001908083835b602083101515613f4e5780518252602082019150602081019050602083039250613f29565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206144c290919063ffffffff16565b5050565b6000600860009054906101000a900460ff16151515613fb157600080fd5b613fbb83836144db565b905092915050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600860009054906101000a900460ff1615151561403a57600080fd5b6140458484846145cd565b90509392505050565b6140cb826001836040518082805190602001908083835b60208310151561408a5780518252602082019150602081019050602083039250614065565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020614b4b90919063ffffffff16565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614160578082015181840152602081019050614145565b50505050905090810190601f16801561418d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b60008282111515156141ad57fe5b818303905092915050565b614235826001836040518082805190602001908083835b6020831015156141f457805182526020820191506020810190506020830392506141cf565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020614ba990919063ffffffff16565b7fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156142ca5780820151818401526020810190506142af565b50505050905090810190601f1680156142f75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b6000600860009054906101000a900460ff1615151561432757600080fd5b6143318383614c07565b905092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600084141561439757600091506143b6565b82840290508284828115156143a857fe5b041415156143b257fe5b8091505b5092915050565b6000600860009054906101000a900460ff161515156143db57600080fd5b6143e58383614e98565b905092915050565b600080828401905083811015151561440157fe5b8091505092915050565b6000600860009054906101000a900460ff1615151561442957600080fd5b614433838361527b565b905092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6144cc8282613fc3565b15156144d757600080fd5b5050565b600081600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60008060008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415151561460d57600080fd5b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054841115151561465b57600080fd5b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484111515156146e657600080fd5b61470f6127106147016004548761438290919063ffffffff16565b61547790919063ffffffff16565b91506005548211156147215760055491505b614734828561419f90919063ffffffff16565b905061478884600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419f90919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061481d81600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148ef84600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419f90919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115614ad9576149ec8260026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b60026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36001925050509392505050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115614d18576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614dac565b614d2b838261419f90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151515614ed857600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411151515614f2657600080fd5b614f4f612710614f416004548761438290919063ffffffff16565b61547790919063ffffffff16565b9150600554821115614f615760055491505b614f74828561419f90919063ffffffff16565b9050614fc884600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419f90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061505d81600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600082111561520a5761511d8260026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b60026000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019250505092915050565b600061530c82600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143ed90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600080828481151561548557fe5b0490508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106154d357805160ff1916838001178555615501565b82800160010185558215615501579182015b828111156155005782518255916020019190600101906154e5565b5b50905061550e9190615512565b5090565b61553491905b80821115615530576000816000905550600101615518565b5090565b905600a165627a7a7230582047f997bbd6c63982befef57f6e0be44ad2f1100fccc676afec6280f71d71c6f40029

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

0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000

-----Decoded View---------------
Arg [0] : _totalTokenAmount (uint256): 1000000000000000000000000000

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


Swarm Source

bzzr://47f997bbd6c63982befef57f6e0be44ad2f1100fccc676afec6280f71d71c6f4

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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