ETH Price: $2,024.87 (+4.21%)

Contract

0xa1CB45A734151b63679E1AED48E4c3dEB8D1908D
 

Overview

ETH Balance

0.000391491710581234 ETH

Eth Value

$0.79 (@ $2,024.87/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
With Draw Operat...177659082023-07-24 22:21:23958 days ago1690237283IN
0xa1CB45A7...EB8D1908D
0 ETH0.0007394322.40494645
With Draw Gold A...177659012023-07-24 22:19:59958 days ago1690237199IN
0xa1CB45A7...EB8D1908D
0 ETH0.0006977421.34767839
Buy87152332019-10-10 16:53:042341 days ago1570726384IN
0xa1CB45A7...EB8D1908D
0.1 ETH0.000072911
Set Gold Price79702572019-06-16 15:08:472458 days ago1560697727IN
0xa1CB45A7...EB8D1908D
0 ETH0.000028711
Set Gold Range79702472019-06-16 15:07:042458 days ago1560697624IN
0xa1CB45A7...EB8D1908D
0 ETH0.000034241
Set Gold Range79702322019-06-16 15:04:112458 days ago1560697451IN
0xa1CB45A7...EB8D1908D
0 ETH0.000034241
Approve79398132019-06-11 21:01:472462 days ago1560286907IN
0xa1CB45A7...EB8D1908D
0 ETH0.000091052
Set Token Price79394602019-06-11 19:33:302462 days ago1560281610IN
0xa1CB45A7...EB8D1908D
0 ETH0.000087543
Approve79389782019-06-11 17:46:162462 days ago1560275176IN
0xa1CB45A7...EB8D1908D
0 ETH0.0005007711
Set Token Price77719792019-05-16 15:03:492489 days ago1558019029IN
0xa1CB45A7...EB8D1908D
0 ETH0.000583620
Set Token Range77718202019-05-16 14:30:412489 days ago1558017041IN
0xa1CB45A7...EB8D1908D
0 ETH0.0006893420
Set Token Range77718012019-05-16 14:25:332489 days ago1558016733IN
0xa1CB45A7...EB8D1908D
0 ETH0.0006893420
Set Gold Price77157762019-05-07 20:25:032497 days ago1557260703IN
0xa1CB45A7...EB8D1908D
0 ETH0.0002871810
Set Token Price77157732019-05-07 20:24:322497 days ago1557260672IN
0xa1CB45A7...EB8D1908D
0 ETH0.000291810
Set Token Price75288882019-04-08 17:44:392526 days ago1554745479IN
0xa1CB45A7...EB8D1908D
0 ETH0.000116724
Set Gold Price75288852019-04-08 17:44:082526 days ago1554745448IN
0xa1CB45A7...EB8D1908D
0 ETH0.000114874
Set Token Price72367042019-02-18 16:09:562575 days ago1550506196IN
0xa1CB45A7...EB8D1908D
0 ETH0.0006419622
With Draw Operat...72287582019-02-16 18:41:132577 days ago1550342473IN
0xa1CB45A7...EB8D1908D
0 ETH0.000279837.5
Withdraw72282762019-02-16 15:54:372577 days ago1550332477IN
0xa1CB45A7...EB8D1908D
0 ETH0.0004949311.6
Set Token Price72114832019-02-12 15:29:442581 days ago1549985384IN
0xa1CB45A7...EB8D1908D
0 ETH0.00014595
With Draw Operat...72075452019-02-11 17:10:422582 days ago1549905042IN
0xa1CB45A7...EB8D1908D
0 ETH0.000299518
With Draw Gold A...71888782019-02-07 16:21:262586 days ago1549556486IN
0xa1CB45A7...EB8D1908D
0 ETH0.000333989
Buy71799652019-02-05 20:49:182588 days ago1549399758IN
0xa1CB45A7...EB8D1908D
0.4 ETH0.000617476
Buy71797882019-02-05 19:50:582588 days ago1549396258IN
0xa1CB45A7...EB8D1908D
0.3 ETH0.000720397
With Draw Operat...71794002019-02-05 17:55:512588 days ago1549389351IN
0xa1CB45A7...EB8D1908D
0 ETH0.000224636
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
Transfer235323392025-10-08 10:07:47152 days ago1759918067
0xa1CB45A7...EB8D1908D
0.37091114 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
GuardianGoldToken

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2019-01-30
*/

pragma solidity ^0.4.24;


/*
   ________  _____    ____  ____  _______    _   __   __________  __    ____ 
  / ____/ / / /   |  / __ \/ __ \/  _/   |  / | / /  / ____/ __ \/ /   / __ \
 / / __/ / / / /| | / /_/ / / / // // /| | /  |/ /  / / __/ / / / /   / / / /
/ /_/ / /_/ / ___ |/ _, _/ /_/ // // ___ |/ /|  /  / /_/ / /_/ / /___/ /_/ / 
\____/\____/_/  |_/_/ |_/_____/___/_/  |_/_/ |_/   \____/\____/_____/_____/  


*/
      
//  Guardian Gold Token
//  https://guardian-gold.com
//  https://guardian-gold.com/exchange.html
//  Launch Jan 30, 2019  22:00 UTC
// 
//  Gold Backed Cryptocurrency with Proof of Stake Rewards
//  1 GGT = 1 Gram of Physical Gold
//  NO Transaction Fees
//  NO Gold Storage Fees


contract ERC20Basic {
    function totalSupply() public view returns (uint256);
    function allowance(address tokenOwner, address spender) public view returns (uint remaining);
    function balanceOf(address who) public view returns (uint256);
    function approve(address spender, uint tokens) public returns (bool success);
    function transfer(address to, uint256 value) public returns (bool);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint256 tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
    event Buy(address to, uint amount);
    event onWithdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
    );
    event onGoldAccountWithdraw(
        uint256 ethereumWithdrawn
    );
    event onOpAccountWithdraw(
        uint256 ethereumWithdrawn
    );
    event onTokenSale(
        address indexed customerAddress,
        uint256 amount
    );
    event onTokenRedeem(
        address indexed customerAddress,
        uint256 amount
    );
}

contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public;
}

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) 
        {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
           return 0;
        }

        c = a * b;
        assert(c / a == b);
        return c;
        }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

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

contract Ownable {
  address public owner;


  event OwnershipRenounced(address indexed previousOwner);
  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 {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

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];
  }
}

contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  uint256 totalSupply_;

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

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

    //if(myDividends() > 0) withdraw();

    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit Transfer(msg.sender, _to, _value);
    return true;
  }

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

}

contract MultiSigTransfer is Ownable {
  string public name = "MultiSigTransfer";
  string public symbol = "MST";
  bool public complete = false;
  bool public denied = false;
  uint256 public quantity;
  address public targetAddress;
  address public requesterAddress;

  /**
  * @dev The multisig transfer contract ensures that no single administrator can
  * GGTs without approval of another administrator
  * @param _quantity The number of GGT to transfer
  * @param _targetAddress The receiver of the GGTs
  * @param _requesterAddress The administrator requesting the transfer
  */
  constructor(
    uint256 _quantity,
    address _targetAddress,
    address _requesterAddress
  ) public {
    quantity = _quantity;
    targetAddress = _targetAddress;
    requesterAddress = _requesterAddress;
  }

  /**
  * @dev Mark the transfer as approved / complete
  */
  function approveTransfer() public onlyOwner {
    require(denied == false, "cannot approve a denied transfer");
    require(complete == false, "cannot approve a complete transfer");
    complete = true;
  }

  /**
  * @dev Mark the transfer as denied
  */
  function denyTransfer() public onlyOwner {
    require(denied == false, "cannot deny a transfer that is already denied");
    denied = true;
  }

  /**
  * @dev Determine if the transfer is pending
  */
  function isPending() public view returns (bool) {
    return !complete;
  }
}

contract RBAC {
  using Roles for Roles.Role;

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

  event RoleAdded(address indexed operator, string role);
  event RoleRemoved(address indexed operator, string role);

  /**
   * @dev reverts if addr does not have role
   * @param _operator address
   * @param _role the name of the role
   * // reverts
   */
  function checkRole(address _operator, string _role)
    view
    public
  {
    roles[_role].check(_operator);
  }

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

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

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

  /**
   * @dev modifier to scope access to a single role (uses msg.sender as addr)
   * @param _role the name of the role
   * // reverts
   */
  modifier onlyRole(string _role)
  {
    checkRole(msg.sender, _role);
    _;
  }

  /**
   * @dev modifier to scope access to a set of roles (uses msg.sender as addr)
   * @param _roles the names of the roles to scope access to
   * // reverts
   *
   * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this
   *  see: https://github.com/ethereum/solidity/issues/2467
   */
  // modifier onlyRoles(string[] _roles) {
  //     bool hasAnyRole = false;
  //     for (uint8 i = 0; i < _roles.length; i++) {
  //         if (hasRole(msg.sender, _roles[i])) {
  //             hasAnyRole = true;
  //             break;
  //         }
  //     }

  //     require(hasAnyRole);

  //     _;
  // }
}

contract GuardianGoldToken is BasicToken, Ownable, RBAC {
    string public name = "GuardianGoldToken";
    string public symbol = "GGT";
    uint8 public decimals = 18;
    string public constant ADMIN_ROLE = "ADMIN";

    uint256 constant internal magnitude = 2**64;

    uint public maxTokens = 5000e18;

    mapping(address => uint256) internal tokenBalanceLedger_;
    mapping(address => int256) internal payoutsTo_;
    mapping(address => uint256) internal referralBalance_;
    mapping(address => mapping (address => uint256)) allowed;

    uint public goldAccount = 0;
    uint public operationsAccount = 0;

    uint256 internal profitPerShare_;

    address[] public transfers;

    uint public constant INITIAL_SUPPLY = 62207e15; 
    uint public totalSupply = 62207e15;
    uint public totalGoldReserves = 62207e15;
    uint public pendingGold = 0;
    uint public totalETHReceived = 57.599 ether;

    bool public isTransferable = true;
    bool public toggleTransferablePending = false;
    address public transferToggleRequester = address(0);

    uint public tokenPrice = 0.925925 ether;
    uint public goldPrice = 0.390185 ether;

    uint public tokenSellDiscount = 950;  //95%
    uint public referralFee = 30;  //3%

    uint minGoldPrice = 0.2 ether;
    uint maxGoldPrice = 0.7 ether;

    uint minTokenPrice = 0.5 ether;
    uint maxTokenPrice = 2 ether;

    uint public dividendRate = 150;  //15%


    uint public minPurchaseAmount = 0.1 ether;
    uint public minSaleAmount = 1e18;   //1 GGT
    uint public minRefStake = 1e17;  //0.1 GGT

    bool public allowBuy = false;
    bool public allowSell = false;
    bool public allowRedeem = false;



    constructor() public {
        totalSupply = INITIAL_SUPPLY;
        balances[msg.sender] = INITIAL_SUPPLY;
        addRole(msg.sender, ADMIN_ROLE);
        emit Transfer(address(this), msg.sender, INITIAL_SUPPLY);
    }


    function buy(address _referredBy) 

      payable 
      public  

      {
          require(msg.value >= minPurchaseAmount);
          require(allowBuy);
          //uint newTokens = SafeMath.div(msg.value,tokenPrice);
          //newTokens = SafeMath.mul(newTokens, 1e18);
          uint newTokens = ethereumToTokens_(msg.value);

          totalETHReceived = SafeMath.add(totalETHReceived, msg.value);

          require(SafeMath.add(totalSupply, newTokens) <= maxTokens);

          balances[msg.sender] = SafeMath.add(balances[msg.sender], newTokens);
          totalSupply = SafeMath.add(newTokens, totalSupply);

          uint goldAmount = SafeMath.div(SafeMath.mul(goldPrice,msg.value),tokenPrice);
          uint operationsAmount = SafeMath.sub(msg.value,goldAmount);

          uint256 _referralBonus = SafeMath.div(SafeMath.mul(operationsAmount, referralFee),1000);

          goldAccount = SafeMath.add(goldAmount, goldAccount);
          uint _dividends = SafeMath.div(SafeMath.mul(dividendRate, operationsAmount),1000);

          if(
            // is this a referred purchase?
            _referredBy != 0x0000000000000000000000000000000000000000 &&
            _referredBy != msg.sender &&
            balances[_referredBy] >= minRefStake)
            {
                operationsAmount = SafeMath.sub(operationsAmount,_referralBonus);
                //add referral amount to referrer dividend account
                referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus);
            }

          uint256 _fee = _dividends * magnitude;
          profitPerShare_ += (_dividends * magnitude / (totalSupply));
          _fee = _fee - (_fee-(newTokens * (_dividends * magnitude / (totalSupply))));
          int256 _updatedPayouts = (int256) ((profitPerShare_ * newTokens) - _fee);

          payoutsTo_[msg.sender] += _updatedPayouts;
          operationsAmount = SafeMath.sub(operationsAmount, _dividends);
          operationsAccount = SafeMath.add(operationsAccount, operationsAmount);

          pendingGold = SafeMath.add(pendingGold, newTokens);
          emit Buy(msg.sender, newTokens);
          emit Transfer(address(this), msg.sender, newTokens);
    
    }

    function sell(uint amount) 

      public
  
      {

        require(allowSell);
        require(amount >= minSaleAmount);
        require(balances[msg.sender] >= amount);

        //calculate Eth to be returned
        uint256 _ethereum = tokensToEthereum_(amount);
        require(_ethereum <= operationsAccount);
        //burn sold tokens
        totalSupply = SafeMath.sub(totalSupply, amount);

        if (pendingGold > amount) {
            pendingGold = SafeMath.sub(pendingGold, amount);
        }else{
            pendingGold = 0;
        }

        balances[msg.sender] = SafeMath.sub(balances[msg.sender], amount);

        //payout goes to dividend account
        int256 _updatedPayouts = (int256) (profitPerShare_ * amount + (_ethereum * magnitude));
        payoutsTo_[msg.sender] -= _updatedPayouts;    

        operationsAccount = SafeMath.sub(operationsAccount, _ethereum);  
        emit onTokenSale(msg.sender, amount); 
    }


    function redeemTokensForGold(uint amount)

    public
    {
        //burn tokens that are to be redeemed for physical gold
        require(allowRedeem);
        require(balances[msg.sender] >= amount);
        if(myDividends(true) > 0) withdraw();

        payoutsTo_[msg.sender] -= (int256) (profitPerShare_ * amount);

        balances[msg.sender] = SafeMath.sub(balances[msg.sender], amount);
        totalSupply = SafeMath.sub(totalSupply, amount);
        emit onTokenRedeem(msg.sender, amount);
    }


    function getTokenAmount(uint amount) public 
    
    returns(uint)

    {
        return (amount*1e18)/(tokenPrice);
    }

    function depositGold()
      public
      payable
    {
        goldAccount = SafeMath.add(goldAccount, msg.value);
    }

    function depositOperations()
      public
      payable
    {
        operationsAccount = SafeMath.add(operationsAccount, msg.value);
    }

  
    function tokensToEthereum_(uint256 _tokens)
       internal
        view
        returns(uint256)
    {
        uint liquidPrice = SafeMath.div(SafeMath.mul(goldPrice, tokenSellDiscount),1000);
        uint256 _etherReceived = SafeMath.div(_tokens * liquidPrice, 1e18);
        return _etherReceived;
    }

    function ethereumToTokens_(uint256 _ethereum)
        public
        view
        returns(uint256)
    {
        uint256 _tokensReceived = SafeMath.div(_ethereum*1e18, tokenPrice);
            
        return _tokensReceived;
    }

    function updateGoldReserves(uint newReserves)
    public
    onlyRole(ADMIN_ROLE)
    {
        totalGoldReserves = newReserves;
        if (totalSupply > totalGoldReserves) {
            pendingGold = SafeMath.sub(totalSupply,totalGoldReserves);
        }else{
            pendingGold = 0;
        }
    }

    function setTokenPrice(uint newPrice)
      public
      onlyRole(ADMIN_ROLE)
    {
        require(newPrice >= minTokenPrice);
        require(newPrice <= maxTokenPrice);
        tokenPrice = newPrice;
    }

    function setGoldPrice(uint newPrice)
      public
      onlyRole(ADMIN_ROLE)
    {
        require(newPrice >= minGoldPrice);
        require(newPrice <= maxGoldPrice);
        goldPrice = newPrice;
    }

    function setTokenRange(uint newMax, uint newMin)
        public
        onlyRole(ADMIN_ROLE)
        {
            minTokenPrice = newMin;
            maxTokenPrice = newMax;
        }

    function setmaxTokens(uint newMax)
      public
      onlyRole(ADMIN_ROLE)
      {
          maxTokens = newMax;
      }

    function setGoldRange(uint newMax, uint newMin)
      public
      onlyRole(ADMIN_ROLE)
      {
        minGoldPrice = newMin;
        maxGoldPrice = newMax;
      }

    function withDrawGoldAccount(uint amount)
        public
        onlyRole(ADMIN_ROLE)
        {
          require(amount <= goldAccount);
          goldAccount = SafeMath.sub(goldAccount, amount);
          msg.sender.transfer(amount);
        }

      function withDrawOperationsAccount(uint amount)
          public
          onlyRole(ADMIN_ROLE)
          {
            require(amount <= operationsAccount);
            operationsAccount = SafeMath.sub(operationsAccount, amount);
            msg.sender.transfer(amount);
          }

      function setAllowBuy(bool newAllow)
          public
          onlyRole(ADMIN_ROLE)
          {
            allowBuy = newAllow;
          }

      function setAllowSell(bool newAllow)
          public
          onlyRole(ADMIN_ROLE)
          {
            allowSell = newAllow;
          }

      function setAllowRedeem(bool newAllow)
          public
          onlyRole(ADMIN_ROLE)
          {
            allowRedeem = newAllow;
          }

      function setMinPurchaseAmount(uint newAmount)
          public 
          onlyRole(ADMIN_ROLE)
      {
          minPurchaseAmount = newAmount;
      } 

      function setMinSaleAmount(uint newAmount)
          public 
          onlyRole(ADMIN_ROLE)
      {
          minSaleAmount = newAmount;
      } 

      function setMinRefStake(uint newAmount)
          public 
          onlyRole(ADMIN_ROLE)
      {
          minRefStake = newAmount;
      } 

      function setReferralFee(uint newAmount)
          public 
          onlyRole(ADMIN_ROLE)
      {
          referralFee = newAmount;
      } 

      function setProofofStakeFee(uint newAmount)
          public 
          onlyRole(ADMIN_ROLE)
      {
          dividendRate = newAmount;
      } 
      
      function setTokenSellDiscount(uint newAmount)
          public 
          onlyRole(ADMIN_ROLE)
      {
          tokenSellDiscount = newAmount;
      } 
      

      function withdraw()
          {
              //require(myDividends() > 0);

              address _customerAddress = msg.sender;
              uint256 _dividends = myDividends(false);

              payoutsTo_[_customerAddress] +=  (int256) (_dividends * magnitude);

              // add ref. bonus
              _dividends += referralBalance_[_customerAddress];
              referralBalance_[_customerAddress] = 0;

              msg.sender.transfer(_dividends);

              onWithdraw(_customerAddress, _dividends);
          }

      function myDividends(bool _includeReferralBonus) 
          public 
          view 
          returns(uint256)
            {
                address _customerAddress = msg.sender;
               // return dividendsOf(_customerAddress);
                return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ;
            }


    /**
      * Retrieve the dividend balance of any single address.
      */
    function dividendsOf(address _customerAddress)
        view
        public
        returns(uint256)
        {
            return (uint256) ((int256)(profitPerShare_ * balanceOf(_customerAddress)) - payoutsTo_[_customerAddress]) / magnitude;
        }
    
    function profitShare() 
        public 
        view 
        returns(uint256)
        {
            return profitPerShare_;
        }

    function payouts() 
        public 
        view 
        returns(int256)
        {
            return payoutsTo_[msg.sender];
        }

    function getTotalDivs() 
      public
      view
      returns(uint256)
      {
          return (profitPerShare_ * totalSupply);
      }


      function tokenData() 
          //Ethereum Balance, MyTokens, TotalTokens, myDividends
          public 
          view 
          returns(uint256, uint256, uint256, uint256, uint256, uint256)
      {
          return(address(this).balance, balanceOf(msg.sender), totalSupply, myDividends(true), tokenSellDiscount, goldPrice);
      }


  /**
  * @dev Determine if the address is the owner of the contract
  * @param _address The address to determine of ownership
  */
  function isOwner(address _address) public view returns (bool) {
    return owner == _address;
  }

  /**
  * @dev Returns the list of MultiSig transfers
  */
  function getTransfers() public view returns (address[]) {
    return transfers;
  }

  /**
  * @dev The GGT ERC20 token uses adminstrators to handle transfering to the crowdsale, vesting and pre-purchasers
  */
  function isAdmin(address _address) public view returns (bool) {
    return hasRole(_address, ADMIN_ROLE);
  }

  /**
  * @dev Set an administrator as the owner, using Open Zepplin RBAC implementation
  */
  function setAdmin(address _newAdmin) public onlyOwner {
    return addRole(_newAdmin, ADMIN_ROLE);
  }

  /**
  * @dev Remove an administrator as the owner, using Open Zepplin RBAC implementation
  */
  function removeAdmin(address _oldAdmin) public onlyOwner {
    return removeRole(_oldAdmin, ADMIN_ROLE);
  }

  /**
  * @dev As an administrator, request the token is made transferable
  * @param _toState The transfer state being requested
  */
  function setTransferable(bool _toState) public onlyRole(ADMIN_ROLE) {
    require(isTransferable != _toState, "to init a transfer toggle, the toState must change");
    toggleTransferablePending = true;
    transferToggleRequester = msg.sender;
  }

  /**
  * @dev As an administrator who did not make the request, approve the transferable state change
  */
  function approveTransferableToggle() public onlyRole(ADMIN_ROLE) {
    require(toggleTransferablePending == true, "transfer toggle not in pending state");
    require(transferToggleRequester != msg.sender, "the requester cannot approve the transfer toggle");
    isTransferable = !isTransferable;
    toggleTransferablePending = false;
    transferToggleRequester = address(0);
  }

  /**
  * @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, address _from, uint256 _value) private returns (bool) {
    require(_value <= balances[_from], "the balance in the from address is smaller than the tx value");

    // SafeMath.sub will throw if there is not enough balance.
    //payoutsTo_[_to] += (int256) (profitPerShare_ * _value);

  
    if(myDividends(true) > 0) withdraw();
    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);

     // update dividend trackers
    payoutsTo_[_from] -= (int256) (profitPerShare_ * _value);
    payoutsTo_[_to] += (int256) (profitPerShare_ * _value);
        
    // disperse dividends among holders
    //profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / totalSupply);

    emit Transfer(_from, _to, _value);
    return true;
  }

  /**
  * @dev Public transfer token function. This wrapper ensures the token is transferable
  * @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), "cannot transfer to the zero address");

    /* We allow holders to return their Tokens to the contract owner at any point */
    if (_to != owner && msg.sender != crowdsale) {
      require(isTransferable == true, "GGT is not yet transferable");
    }

    /* Transfers from the owner address must use the administrative transfer */
    require(msg.sender != owner, "the owner of the GGT contract cannot transfer");

    return _transfer(_to, msg.sender, _value);
  }




   function transferFrom(address from, address to, uint tokens) public returns (bool success) {
        balances[from] = balances[from].sub(tokens);
        allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
        balances[to] = balances[to].add(tokens);
        Transfer(from, to, tokens);
        return true;
    }
 
    // Allow `spender` to withdraw from your account, multiple times, up to the `tokens` amount.
    // If this function is called again it overwrites the current allowance with _value.
    function approve(address spender, uint tokens) public returns (bool success) {
        allowed[msg.sender][spender] = tokens;
        Approval(msg.sender, spender, tokens);
        return true;
    }

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

    // ------------------------------------------------------------------------
    // Token owner can approve for `spender` to transferFrom(...) `tokens`
    // from the token owner's account. The `spender` contract function
    // `receiveApproval(...)` is then executed
    // ------------------------------------------------------------------------
    function approveAndCall(address spender, uint tokens, bytes memory data) public returns (bool success) {
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data);
        return true;
    }


  /**
  * @dev Request an administrative transfer. This does not move tokens
  * @param _to The address to transfer to.
  * @param _quantity The amount to be transferred.
  */
  function adminTransfer(address _to, uint256 _quantity) public onlyRole(ADMIN_ROLE) {
    address newTransfer = new MultiSigTransfer(_quantity, _to, msg.sender);
    transfers.push(newTransfer);
  }

  /**
  * @dev Approve an administrative transfer. This moves the tokens if the requester
  * is an admin, but not the same admin as the one who made the request
  * @param _approvedTransfer The contract address of the multisignature transfer.
  */
  function approveTransfer(address _approvedTransfer) public onlyRole(ADMIN_ROLE) returns (bool) {
    MultiSigTransfer transferToApprove = MultiSigTransfer(_approvedTransfer);

    uint256 transferQuantity = transferToApprove.quantity();
    address deliveryAddress = transferToApprove.targetAddress();
    address requesterAddress = transferToApprove.requesterAddress();

    require(msg.sender != requesterAddress, "a requester cannot approve an admin transfer");

    transferToApprove.approveTransfer();
    return _transfer(deliveryAddress, owner, transferQuantity);
  }

  /**
  * @dev Deny an administrative transfer. This ensures it cannot be approved.
  * @param _approvedTransfer The contract address of the multisignature transfer.
  */
  function denyTransfer(address _approvedTransfer) public onlyRole(ADMIN_ROLE) returns (bool) {
    MultiSigTransfer transferToApprove = MultiSigTransfer(_approvedTransfer);
    transferToApprove.denyTransfer();
  }

  address public crowdsale = address(0);

  /**
  * @dev Any admin can set the current crowdsale address, to allows transfers
  * from the crowdsale to the purchaser
  */
  function setCrowdsaleAddress(address _crowdsaleAddress) public onlyRole(ADMIN_ROLE) {
    crowdsale = _crowdsaleAddress;
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenData","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"operationsAccount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oldAdmin","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_crowdsaleAddress","type":"address"}],"name":"setCrowdsaleAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isTransferable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","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":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"toggleTransferablePending","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSellDiscount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ethereum","type":"uint256"}],"name":"ethereumToTokens_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPrice","type":"uint256"}],"name":"setGoldPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTransfers","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingGold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minRefStake","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAllow","type":"bool"}],"name":"setAllowRedeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"allowSell","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMax","type":"uint256"}],"name":"setmaxTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"profitShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"approveTransferableToggle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_approvedTransfer","type":"address"}],"name":"approveTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"goldPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goldAccount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"depositOperations","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newMax","type":"uint256"},{"name":"newMin","type":"uint256"}],"name":"setGoldRange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setMinRefStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"depositGold","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalETHReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setReferralFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"redeemTokensForGold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMax","type":"uint256"},{"name":"newMin","type":"uint256"}],"name":"setTokenRange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ADMIN_ROLE","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setTokenSellDiscount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalDivs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReserves","type":"uint256"}],"name":"updateGoldReserves","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"referralFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setMinSaleAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withDrawGoldAccount","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":"","type":"uint256"}],"name":"transfers","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":"totalGoldReserves","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsale","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_toState","type":"bool"}],"name":"setTransferable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"payouts","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transferToggleRequester","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"allowBuy","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minPurchaseAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setProofofStakeFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withDrawOperationsAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAllow","type":"bool"}],"name":"setAllowSell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAllow","type":"bool"}],"name":"setAllowBuy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dividendRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setMinPurchaseAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"allowRedeem","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_quantity","type":"uint256"}],"name":"adminTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_approvedTransfer","type":"address"}],"name":"denyTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minSaleAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onGoldAccountWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onOpAccountWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"onTokenSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"onTokenRedeem","type":"event"}]

60806040526040805190810160405280601181526020017f477561726469616e476f6c64546f6b656e00000000000000000000000000000081525060049080519060200190620000519291906200059d565b506040805190810160405280600381526020017f4747540000000000000000000000000000000000000000000000000000000000815250600590805190602001906200009f9291906200059d565b506012600660006101000a81548160ff021916908360ff16021790555069010f0cf064dd592000006007556000600c556000600d5568035f4ba8e9c6b9800060105568035f4ba8e9c6b98000601155600060125568031f58c153d1b980006013556001601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506000601460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670cd98be1b9a7500060155567056a3730b1af90006016556103b6601755601e6018556702c68af0bb1400006019556709b6e64a8ec60000601a556706f05b59d3b20000601b55671bc16d674ec80000601c556096601d5567016345785d8a0000601e55670de0b6b3a7640000601f5567016345785d8a00006020556000602160006101000a81548160ff0219169083151502179055506000602160016101000a81548160ff0219169083151502179055506000602160026101000a81548160ff0219169083151502179055506000602160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200029457600080fd5b5033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555068035f4ba8e9c6b9800060108190555068035f4ba8e9c6b980006000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000382336040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620003f6640100000000026401000000009004565b3373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef68035f4ba8e9c6b980006040518082815260200191505060405180910390a36200064c565b62000485826003836040518082805190602001908083835b6020831015156200043557805182526020820191506020810190506020830392506200040e565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206200053f6401000000000262004f2e179091906401000000009004565b8173ffffffffffffffffffffffffffffffffffffffff167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000500578082015181840152602081019050620004e3565b50505050905090810190601f1680156200052e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005e057805160ff191683800117855562000611565b8280016001018555821562000611579182015b8281111562000610578251825591602001919060010190620005f3565b5b50905062000620919062000624565b5090565b6200064991905b80821115620006455760008160009055506001016200062b565b5090565b90565b615ccb806200065c6000396000f300608060405260043610620003f6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b14620003fb578063024fd650146200045557806306fdde0314620004a6578063095ea7b3146200053c5780630988ca8c14620005a45780630f5f1dbc14620006305780631785f53c146200065e57806318160ddd14620006a45780631f35bc4014620006d25780632121dc751462000718578063217fe6c6146200074a57806323b872dd14620007ee57806324d7806c14620008765780632813de1714620008d4578063298e681e14620009065780632a9121c714620009345780632d02a5b214620009785780632f54bf6e14620009a85780632f65142c1462000a065780632ff2e9dc1462000a7757806330ab85b91462000aa5578063313ce5671462000ad3578063315b91481462000b07578063350924231462000b3557806336e0f6cc1462000b675780633ccfd60b1462000b995780633ce7214c1462000bb35780633e1f55e41462000be357806340c3b18e1462000c115780634355b9d21462000c2b578063445014041462000c89578063485505761462000cb75780634c309d1b1462000ce55780634e6904b51462000cf15780635d2d733d1462000d2b57806360d48b441462000d5b578063688abbf71462000d675780636a61e5fc1462000dad5780636e1682a01462000ddd578063704b6c021462000e0b57806370a082311462000e51578063713494d71462000eab5780637138127a1462000edb578063719fa76d1462000f0b57806375b238fc1462000f4557806376731fe11462000fdb578063792fd9a9146200100b5780637ff9b596146200103957806382337cbe146200106757806384ae2bc6146200109757806385dff0ff14620010c557806388ab152614620010f55780638da5cb5b14620011255780639377d711146200117f57806395d89b4114620011ef578063969ddf8a14620012855780639c1e03a014620012b35780639cd23707146200130d578063a247bc32146200133f578063a3adb958146200136d578063a9059cbb14620013c7578063ab7cb211146200142f578063b47dbf221462001461578063c2507ac1146200148f578063c6f7c5c814620014d3578063cae9ca511462001503578063cd4795cc14620015b1578063d373507b14620015e1578063d60468361462001613578063d6a3f3741462001645578063dd62ed3e1462001673578063e4849b3214620016ed578063e8315742146200171d578063e9d3fb78146200174b578063eb328095146200177b578063f088d54714620017ad578063f17e48ec14620017e5578063f2fde38b1462001835578063f5c4201f146200187b578063fd085b4114620018d9575b600080fd5b3480156200040857600080fd5b506200043f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001907565b6040518082815260200191505060405180910390f35b3480156200046257600080fd5b506200046d62001975565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b348015620004b357600080fd5b50620004be620019ca565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000500578082015181840152602081019050620004e3565b50505050905090810190601f1680156200052e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200054957600080fd5b506200058a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001a6c565b604051808215151515815260200191505060405180910390f35b348015620005b157600080fd5b506200062e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505062001b5e565b005b3480156200063d57600080fd5b506200064862001be3565b6040518082815260200191505060405180910390f35b3480156200066b57600080fd5b50620006a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001be9565b005b348015620006b157600080fd5b50620006bc62001c8a565b6040518082815260200191505060405180910390f35b348015620006df57600080fd5b5062000716600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001c90565b005b3480156200072557600080fd5b506200073062001d17565b604051808215151515815260200191505060405180910390f35b3480156200075757600080fd5b50620007d4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505062001d2a565b604051808215151515815260200191505060405180910390f35b348015620007fb57600080fd5b506200085c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001db5565b604051808215151515815260200191505060405180910390f35b3480156200088357600080fd5b50620008ba600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002062565b604051808215151515815260200191505060405180910390f35b348015620008e157600080fd5b50620008ec620020ac565b604051808215151515815260200191505060405180910390f35b3480156200091357600080fd5b506200091e620020bf565b6040518082815260200191505060405180910390f35b3480156200094157600080fd5b506200096260048036038101908080359060200190929190505050620020c5565b6040518082815260200191505060405180910390f35b3480156200098557600080fd5b50620009a660048036038101908080359060200190929190505050620020eb565b005b348015620009b557600080fd5b50620009ec600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200215c565b604051808215151515815260200191505060405180910390f35b34801562000a1357600080fd5b5062000a1e620021b6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101562000a6357808201518184015260208101905062000a46565b505050509050019250505060405180910390f35b34801562000a8457600080fd5b5062000a8f62002246565b6040518082815260200191505060405180910390f35b34801562000ab257600080fd5b5062000abd62002253565b6040518082815260200191505060405180910390f35b34801562000ae057600080fd5b5062000aeb62002259565b604051808260ff1660ff16815260200191505060405180910390f35b34801562000b1457600080fd5b5062000b1f6200226c565b6040518082815260200191505060405180910390f35b34801562000b4257600080fd5b5062000b6560048036038101908080351515906020019092919050505062002272565b005b34801562000b7457600080fd5b5062000b7f620022d2565b604051808215151515815260200191505060405180910390f35b34801562000ba657600080fd5b5062000bb1620022e5565b005b34801562000bc057600080fd5b5062000be16004803603810190808035906020019092919050505062002474565b005b34801562000bf057600080fd5b5062000bfb620024c1565b6040518082815260200191505060405180910390f35b34801562000c1e57600080fd5b5062000c29620024cb565b005b34801562000c3857600080fd5b5062000c6f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002736565b604051808215151515815260200191505060405180910390f35b34801562000c9657600080fd5b5062000ca162002af3565b6040518082815260200191505060405180910390f35b34801562000cc457600080fd5b5062000ccf62002af9565b6040518082815260200191505060405180910390f35b62000cef62002aff565b005b34801562000cfe57600080fd5b5062000d29600480360381019080803590602001909291908035906020019092919050505062002b15565b005b34801562000d3857600080fd5b5062000d596004803603810190808035906020019092919050505062002b6a565b005b62000d6562002bb7565b005b34801562000d7457600080fd5b5062000d9760048036038101908080351515906020019092919050505062002bcd565b6040518082815260200191505060405180910390f35b34801562000dba57600080fd5b5062000ddb6004803603810190808035906020019092919050505062002c3f565b005b34801562000dea57600080fd5b5062000df562002cb0565b6040518082815260200191505060405180910390f35b34801562000e1857600080fd5b5062000e4f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002cb6565b005b34801562000e5e57600080fd5b5062000e95600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002d57565b6040518082815260200191505060405180910390f35b34801562000eb857600080fd5b5062000ed96004803603810190808035906020019092919050505062002d9f565b005b34801562000ee857600080fd5b5062000f096004803603810190808035906020019092919050505062002dec565b005b34801562000f1857600080fd5b5062000f43600480360381019080803590602001909291908035906020019092919050505062002fb8565b005b34801562000f5257600080fd5b5062000f5d6200300d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000f9f57808201518184015260208101905062000f82565b50505050905090810190601f16801562000fcd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801562000fe857600080fd5b50620010096004803603810190808035906020019092919050505062003046565b005b3480156200101857600080fd5b506200102362003093565b6040518082815260200191505060405180910390f35b3480156200104657600080fd5b5062001051620030a1565b6040518082815260200191505060405180910390f35b3480156200107457600080fd5b506200109560048036038101908080359060200190929190505050620030a7565b005b348015620010a457600080fd5b50620010af62003126565b6040518082815260200191505060405180910390f35b348015620010d257600080fd5b50620010f3600480360381019080803590602001909291905050506200312c565b005b3480156200110257600080fd5b50620011236004803603810190808035906020019092919050505062003179565b005b3480156200113257600080fd5b506200113d6200322d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200118c57600080fd5b50620011ad6004803603810190808035906020019092919050505062003253565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620011fc57600080fd5b506200120762003292565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620012495780820151818401526020810190506200122c565b50505050905090810190601f168015620012775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200129257600080fd5b506200129d62003334565b6040518082815260200191505060405180910390f35b348015620012c057600080fd5b50620012cb6200333a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200131a57600080fd5b506200133d60048036038101908080351515906020019092919050505062003360565b005b3480156200134c57600080fd5b5062001357620034b4565b6040518082815260200191505060405180910390f35b3480156200137a57600080fd5b5062001385620034fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620013d457600080fd5b5062001415600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062003521565b604051808215151515815260200191505060405180910390f35b3480156200143c57600080fd5b506200144762003830565b604051808215151515815260200191505060405180910390f35b3480156200146e57600080fd5b506200147962003843565b6040518082815260200191505060405180910390f35b3480156200149c57600080fd5b50620014bd6004803603810190808035906020019092919050505062003849565b6040518082815260200191505060405180910390f35b348015620014e057600080fd5b5062001501600480360381019080803590602001909291905050506200386b565b005b3480156200151057600080fd5b5062001597600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050620038b8565b604051808215151515815260200191505060405180910390f35b348015620015be57600080fd5b50620015df6004803603810190808035906020019092919050505062003b0c565b005b348015620015ee57600080fd5b506200161160048036038101908080351515906020019092919050505062003bc0565b005b3480156200162057600080fd5b506200164360048036038101908080351515906020019092919050505062003c20565b005b3480156200165257600080fd5b506200165d62003c80565b6040518082815260200191505060405180910390f35b3480156200168057600080fd5b50620016d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062003c86565b6040518082815260200191505060405180910390f35b348015620016fa57600080fd5b506200171b6004803603810190808035906020019092919050505062003d0d565b005b3480156200172a57600080fd5b506200173562003f41565b6040518082815260200191505060405180910390f35b3480156200175857600080fd5b50620017796004803603810190808035906020019092919050505062003f47565b005b3480156200178857600080fd5b506200179362003f94565b604051808215151515815260200191505060405180910390f35b620017e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062003fa7565b005b348015620017f257600080fd5b5062001833600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062004452565b005b3480156200184257600080fd5b5062001879600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200459f565b005b3480156200188857600080fd5b50620018bf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200460a565b604051808215151515815260200191505060405180910390f35b348015620018e657600080fd5b50620018f1620046d7565b6040518082815260200191505060405180910390f35b600068010000000000000000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200195e8462002d57565b600e5402038115156200196d57fe5b049050919050565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff1631620019a13362002d57565b601054620019b0600162002bcd565b601754601654955095509550955095509550909192939495565b60048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562001a645780601f1062001a385761010080835404028352916020019162001a64565b820191906000526020600020905b81548152906001019060200180831162001a4657829003601f168201915b505050505081565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b62001bdf826003836040518082805190602001908083835b60208310151562001b9d578051825260208201915060208101905060208303925062001b76565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020620046dd90919063ffffffff16565b5050565b600d5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562001c4657600080fd5b62001c87816040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620046f9565b50565b60105481565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062001cd2338262001b5e565b81602160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601460009054906101000a900460ff1681565b600062001dad836003846040518082805190602001908083835b60208310151562001d6b578051825260208201915060208101905060208303925062001d44565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206200483490919063ffffffff16565b905092915050565b600062001e0a826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001edd82600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001fb0826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620048a790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000620020a5826040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062001d2a565b9050919050565b601460019054906101000a900460ff1681565b60175481565b600080620020e0670de0b6b3a76400008402601554620048c4565b905080915050919050565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200212d338262001b5e565b60195482101515156200213f57600080fd5b601a5482111515156200215157600080fd5b816016819055505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b6060600f8054806020026020016040519081016040528092919081815260200182805480156200223c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620021f1575b5050505050905090565b68035f4ba8e9c6b9800081565b60125481565b600660009054906101000a900460ff1681565b60205481565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620022b4338262001b5e565b81602160026101000a81548160ff0219169083151502179055505050565b602160019054906101000a900460ff1681565b600080339150620022f7600062002bcd565b9050680100000000000000008102600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054810190506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801562002421573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc826040518082815260200191505060405180910390a25050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620024b6338262001b5e565b816007819055505050565b6000600e54905090565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200250d338262001b5e565b60011515601460019054906101000a900460ff161515141515620025bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f7472616e7366657220746f67676c65206e6f7420696e2070656e64696e67207381526020017f746174650000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515620026ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f746865207265717565737465722063616e6e6f7420617070726f76652074686581526020017f207472616e7366657220746f67676c650000000000000000000000000000000081525060400191505060405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506000601460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060006040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002780338262001b5e565b8694508473ffffffffffffffffffffffffffffffffffffffff166317fc45e26040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620027e857600080fd5b505af1158015620027fd573d6000803e3d6000fd5b505050506040513d60208110156200281457600080fd5b810190808051906020019092919050505093508473ffffffffffffffffffffffffffffffffffffffff16635210eb566040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200288c57600080fd5b505af1158015620028a1573d6000803e3d6000fd5b505050506040513d6020811015620028b857600080fd5b810190808051906020019092919050505092508473ffffffffffffffffffffffffffffffffffffffff1663d424ee7d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200293057600080fd5b505af115801562002945573d6000803e3d6000fd5b505050506040513d60208110156200295c57600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151562002a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f61207265717565737465722063616e6e6f7420617070726f766520616e20616481526020017f6d696e207472616e73666572000000000000000000000000000000000000000081525060400191505060405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16632a8d26e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801562002a9f57600080fd5b505af115801562002ab4573d6000803e3d6000fd5b5050505062002ae783600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686620048db565b95505050505050919050565b60165481565b600c5481565b62002b0d600d5434620048a7565b600d81905550565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002b57338262001b5e565b8160198190555082601a81905550505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002bac338262001b5e565b816020819055505050565b62002bc5600c5434620048a7565b600c81905550565b6000803390508262002bea5762002be48162001907565b62002c37565b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462002c358262001907565b015b915050919050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002c81338262001b5e565b601b54821015151562002c9357600080fd5b601c54821115151562002ca557600080fd5b816015819055505050565b60135481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562002d1357600080fd5b62002d54816040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062004c16565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002de1338262001b5e565b816018819055505050565b602160029054906101000a900460ff16151562002e0857600080fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151562002e5657600080fd5b600062002e64600162002bcd565b111562002e765762002e75620022e5565b5b80600e5402600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555062002f116000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826200488d565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062002f61601054826200488d565b6010819055503373ffffffffffffffffffffffffffffffffffffffff167f2f61833efe103718b6e4db0d250ac84e125f9bf724fe3856b695c214b7cc55be826040518082815260200191505060405180910390a250565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002ffa338262001b5e565b81601b8190555082601c81905550505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525081565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003088338262001b5e565b816017819055505050565b6000601054600e5402905090565b60155481565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620030e9338262001b5e565b81601181905550601154601054111562003119576200310d6010546011546200488d565b60128190555062003122565b60006012819055505b5050565b60185481565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200316e338262001b5e565b81601f819055505050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620031bb338262001b5e565b600c548211151515620031cd57600080fd5b620031db600c54836200488d565b600c819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562003228573d6000803e3d6000fd5b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f818154811015156200326357fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156200332c5780601f1062003300576101008083540402835291602001916200332c565b820191906000526020600020905b8154815290600101906020018083116200330e57829003601f168201915b505050505081565b60115481565b602160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620033a2338262001b5e565b811515601460009054906101000a900460ff1615151415151562003454576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f746f20696e69742061207472616e7366657220746f67676c652c20746865207481526020017f6f5374617465206d757374206368616e6765000000000000000000000000000081525060400191505060405180910390fd5b6001601460016101000a81548160ff02191690831515021790555033601460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b601460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515620035ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f63616e6e6f74207472616e7366657220746f20746865207a65726f206164647281526020017f657373000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156200369b5750602160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156200372e5760011515601460009054906101000a900460ff1615151415156200372d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f474754206973206e6f7420796574207472616e7366657261626c65000000000081525060200191505060405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156200381b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f746865206f776e6572206f66207468652047475420636f6e747261637420636181526020017f6e6e6f74207472616e736665720000000000000000000000000000000000000081525060400191505060405180910390fd5b62003828833384620048db565b905092915050565b602160009054906101000a900460ff1681565b601e5481565b6000601554670de0b6b3a764000083028115156200386357fe5b049050919050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620038ad338262001b5e565b81601d819055505050565b600082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101562003a9757808201518184015260208101905062003a7a565b50505050905090810190601f16801562003ac55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801562003ae857600080fd5b505af115801562003afd573d6000803e3d6000fd5b50505050600190509392505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003b4e338262001b5e565b600d54821115151562003b6057600080fd5b62003b6e600d54836200488d565b600d819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562003bbb573d6000803e3d6000fd5b505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003c02338262001b5e565b81602160016101000a81548160ff0219169083151502179055505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003c62338262001b5e565b81602160006101000a81548160ff0219169083151502179055505050565b601d5481565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080602160019054906101000a900460ff16151562003d2c57600080fd5b601f54831015151562003d3e57600080fd5b826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151562003d8c57600080fd5b62003d978362004d51565b9150600d54821115151562003dab57600080fd5b62003db9601054846200488d565b60108190555082601254111562003de45762003dd8601254846200488d565b60128190555062003ded565b60006012819055505b62003e376000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846200488d565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555068010000000000000000820283600e540201905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555062003ee8600d54836200488d565b600d819055503373ffffffffffffffffffffffffffffffffffffffff167fd527546b9a6c42ae0e36c977e5efc630305d93e36fb17f05b2c28b6333af41d8846040518082815260200191505060405180910390a2505050565b60075481565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003f89338262001b5e565b81601e819055505050565b602160029054906101000a900460ff1681565b6000806000806000806000601e54341015151562003fc457600080fd5b602160009054906101000a900460ff16151562003fe057600080fd5b62003feb34620020c5565b965062003ffb60135434620048a7565b6013819055506007546200401260105489620048a7565b111515156200402057600080fd5b6200406a6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205488620048a7565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620040ba87601054620048a7565b601081905550620040db620040d26016543462004d97565b601554620048c4565b9550620040e934876200488d565b945062004106620040fd8660185462004d97565b6103e8620048c4565b93506200411686600c54620048a7565b600c81905550620041376200412e601d548762004d97565b6103e8620048c4565b9250600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015620041a357503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b8015620041f057506020546000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1562004293576200420285856200488d565b94506200424f600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485620048a7565b600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6801000000000000000083029150601054680100000000000000008402811515620042ba57fe5b04600e60008282540192505081905550601054680100000000000000008402811515620042e357fe5b0487028203820391508187600e540203905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506200434e85846200488d565b94506200435e600d5486620048a7565b600d819055506200437260125488620048a7565b6012819055507fe3d4187f6ca4248660cc0ac8b8056515bac4a8132be2eca31d6d0cc170722a7e3388604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a35050505050505050565b60006040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062004496338262001b5e565b828433620044a362004f8c565b808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051809103906000f08015801562004530573d6000803e3d6000fd5b509150600f8290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620045fc57600080fd5b620046078162004dd3565b50565b6000806040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200464f338262001b5e565b8391508173ffffffffffffffffffffffffffffffffffffffff16639b012dec6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015620046b757600080fd5b505af1158015620046cc573d6000803e3d6000fd5b505050505050919050565b601f5481565b620046e9828262004834565b1515620046f557600080fd5b5050565b6200477a826003836040518082805190602001908083835b60208310151562004738578051825260208201915060208101905060208303925062004711565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902062004ed090919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015620047f5578082015181840152602081019050620047d8565b50505050905090810190601f168015620048235780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008282111515156200489c57fe5b818303905092915050565b60008183019050828110151515620048bb57fe5b80905092915050565b60008183811515620048d257fe5b04905092915050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515620049ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c8152602001807f7468652062616c616e636520696e207468652066726f6d20616464726573732081526020017f697320736d616c6c6572207468616e207468652074782076616c75650000000081525060400191505060405180910390fd5b6000620049c8600162002bcd565b1115620049da57620049d9620022e5565b5b62004a2d826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062004ac2826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620048a790919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600e5402600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600e5402600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b62004c97826003836040518082805190602001908083835b60208310151562004c55578051825260208201915060208101905060208303925062004c2e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902062004f2e90919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b8381101562004d1257808201518184015260208101905062004cf5565b50505050905090810190601f16801562004d405780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600080600062004d7362004d6a60165460175462004d97565b6103e8620048c4565b915062004d8b828502670de0b6b3a7640000620048c4565b90508092505050919050565b60008083141562004dac576000905062004dcd565b818302905081838281151562004dbe57fe5b0414151562004dc957fe5b8090505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151562004e1057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b604051610d028062004f9e83390190560060806040526040805190810160405280601081526020017f4d756c74695369675472616e73666572000000000000000000000000000000008152506001908051906020019061004f9291906101e6565b506040805190810160405280600381526020017f4d535400000000000000000000000000000000000000000000000000000000008152506002908051906020019061009b9291906101e6565b506000600360006101000a81548160ff0219169083151502179055506000600360016101000a81548160ff0219169083151502179055503480156100de57600080fd5b50604051606080610d02833981018060405281019080805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260048190555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505061028b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061022757805160ff1916838001178555610255565b82800160010185558215610255579182015b82811115610254578251825591602001919060010190610239565b5b5090506102629190610266565b5090565b61028891905b8082111561028457600081600090555060010161026c565b5090565b90565b610a688061029a6000396000f3006080604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100bf57806317fc45e21461014f5780632a8d26e81461017a5780635210eb5614610191578063522e1177146101e8578063794542ad146102175780638da5cb5b1461024657806395d89b411461029d5780639b012dec1461032d5780639c30ad7e14610344578063d424ee7d14610373578063f2fde38b146103ca575b600080fd5b3480156100cb57600080fd5b506100d461040d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101145780820151818401526020810190506100f9565b50505050905090810190601f1680156101415780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015b57600080fd5b506101646104ab565b6040518082815260200191505060405180910390f35b34801561018657600080fd5b5061018f6104b1565b005b34801561019d57600080fd5b506101a6610665565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f457600080fd5b506101fd61068b565b604051808215151515815260200191505060405180910390f35b34801561022357600080fd5b5061022c61069e565b604051808215151515815260200191505060405180910390f35b34801561025257600080fd5b5061025b6106b1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102a957600080fd5b506102b26106d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f25780820151818401526020810190506102d7565b50505050905090810190601f16801561031f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033957600080fd5b50610342610774565b005b34801561035057600080fd5b5061035961089d565b604051808215151515815260200191505060405180910390f35b34801561037f57600080fd5b506103886108b5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d657600080fd5b5061040b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108db565b005b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104a35780601f10610478576101008083540402835291602001916104a3565b820191906000526020600020905b81548152906001019060200180831161048657829003601f168201915b505050505081565b60045481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561050c57600080fd5b60001515600360019054906101000a900460ff161515141515610597576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f7420617070726f766520612064656e696564207472616e7366657281525060200191505060405180910390fd5b60001515600360009054906101000a900460ff161515141515610648576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f63616e6e6f7420617070726f7665206120636f6d706c657465207472616e736681526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600360006101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900460ff1681565b600360019054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b505050505081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107cf57600080fd5b60001515600360019054906101000a900460ff161515141515610880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f63616e6e6f742064656e792061207472616e736665722074686174206973206181526020017f6c72656164792064656e6965640000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600360016101000a81548160ff021916908315150217905550565b6000600360009054906101000a900460ff1615905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561093657600080fd5b61093f81610942565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561097e57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a7230582007836e7e623c8e9d7b537a35f7aa6db9b79efc15122dd9ec6f8029815837bf8e0029a165627a7a7230582027fcae16c7970f526dd3ff325b918261a5939ad76cfb3b665657c43ea1f1d2bb0029

Deployed Bytecode

0x608060405260043610620003f6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b14620003fb578063024fd650146200045557806306fdde0314620004a6578063095ea7b3146200053c5780630988ca8c14620005a45780630f5f1dbc14620006305780631785f53c146200065e57806318160ddd14620006a45780631f35bc4014620006d25780632121dc751462000718578063217fe6c6146200074a57806323b872dd14620007ee57806324d7806c14620008765780632813de1714620008d4578063298e681e14620009065780632a9121c714620009345780632d02a5b214620009785780632f54bf6e14620009a85780632f65142c1462000a065780632ff2e9dc1462000a7757806330ab85b91462000aa5578063313ce5671462000ad3578063315b91481462000b07578063350924231462000b3557806336e0f6cc1462000b675780633ccfd60b1462000b995780633ce7214c1462000bb35780633e1f55e41462000be357806340c3b18e1462000c115780634355b9d21462000c2b578063445014041462000c89578063485505761462000cb75780634c309d1b1462000ce55780634e6904b51462000cf15780635d2d733d1462000d2b57806360d48b441462000d5b578063688abbf71462000d675780636a61e5fc1462000dad5780636e1682a01462000ddd578063704b6c021462000e0b57806370a082311462000e51578063713494d71462000eab5780637138127a1462000edb578063719fa76d1462000f0b57806375b238fc1462000f4557806376731fe11462000fdb578063792fd9a9146200100b5780637ff9b596146200103957806382337cbe146200106757806384ae2bc6146200109757806385dff0ff14620010c557806388ab152614620010f55780638da5cb5b14620011255780639377d711146200117f57806395d89b4114620011ef578063969ddf8a14620012855780639c1e03a014620012b35780639cd23707146200130d578063a247bc32146200133f578063a3adb958146200136d578063a9059cbb14620013c7578063ab7cb211146200142f578063b47dbf221462001461578063c2507ac1146200148f578063c6f7c5c814620014d3578063cae9ca511462001503578063cd4795cc14620015b1578063d373507b14620015e1578063d60468361462001613578063d6a3f3741462001645578063dd62ed3e1462001673578063e4849b3214620016ed578063e8315742146200171d578063e9d3fb78146200174b578063eb328095146200177b578063f088d54714620017ad578063f17e48ec14620017e5578063f2fde38b1462001835578063f5c4201f146200187b578063fd085b4114620018d9575b600080fd5b3480156200040857600080fd5b506200043f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001907565b6040518082815260200191505060405180910390f35b3480156200046257600080fd5b506200046d62001975565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b348015620004b357600080fd5b50620004be620019ca565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000500578082015181840152602081019050620004e3565b50505050905090810190601f1680156200052e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200054957600080fd5b506200058a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001a6c565b604051808215151515815260200191505060405180910390f35b348015620005b157600080fd5b506200062e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505062001b5e565b005b3480156200063d57600080fd5b506200064862001be3565b6040518082815260200191505060405180910390f35b3480156200066b57600080fd5b50620006a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001be9565b005b348015620006b157600080fd5b50620006bc62001c8a565b6040518082815260200191505060405180910390f35b348015620006df57600080fd5b5062000716600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001c90565b005b3480156200072557600080fd5b506200073062001d17565b604051808215151515815260200191505060405180910390f35b3480156200075757600080fd5b50620007d4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505062001d2a565b604051808215151515815260200191505060405180910390f35b348015620007fb57600080fd5b506200085c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001db5565b604051808215151515815260200191505060405180910390f35b3480156200088357600080fd5b50620008ba600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002062565b604051808215151515815260200191505060405180910390f35b348015620008e157600080fd5b50620008ec620020ac565b604051808215151515815260200191505060405180910390f35b3480156200091357600080fd5b506200091e620020bf565b6040518082815260200191505060405180910390f35b3480156200094157600080fd5b506200096260048036038101908080359060200190929190505050620020c5565b6040518082815260200191505060405180910390f35b3480156200098557600080fd5b50620009a660048036038101908080359060200190929190505050620020eb565b005b348015620009b557600080fd5b50620009ec600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200215c565b604051808215151515815260200191505060405180910390f35b34801562000a1357600080fd5b5062000a1e620021b6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101562000a6357808201518184015260208101905062000a46565b505050509050019250505060405180910390f35b34801562000a8457600080fd5b5062000a8f62002246565b6040518082815260200191505060405180910390f35b34801562000ab257600080fd5b5062000abd62002253565b6040518082815260200191505060405180910390f35b34801562000ae057600080fd5b5062000aeb62002259565b604051808260ff1660ff16815260200191505060405180910390f35b34801562000b1457600080fd5b5062000b1f6200226c565b6040518082815260200191505060405180910390f35b34801562000b4257600080fd5b5062000b6560048036038101908080351515906020019092919050505062002272565b005b34801562000b7457600080fd5b5062000b7f620022d2565b604051808215151515815260200191505060405180910390f35b34801562000ba657600080fd5b5062000bb1620022e5565b005b34801562000bc057600080fd5b5062000be16004803603810190808035906020019092919050505062002474565b005b34801562000bf057600080fd5b5062000bfb620024c1565b6040518082815260200191505060405180910390f35b34801562000c1e57600080fd5b5062000c29620024cb565b005b34801562000c3857600080fd5b5062000c6f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002736565b604051808215151515815260200191505060405180910390f35b34801562000c9657600080fd5b5062000ca162002af3565b6040518082815260200191505060405180910390f35b34801562000cc457600080fd5b5062000ccf62002af9565b6040518082815260200191505060405180910390f35b62000cef62002aff565b005b34801562000cfe57600080fd5b5062000d29600480360381019080803590602001909291908035906020019092919050505062002b15565b005b34801562000d3857600080fd5b5062000d596004803603810190808035906020019092919050505062002b6a565b005b62000d6562002bb7565b005b34801562000d7457600080fd5b5062000d9760048036038101908080351515906020019092919050505062002bcd565b6040518082815260200191505060405180910390f35b34801562000dba57600080fd5b5062000ddb6004803603810190808035906020019092919050505062002c3f565b005b34801562000dea57600080fd5b5062000df562002cb0565b6040518082815260200191505060405180910390f35b34801562000e1857600080fd5b5062000e4f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002cb6565b005b34801562000e5e57600080fd5b5062000e95600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002d57565b6040518082815260200191505060405180910390f35b34801562000eb857600080fd5b5062000ed96004803603810190808035906020019092919050505062002d9f565b005b34801562000ee857600080fd5b5062000f096004803603810190808035906020019092919050505062002dec565b005b34801562000f1857600080fd5b5062000f43600480360381019080803590602001909291908035906020019092919050505062002fb8565b005b34801562000f5257600080fd5b5062000f5d6200300d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000f9f57808201518184015260208101905062000f82565b50505050905090810190601f16801562000fcd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801562000fe857600080fd5b50620010096004803603810190808035906020019092919050505062003046565b005b3480156200101857600080fd5b506200102362003093565b6040518082815260200191505060405180910390f35b3480156200104657600080fd5b5062001051620030a1565b6040518082815260200191505060405180910390f35b3480156200107457600080fd5b506200109560048036038101908080359060200190929190505050620030a7565b005b348015620010a457600080fd5b50620010af62003126565b6040518082815260200191505060405180910390f35b348015620010d257600080fd5b50620010f3600480360381019080803590602001909291905050506200312c565b005b3480156200110257600080fd5b50620011236004803603810190808035906020019092919050505062003179565b005b3480156200113257600080fd5b506200113d6200322d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200118c57600080fd5b50620011ad6004803603810190808035906020019092919050505062003253565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620011fc57600080fd5b506200120762003292565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620012495780820151818401526020810190506200122c565b50505050905090810190601f168015620012775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200129257600080fd5b506200129d62003334565b6040518082815260200191505060405180910390f35b348015620012c057600080fd5b50620012cb6200333a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200131a57600080fd5b506200133d60048036038101908080351515906020019092919050505062003360565b005b3480156200134c57600080fd5b5062001357620034b4565b6040518082815260200191505060405180910390f35b3480156200137a57600080fd5b5062001385620034fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620013d457600080fd5b5062001415600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062003521565b604051808215151515815260200191505060405180910390f35b3480156200143c57600080fd5b506200144762003830565b604051808215151515815260200191505060405180910390f35b3480156200146e57600080fd5b506200147962003843565b6040518082815260200191505060405180910390f35b3480156200149c57600080fd5b50620014bd6004803603810190808035906020019092919050505062003849565b6040518082815260200191505060405180910390f35b348015620014e057600080fd5b5062001501600480360381019080803590602001909291905050506200386b565b005b3480156200151057600080fd5b5062001597600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050620038b8565b604051808215151515815260200191505060405180910390f35b348015620015be57600080fd5b50620015df6004803603810190808035906020019092919050505062003b0c565b005b348015620015ee57600080fd5b506200161160048036038101908080351515906020019092919050505062003bc0565b005b3480156200162057600080fd5b506200164360048036038101908080351515906020019092919050505062003c20565b005b3480156200165257600080fd5b506200165d62003c80565b6040518082815260200191505060405180910390f35b3480156200168057600080fd5b50620016d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062003c86565b6040518082815260200191505060405180910390f35b348015620016fa57600080fd5b506200171b6004803603810190808035906020019092919050505062003d0d565b005b3480156200172a57600080fd5b506200173562003f41565b6040518082815260200191505060405180910390f35b3480156200175857600080fd5b50620017796004803603810190808035906020019092919050505062003f47565b005b3480156200178857600080fd5b506200179362003f94565b604051808215151515815260200191505060405180910390f35b620017e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062003fa7565b005b348015620017f257600080fd5b5062001833600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062004452565b005b3480156200184257600080fd5b5062001879600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200459f565b005b3480156200188857600080fd5b50620018bf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200460a565b604051808215151515815260200191505060405180910390f35b348015620018e657600080fd5b50620018f1620046d7565b6040518082815260200191505060405180910390f35b600068010000000000000000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200195e8462002d57565b600e5402038115156200196d57fe5b049050919050565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff1631620019a13362002d57565b601054620019b0600162002bcd565b601754601654955095509550955095509550909192939495565b60048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562001a645780601f1062001a385761010080835404028352916020019162001a64565b820191906000526020600020905b81548152906001019060200180831162001a4657829003601f168201915b505050505081565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b62001bdf826003836040518082805190602001908083835b60208310151562001b9d578051825260208201915060208101905060208303925062001b76565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020620046dd90919063ffffffff16565b5050565b600d5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562001c4657600080fd5b62001c87816040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620046f9565b50565b60105481565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062001cd2338262001b5e565b81602160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601460009054906101000a900460ff1681565b600062001dad836003846040518082805190602001908083835b60208310151562001d6b578051825260208201915060208101905060208303925062001d44565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206200483490919063ffffffff16565b905092915050565b600062001e0a826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001edd82600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001fb0826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620048a790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000620020a5826040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062001d2a565b9050919050565b601460019054906101000a900460ff1681565b60175481565b600080620020e0670de0b6b3a76400008402601554620048c4565b905080915050919050565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200212d338262001b5e565b60195482101515156200213f57600080fd5b601a5482111515156200215157600080fd5b816016819055505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b6060600f8054806020026020016040519081016040528092919081815260200182805480156200223c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620021f1575b5050505050905090565b68035f4ba8e9c6b9800081565b60125481565b600660009054906101000a900460ff1681565b60205481565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620022b4338262001b5e565b81602160026101000a81548160ff0219169083151502179055505050565b602160019054906101000a900460ff1681565b600080339150620022f7600062002bcd565b9050680100000000000000008102600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054810190506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801562002421573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc826040518082815260200191505060405180910390a25050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620024b6338262001b5e565b816007819055505050565b6000600e54905090565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200250d338262001b5e565b60011515601460019054906101000a900460ff161515141515620025bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f7472616e7366657220746f67676c65206e6f7420696e2070656e64696e67207381526020017f746174650000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515620026ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f746865207265717565737465722063616e6e6f7420617070726f76652074686581526020017f207472616e7366657220746f67676c650000000000000000000000000000000081525060400191505060405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506000601460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060006040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002780338262001b5e565b8694508473ffffffffffffffffffffffffffffffffffffffff166317fc45e26040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620027e857600080fd5b505af1158015620027fd573d6000803e3d6000fd5b505050506040513d60208110156200281457600080fd5b810190808051906020019092919050505093508473ffffffffffffffffffffffffffffffffffffffff16635210eb566040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200288c57600080fd5b505af1158015620028a1573d6000803e3d6000fd5b505050506040513d6020811015620028b857600080fd5b810190808051906020019092919050505092508473ffffffffffffffffffffffffffffffffffffffff1663d424ee7d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200293057600080fd5b505af115801562002945573d6000803e3d6000fd5b505050506040513d60208110156200295c57600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151562002a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f61207265717565737465722063616e6e6f7420617070726f766520616e20616481526020017f6d696e207472616e73666572000000000000000000000000000000000000000081525060400191505060405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16632a8d26e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801562002a9f57600080fd5b505af115801562002ab4573d6000803e3d6000fd5b5050505062002ae783600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686620048db565b95505050505050919050565b60165481565b600c5481565b62002b0d600d5434620048a7565b600d81905550565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002b57338262001b5e565b8160198190555082601a81905550505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002bac338262001b5e565b816020819055505050565b62002bc5600c5434620048a7565b600c81905550565b6000803390508262002bea5762002be48162001907565b62002c37565b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462002c358262001907565b015b915050919050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002c81338262001b5e565b601b54821015151562002c9357600080fd5b601c54821115151562002ca557600080fd5b816015819055505050565b60135481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562002d1357600080fd5b62002d54816040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062004c16565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002de1338262001b5e565b816018819055505050565b602160029054906101000a900460ff16151562002e0857600080fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151562002e5657600080fd5b600062002e64600162002bcd565b111562002e765762002e75620022e5565b5b80600e5402600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555062002f116000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826200488d565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062002f61601054826200488d565b6010819055503373ffffffffffffffffffffffffffffffffffffffff167f2f61833efe103718b6e4db0d250ac84e125f9bf724fe3856b695c214b7cc55be826040518082815260200191505060405180910390a250565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002ffa338262001b5e565b81601b8190555082601c81905550505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525081565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003088338262001b5e565b816017819055505050565b6000601054600e5402905090565b60155481565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620030e9338262001b5e565b81601181905550601154601054111562003119576200310d6010546011546200488d565b60128190555062003122565b60006012819055505b5050565b60185481565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200316e338262001b5e565b81601f819055505050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620031bb338262001b5e565b600c548211151515620031cd57600080fd5b620031db600c54836200488d565b600c819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562003228573d6000803e3d6000fd5b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f818154811015156200326357fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156200332c5780601f1062003300576101008083540402835291602001916200332c565b820191906000526020600020905b8154815290600101906020018083116200330e57829003601f168201915b505050505081565b60115481565b602160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620033a2338262001b5e565b811515601460009054906101000a900460ff1615151415151562003454576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f746f20696e69742061207472616e7366657220746f67676c652c20746865207481526020017f6f5374617465206d757374206368616e6765000000000000000000000000000081525060400191505060405180910390fd5b6001601460016101000a81548160ff02191690831515021790555033601460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b601460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515620035ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f63616e6e6f74207472616e7366657220746f20746865207a65726f206164647281526020017f657373000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156200369b5750602160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156200372e5760011515601460009054906101000a900460ff1615151415156200372d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f474754206973206e6f7420796574207472616e7366657261626c65000000000081525060200191505060405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156200381b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f746865206f776e6572206f66207468652047475420636f6e747261637420636181526020017f6e6e6f74207472616e736665720000000000000000000000000000000000000081525060400191505060405180910390fd5b62003828833384620048db565b905092915050565b602160009054906101000a900460ff1681565b601e5481565b6000601554670de0b6b3a764000083028115156200386357fe5b049050919050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620038ad338262001b5e565b81601d819055505050565b600082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101562003a9757808201518184015260208101905062003a7a565b50505050905090810190601f16801562003ac55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801562003ae857600080fd5b505af115801562003afd573d6000803e3d6000fd5b50505050600190509392505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003b4e338262001b5e565b600d54821115151562003b6057600080fd5b62003b6e600d54836200488d565b600d819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562003bbb573d6000803e3d6000fd5b505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003c02338262001b5e565b81602160016101000a81548160ff0219169083151502179055505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003c62338262001b5e565b81602160006101000a81548160ff0219169083151502179055505050565b601d5481565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080602160019054906101000a900460ff16151562003d2c57600080fd5b601f54831015151562003d3e57600080fd5b826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151562003d8c57600080fd5b62003d978362004d51565b9150600d54821115151562003dab57600080fd5b62003db9601054846200488d565b60108190555082601254111562003de45762003dd8601254846200488d565b60128190555062003ded565b60006012819055505b62003e376000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846200488d565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555068010000000000000000820283600e540201905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555062003ee8600d54836200488d565b600d819055503373ffffffffffffffffffffffffffffffffffffffff167fd527546b9a6c42ae0e36c977e5efc630305d93e36fb17f05b2c28b6333af41d8846040518082815260200191505060405180910390a2505050565b60075481565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003f89338262001b5e565b81601e819055505050565b602160029054906101000a900460ff1681565b6000806000806000806000601e54341015151562003fc457600080fd5b602160009054906101000a900460ff16151562003fe057600080fd5b62003feb34620020c5565b965062003ffb60135434620048a7565b6013819055506007546200401260105489620048a7565b111515156200402057600080fd5b6200406a6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205488620048a7565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620040ba87601054620048a7565b601081905550620040db620040d26016543462004d97565b601554620048c4565b9550620040e934876200488d565b945062004106620040fd8660185462004d97565b6103e8620048c4565b93506200411686600c54620048a7565b600c81905550620041376200412e601d548762004d97565b6103e8620048c4565b9250600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015620041a357503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b8015620041f057506020546000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1562004293576200420285856200488d565b94506200424f600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485620048a7565b600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6801000000000000000083029150601054680100000000000000008402811515620042ba57fe5b04600e60008282540192505081905550601054680100000000000000008402811515620042e357fe5b0487028203820391508187600e540203905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506200434e85846200488d565b94506200435e600d5486620048a7565b600d819055506200437260125488620048a7565b6012819055507fe3d4187f6ca4248660cc0ac8b8056515bac4a8132be2eca31d6d0cc170722a7e3388604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a35050505050505050565b60006040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062004496338262001b5e565b828433620044a362004f8c565b808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051809103906000f08015801562004530573d6000803e3d6000fd5b509150600f8290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620045fc57600080fd5b620046078162004dd3565b50565b6000806040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200464f338262001b5e565b8391508173ffffffffffffffffffffffffffffffffffffffff16639b012dec6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015620046b757600080fd5b505af1158015620046cc573d6000803e3d6000fd5b505050505050919050565b601f5481565b620046e9828262004834565b1515620046f557600080fd5b5050565b6200477a826003836040518082805190602001908083835b60208310151562004738578051825260208201915060208101905060208303925062004711565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902062004ed090919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015620047f5578082015181840152602081019050620047d8565b50505050905090810190601f168015620048235780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008282111515156200489c57fe5b818303905092915050565b60008183019050828110151515620048bb57fe5b80905092915050565b60008183811515620048d257fe5b04905092915050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515620049ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c8152602001807f7468652062616c616e636520696e207468652066726f6d20616464726573732081526020017f697320736d616c6c6572207468616e207468652074782076616c75650000000081525060400191505060405180910390fd5b6000620049c8600162002bcd565b1115620049da57620049d9620022e5565b5b62004a2d826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062004ac2826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620048a790919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600e5402600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600e5402600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b62004c97826003836040518082805190602001908083835b60208310151562004c55578051825260208201915060208101905060208303925062004c2e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902062004f2e90919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b8381101562004d1257808201518184015260208101905062004cf5565b50505050905090810190601f16801562004d405780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600080600062004d7362004d6a60165460175462004d97565b6103e8620048c4565b915062004d8b828502670de0b6b3a7640000620048c4565b90508092505050919050565b60008083141562004dac576000905062004dcd565b818302905081838281151562004dbe57fe5b0414151562004dc957fe5b8090505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151562004e1057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b604051610d028062004f9e83390190560060806040526040805190810160405280601081526020017f4d756c74695369675472616e73666572000000000000000000000000000000008152506001908051906020019061004f9291906101e6565b506040805190810160405280600381526020017f4d535400000000000000000000000000000000000000000000000000000000008152506002908051906020019061009b9291906101e6565b506000600360006101000a81548160ff0219169083151502179055506000600360016101000a81548160ff0219169083151502179055503480156100de57600080fd5b50604051606080610d02833981018060405281019080805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260048190555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505061028b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061022757805160ff1916838001178555610255565b82800160010185558215610255579182015b82811115610254578251825591602001919060010190610239565b5b5090506102629190610266565b5090565b61028891905b8082111561028457600081600090555060010161026c565b5090565b90565b610a688061029a6000396000f3006080604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100bf57806317fc45e21461014f5780632a8d26e81461017a5780635210eb5614610191578063522e1177146101e8578063794542ad146102175780638da5cb5b1461024657806395d89b411461029d5780639b012dec1461032d5780639c30ad7e14610344578063d424ee7d14610373578063f2fde38b146103ca575b600080fd5b3480156100cb57600080fd5b506100d461040d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101145780820151818401526020810190506100f9565b50505050905090810190601f1680156101415780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015b57600080fd5b506101646104ab565b6040518082815260200191505060405180910390f35b34801561018657600080fd5b5061018f6104b1565b005b34801561019d57600080fd5b506101a6610665565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f457600080fd5b506101fd61068b565b604051808215151515815260200191505060405180910390f35b34801561022357600080fd5b5061022c61069e565b604051808215151515815260200191505060405180910390f35b34801561025257600080fd5b5061025b6106b1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102a957600080fd5b506102b26106d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f25780820151818401526020810190506102d7565b50505050905090810190601f16801561031f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033957600080fd5b50610342610774565b005b34801561035057600080fd5b5061035961089d565b604051808215151515815260200191505060405180910390f35b34801561037f57600080fd5b506103886108b5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d657600080fd5b5061040b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108db565b005b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104a35780601f10610478576101008083540402835291602001916104a3565b820191906000526020600020905b81548152906001019060200180831161048657829003601f168201915b505050505081565b60045481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561050c57600080fd5b60001515600360019054906101000a900460ff161515141515610597576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f7420617070726f766520612064656e696564207472616e7366657281525060200191505060405180910390fd5b60001515600360009054906101000a900460ff161515141515610648576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f63616e6e6f7420617070726f7665206120636f6d706c657465207472616e736681526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600360006101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900460ff1681565b600360019054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b505050505081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107cf57600080fd5b60001515600360019054906101000a900460ff161515141515610880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f63616e6e6f742064656e792061207472616e736665722074686174206973206181526020017f6c72656164792064656e6965640000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600360016101000a81548160ff021916908315150217905550565b6000600360009054906101000a900460ff1615905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561093657600080fd5b61093f81610942565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561097e57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a7230582007836e7e623c8e9d7b537a35f7aa6db9b79efc15122dd9ec6f8029815837bf8e0029a165627a7a7230582027fcae16c7970f526dd3ff325b918261a5939ad76cfb3b665657c43ea1f1d2bb0029

Swarm Source

bzzr://27fcae16c7970f526dd3ff325b918261a5939ad76cfb3b665657c43ea1f1d2bb

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

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