Sponsored:   Temco - Join the Largest VC Backed ICO on the Bitcoin Network! TEMCO KYC Whitelist Starts Now!!
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 1419 txns
 Latest 25 transactions from a total of 1419 transactions

TxHash Age From To Value [TxFee]
0x9ffeb4ebbc463f5fb67e9bfc1d63f81a27673a4a86374e101532bbc0e08f8e5b124 days 8 hrs ago0xff5166e66e389e07a50bc8232eb9dc5a52dc190b  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000215256
0x616bbac5fe3b66fed23dd230d0b708fc2783b5b8fe8fb9cf2b5fab5135758f80143 days 4 hrs ago0x002501331bced82b690401b4e1204209eac4f0b7  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.00012454
0x374756679a7b2a3a12081ca9fa93045b30d5e05c948c8b6856d26746fdf12612150 days 10 hrs ago0x03706f143369c161fc0dcccfa006a3bc0b23644d  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.00071766
0xacf0bceaa91adceb2ffa435b7870c2920f826d72c1a3e53b2fc082f45c8eb8c7150 days 23 hrs ago0xaf469c4a0914938e6149cf621c54fb4b1ec0c202  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.002895066
0x55cd2266a846bea8a16e836878d5666465a5d91b348fe5e348c1b23d0e6fa806151 days 4 hrs ago0x05954a4cc037899278c414a0e8b9f2797553e236  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.00179415
0x79d19e60a76db7a4ecd5da6725c79ff4f138f41ccf0ef910ad19f5a6c316f744158 days 6 hrs ago0x002501331bced82b690401b4e1204209eac4f0b7  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000912357
0xe595adb0e2c24769ae44df1606adc4dcc2f1980fa3ccf385dc3f4b79dccaf7b8175 days 16 hrs ago0x9be96a6e861d2e5aff1fe0738bed664b6f0b543e  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000215298
0x822005d1f82b519e000d22d44497c75a0c53ac0d710326955cd986adcfda3b03178 days 8 hrs ago0xce5f17718311fd9cd7383fd1fdff754ff3b0e2fe  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000143532
0xf7555609c8227f221697ab38c89c3c1a7c404e50643df0dddbf8694902d05748187 days 43 mins ago0x66ba684c60bbff0558b3498d0d657f8bfbcf1360  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000215298
0xc342b8e1406f76e2dc4786662ba92da65d949c61d8b404e87dd1ea8b41dcb3f3195 days 9 hrs ago0xc0c8f8a62017e593b08c3d3add41bcf445fbfac5  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.00107649
0x9f008cca70499146b8aea361481b128e5fc67b1cdbe6fb72f4275fd739eb5f2c197 days 4 hrs ago0x1ffb447f243ca4ee403876feac87fb5398abf410  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000789426
0xc2c7ec9cf52eb8dcca38043643e3eaef0b1548b1666702d3e9ba308ca24b3043205 days 15 hrs ago0xda03669c01dc5290f120b562045b17eb14a9efb5  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.00071766
0x1ce0e6cdbeedcf0684737e549f58dfb4f8ba1275ba1090777f6568f444f63837226 days 10 hrs ago0x98e52a73e3f7379e917998d0ea7dc0ee38305ca9  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000215298
0x044609967d77958b4094e1a429e1f0a4282884296d0f8375fcc5eed4e45d1327234 days 13 hrs ago0xa5864806b194d02df5b5d30f1a77cabc4f6c02aa  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000071766
0x7876cbe97fa6f92ce7ef4c2c5ff06e293333a93a8bf8cb7f9522f9e5196810a1236 days 8 hrs ago0xb53516b5d341c11e90ec8bdfd29ebe855ada9d19  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000064188
0xea39e3b1180bd1140aa73af8bf5be98079f9b92d303bee02ab17624d532c1991236 days 8 hrs ago0xb53516b5d341c11e90ec8bdfd29ebe855ada9d19  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000064188
0x2d4ae229466bbfa4a60933892c5c1c1dfae803f1cb5c43fc87f16cd4d9c02269236 days 8 hrs ago0xb53516b5d341c11e90ec8bdfd29ebe855ada9d19  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000064188
0xf5e1bc0851851b1c33727105405ece0bd6c09484c6ec9f82b49e566b56f08185236 days 8 hrs ago0xb53516b5d341c11e90ec8bdfd29ebe855ada9d19  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000227064
0x32004e14a8fe393a53e192a24e2dc7f8167ecf465dd08e3685bb8c989a72167c240 days 10 hrs ago0xa3189ceecf29ca58cb9c186311bfd3a029f64f2c  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000071766
0x815482b4fbea4f76ab5378b8c1e56456d40205b3c9a0d4e22bbadd0da5387e91242 days 14 hrs ago0x5a141b5d639bb6913e66735c27dccc146e971166  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000215298
0xd77f0646b6c4794d31e1c10ae624fe43e6b3be4514dcabc81aa3958ee00a1e6b248 days 7 hrs ago0xd80b80a9daddc019dd5427e53af99578549e9a82  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.00143532
0xa031f52b7632d75039806374022512fa144123ea01fc911210b6d528b17e6c61262 days 13 hrs ago0x877dba008f84a3ed9ee942815da3cadc1e357a67  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000071766
0xb599e3365cce5ef9bdfdd1836ff0f8df52db0da617c84b37350f946f89d76105264 days 2 hrs ago0x5e4a8c76668e562032860ff0edfa49f786ea69e0  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000143532
0x5b5beeac975fcef5e8a6cd1268f25a6cbf8d474e1bee9f646720395e4042e479268 days 23 hrs ago0x4bfe1fa076d571d1eb72bc0d0e12f99c6e6f8b07  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.0000071766
0x2a71ad01035c5926ffff4df617a77be6f8bfbdfcc21d942f95f2e6f246b6fc66275 days 8 hrs ago0x492d21c55cab855f313b3440bcfedf6085955f6b  IN   0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90 Ether0.000143532
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x616bbac5fe3b66fed23dd230d0b708fc2783b5b8fe8fb9cf2b5fab5135758f806013087143 days 4 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x36770ff967bd05248b1c4c899ffb70caa3391b842.387086642857142858 Ether
0x374756679a7b2a3a12081ca9fa93045b30d5e05c948c8b6856d26746fdf126125970386150 days 10 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x03706f143369c161fc0dcccfa006a3bc0b23644d0.018 Ether
0xacf0bceaa91adceb2ffa435b7870c2920f826d72c1a3e53b2fc082f45c8eb8c75967098150 days 23 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90xaf469c4a0914938e6149cf621c54fb4b1ec0c2020.157714285714285715 Ether
0x55cd2266a846bea8a16e836878d5666465a5d91b348fe5e348c1b23d0e6fa8065966029151 days 4 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x05954a4cc037899278c414a0e8b9f2797553e2360.091 Ether
0xe595adb0e2c24769ae44df1606adc4dcc2f1980fa3ccf385dc3f4b79dccaf7b85822822175 days 16 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x9be96a6e861d2e5aff1fe0738bed664b6f0b543e0.061 Ether
0x822005d1f82b519e000d22d44497c75a0c53ac0d710326955cd986adcfda3b035807204178 days 8 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90xce5f17718311fd9cd7383fd1fdff754ff3b0e2fe0.052 Ether
0xf7555609c8227f221697ab38c89c3c1a7c404e50643df0dddbf8694902d057485757267187 days 43 mins ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x66ba684c60bbff0558b3498d0d657f8bfbcf13600.039 Ether
0xc342b8e1406f76e2dc4786662ba92da65d949c61d8b404e87dd1ea8b41dcb3f35710198195 days 9 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90xc0c8f8a62017e593b08c3d3add41bcf445fbfac50.018 Ether
0x9f008cca70499146b8aea361481b128e5fc67b1cdbe6fb72f4275fd739eb5f2c5700104197 days 4 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x1ffb447f243ca4ee403876feac87fb5398abf4100.015 Ether
0xc2c7ec9cf52eb8dcca38043643e3eaef0b1548b1666702d3e9ba308ca24b30435652383205 days 15 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90xda03669c01dc5290f120b562045b17eb14a9efb50.051 Ether
0x1ce0e6cdbeedcf0684737e549f58dfb4f8ba1275ba1090777f6568f444f638375533760226 days 10 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x98e52a73e3f7379e917998d0ea7dc0ee38305ca90.02 Ether
0x044609967d77958b4094e1a429e1f0a4282884296d0f8375fcc5eed4e45d13275486866234 days 13 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90xa5864806b194d02df5b5d30f1a77cabc4f6c02aa0.013 Ether
0xf5e1bc0851851b1c33727105405ece0bd6c09484c6ec9f82b49e566b56f081855476391236 days 8 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90xb53516b5d341c11e90ec8bdfd29ebe855ada9d190.027 Ether
0x32004e14a8fe393a53e192a24e2dc7f8167ecf465dd08e3685bb8c989a72167c5452483240 days 10 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90xa3189ceecf29ca58cb9c186311bfd3a029f64f2c0.002 Ether
0x815482b4fbea4f76ab5378b8c1e56456d40205b3c9a0d4e22bbadd0da5387e915439740242 days 14 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x5a141b5d639bb6913e66735c27dccc146e9711660.003 Ether
0xd77f0646b6c4794d31e1c10ae624fe43e6b3be4514dcabc81aa3958ee00a1e6b5405688248 days 7 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90xd80b80a9daddc019dd5427e53af99578549e9a820.023 Ether
0xa031f52b7632d75039806374022512fa144123ea01fc911210b6d528b17e6c615320127262 days 13 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x877dba008f84a3ed9ee942815da3cadc1e357a670.002 Ether
0xb599e3365cce5ef9bdfdd1836ff0f8df52db0da617c84b37350f946f89d761055310748264 days 2 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x5e4a8c76668e562032860ff0edfa49f786ea69e00.013 Ether
0x5b5beeac975fcef5e8a6cd1268f25a6cbf8d474e1bee9f646720395e4042e4795281647268 days 23 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x4bfe1fa076d571d1eb72bc0d0e12f99c6e6f8b070.013 Ether
0x2a71ad01035c5926ffff4df617a77be6f8bfbdfcc21d942f95f2e6f246b6fc665244208275 days 8 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x492d21c55cab855f313b3440bcfedf6085955f6b0.029 Ether
0x8b2ce1ac265c8e5b5089835ab3846c57dace68d920ac7cd21d9ff13299732dde5239511276 days 3 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x1395e178b6701d182af8962037100b7fabf4fedb0.093 Ether
0xe1802e743daf0d357bdd8b0753a3e5f2678219351e0c4e45bba1f071288f32865211908280 days 20 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x7e7c2daed42b38a826c40834d264908f148e67b90.058 Ether
0xec2206a5cd73445b2565ed47785227e784139ca27c2825c75ce9b26f25a52d995206063281 days 19 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90xb87e73ad25086c43a16fe5f9589ff265f8a3a9eb0.013 Ether
0x958651d5a5f79935834ef1e73017b6ec6127c440d3072ffe405a4cc50bdb9fc55202458282 days 10 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90xdc59cb55c240cd0000e2edfb32143ab91fc69f400.09 Ether
0xbbcaf34fc36fadc725c6d30831cda2c4ac60a11a912c2df343af0b1dbba34cec5198052283 days 4 hrs ago0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed90x5173f5cdd726828a71fcae98d52c43c5943cddc20.013 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: EnchantedShop
Compiler Text: v0.4.18+commit.9cf6e910
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

// zeppelin-solidity: 1.5.0

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


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


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


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


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

}

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

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

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

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

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

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

  mapping(address => uint256) balances;

  /**
  * @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]);

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    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 balance) {
    return balances[_owner];
  }

}

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

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

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


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

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

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

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

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

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

}

contract Object is StandardToken, Ownable {
    string public name;
    string public symbol;
    uint8 public constant decimals = 18;
    bool public mintingFinished = false;

    event Burn(address indexed burner, uint value);
    event Mint(address indexed to, uint amount);
    event MintFinished();

    modifier canMint() {
        require(!mintingFinished);
        _;
    }

    function Object(string _name, string _symbol) public {
        name = _name;
        symbol = _symbol;
    }

    function burn(uint _value) public {
        require(_value <= balances[msg.sender]);
        address burner = msg.sender;
        balances[burner] = balances[burner].sub(_value);
        totalSupply = totalSupply.sub(_value);
        Burn(burner, _value);
    }

    function mint(address _to, uint _amount) onlyOwner canMint public returns(bool) {
        totalSupply = totalSupply.add(_amount);
        balances[_to] = balances[_to].add(_amount);
        Mint(_to, _amount);
        Transfer(address(0), _to, _amount);
        return true;
    }

    function finishMinting() onlyOwner canMint public returns(bool) {
        mintingFinished = true;
        MintFinished();
        return true;
    }

    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(_value <= balances[msg.sender]);
        require(_value % (1 ether) == 0); // require whole token transfers

        // SafeMath.sub will throw if there is not enough balance.
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        Transfer(msg.sender, _to, _value);
        return true;
    }
}

contract Shop is Ownable {
    using SafeMath for *;

    struct ShopSettings {
        address bank;
        uint32 startTime;
        uint32 endTime;
        uint fundsRaised;
        uint rate;
        uint price;
        //uint recommendedBid;
    }

    Object public object;
    ShopSettings public shopSettings;

    modifier onlyValidPurchase() {
        require(msg.value % shopSettings.price == 0); // whole numbers only
        require((now >= shopSettings.startTime && now <= shopSettings.endTime) && msg.value != 0);
        _;
    }

    modifier whenClosed() { // not actually implemented?
        require(now > shopSettings.endTime);
        _;
    }

    modifier whenOpen() {
        require(now < shopSettings.endTime);
        _;
    }

    modifier onlyValidAddress(address _bank) {
        require(_bank != address(0));
        _;
    }

    modifier onlyOne() {
        require(calculateTokens() == 1 ether);
        _;
    }

    modifier onlyBuyer(address _beneficiary) {
        require(_beneficiary == msg.sender);
        _;
    }

    event ShopClosed(uint32 date);
    event ObjectPurchase(address indexed purchaser, address indexed beneficiary, uint value, uint amount);

    function () external payable {
        buyObject(msg.sender);
    }

    function Shop(address _bank, string _name, string _symbol, uint _rate, uint32 _endTime)
    onlyValidAddress(_bank) public {
        require(_rate >= 0);
        require(_endTime > now);
        shopSettings = ShopSettings(_bank, uint32(now), _endTime, 0, _rate, 0);
        calculatePrice(); // set initial price based on initial rate
        object = new Object(_name, _symbol);
    }

    function buyObject(address _beneficiary) onlyValidPurchase
    onlyBuyer(_beneficiary)
    onlyValidAddress(_beneficiary) public payable {
        uint numTokens = calculateTokens();
        shopSettings.fundsRaised = shopSettings.fundsRaised.add(msg.value);
        object.mint(_beneficiary, numTokens);
        ObjectPurchase(msg.sender, _beneficiary, msg.value, numTokens);
        forwardFunds();
    }

    function calculateTokens() internal returns(uint) {
        // rate is literally tokens per eth in wei;
        // passing in a rate of 10 ETH (10*10^18) equates to 10 tokens per ETH, or a price of 0.1 ETH per token
        // rate is always 1/price!
        calculatePrice(); // update price
        return msg.value.mul(1 ether).div(1 ether.mul(1 ether).div(shopSettings.rate));
    }

    function calculatePrice() internal returns(uint) {
        shopSettings.price = (1 ether).mul(1 ether).div(shopSettings.rate); // update price based on current rate
        //shopSettings.recommendedBid = shopSettings.price.add((1 ether).div(100)); // update recommended bid based on current price
    }

    function closeShop() onlyOwner whenOpen public {
        shopSettings.endTime = uint32(now);
        ShopClosed(uint32(now));
    }

    function forwardFunds() internal {
        shopSettings.bank.transfer(msg.value);
    }
}

contract EnchantedShop is Shop {
    using SafeMath for *;

    mapping(address => uint) public balanceOwed; // balances owed to individual addresses
    mapping(address => uint) public latestBalanceCheck; // latest balance check of individual addresses
    mapping(address => uint) public itemsOwned;
    //mapping(address => uint) public totalWithdrawn; // used in calculating total earnings
    mapping(address => uint) public excessEth; // excess eth sent by individual addresses
    /*
    Using itemsOwned in place of object.balanceOf(msg.sender) prevents users who did not purchase tokens from the contract but who were instead transferred tokens from receiving earnings on them (which would require extra contract and token functionality to account for when those items were acquired). Using itemsOwned also means that users can transfer their tokens out but will still earn returns on them if they were purchased from the shop. We can also perform a check against the user's balanceOf to prevent this if desired.
    */
    uint public itemReturn;
    uint public maxDebt; // maximum possible debt owed by the shop if no funds were claimed
    uint public runningDebt; // total of individually amortized debts owed by this shop
    uint public additionalDebt; // general debt not yet accounted for due to amortization
    uint public debtPaid; // total debt paid by this shop
    uint public constant devFee = 125; // 125 represents 12.5%
    uint public originalPrice;

    uint public totalExcessEth; // total of individually amortized excess eth transfers, analogous to runningDebt

    bool public lock;
    uint public unlockDate;

    event ShopDeployed(address wallet, uint rate, uint itemReturn, uint32 endTime);
    //event EnchantedObjectMinted(uint totalSupply);
    event PriceUpdate(uint price);

    event FundsMoved(uint amount);
    event SafeLocked(uint date);
    event StartedSafeUnlock(uint date);

    event WillWithdraw(uint amount);

    modifier onlyContributors {
        require(itemsOwned[msg.sender] > 0);
        _;
    }

    modifier onlyValidPurchase() { // override onlyValidPurchase so that buyObject requires >= enough for 1 token instead of whole numbers only
        require(msg.value >= shopSettings.price); // at least enough for 1
        require((now >= shopSettings.startTime && now <= shopSettings.endTime) && msg.value != 0);
        _;
    }

    function EnchantedShop(address _bank, string _name, string _symbol, uint _rate, uint32 _endTime, uint _itemReturn)
    Shop(_bank, _name, _symbol, _rate, _endTime) public
    {
        require(_itemReturn == shopSettings.price.div(100)); // safety check; ensure we're using 1% returns and that we're using the correct price
        itemReturn = _itemReturn; // return should be in given wei
        originalPrice = shopSettings.price;
        ShopDeployed(_bank, _rate, _itemReturn, _endTime);
        unlockDate = 0;
        lock = true;
        SafeLocked(now);
    }

    function calculateTokens() internal returns(uint) {
        // rate is literally tokens per eth in wei;
        // passing in a rate of 10 ETH (10*10^18) equates to 10 tokens per ETH, or a price of 0.1 ETH per token
        calculatePrice(); // update price based on current rate
        return (1 ether);
    }

    function forwardFunds() internal {
        uint fee = shopSettings.price.mul(devFee).div(1000); // used to be msg.value.mul(devFee).div(1000); but we have refactored to only ever issue 1 token and the msg.value may exceed the price of one token
        uint supply = object.totalSupply();

        if (msg.value > shopSettings.price) { // if sender sent extra eth, account for it so we can send it back later
            excessEth[msg.sender] = excessEth[msg.sender].add(msg.value.sub(shopSettings.price));
            totalExcessEth = totalExcessEth.add(msg.value.sub(shopSettings.price));
        }
        
        shopSettings.bank.transfer(fee);
        itemsOwned[msg.sender] = itemsOwned[msg.sender].add(1 ether);
                
        // update caller's balance and our debt
        uint earnings = (itemsOwned[msg.sender].div(1 ether).sub(1)).mul(supply.sub(latestBalanceCheck[msg.sender])).div(1 ether).mul(itemReturn);
        if (latestBalanceCheck[msg.sender] != 0) { // if this isn't the first time we've checked buyer's balance owed...
            balanceOwed[msg.sender] = balanceOwed[msg.sender].add(earnings);
            runningDebt = runningDebt.add(earnings);
        }
        latestBalanceCheck[msg.sender] = supply;
        maxDebt = maxDebt.add((supply.sub(1 ether)).div(1 ether).mul(itemReturn)); // update maxDebt given the new item total

        additionalDebt = maxDebt.sub(runningDebt).sub(debtPaid); // update total debt not yet accounted for due to amoritzation
        
        if (additionalDebt < 0) { // this check may be unnecessary but may have been needed for the prototype
            additionalDebt = 0;
        }
        
        // update price of item (using rate for scalability) so that we can always cover fee + returns
        if (supply.div(1 ether).mul(itemReturn).add(runningDebt).add(additionalDebt) > (this.balance.sub(totalExcessEth))) {
            shopSettings.rate = (1 ether).mul(1 ether).div(supply.div(1 ether).mul(itemReturn).mul(1000).div((uint(1000).sub(devFee))));
            calculatePrice(); // update price
            PriceUpdate(shopSettings.price);
        }

        //EnchantedObjectMinted(supply); // FIX THIS
    }

    /*
    changes needed for refactoring

    // "enchanted items have a recommended bid which increases your likelihood of obtaining the item. However, you will still pay the best possible price—any ETH sent in excess of the lowest available price of the item is automatically added to your account balance and can be withdrawn from the contract at any time."

    // add recommendedBid which is real price rounded up to the next .01 - use round/truncate: https://ethereum.stackexchange.com/questions/5836/what-is-the-cheapest-way-to-roundup-or-ceil-to-multiple-of-1000
    // add price paid - real price to balance owed
    // mint exactly one token (calculateTokens)

    // we don't seem to actually use whenClosed, whenOpen

    */

    function claimFunds() onlyContributors public {
        // must use onlyContributors (itemsOwned > 0) as a check here!
        uint latest = latestBalanceCheck[msg.sender];
        uint supply = object.totalSupply();
        uint balance = balanceOwed[msg.sender];
        uint earnings = itemsOwned[msg.sender].div(1 ether).mul(supply.sub(latest)).div(1 ether).mul(itemReturn);
        
        uint excess = excessEth[msg.sender];

        // update latestBalanceCheck, reset balance owed to caller, and reset excess eth owed to caller
        // do all of these before calling transfer function or incrementing balance mappings so as to circumvent reentrancy attacks
        latestBalanceCheck[msg.sender] = supply;
        balanceOwed[msg.sender] = 0;
        excessEth[msg.sender] = 0;

        balance = balance.add(earnings); // account for user's earnings since lastBalanceCheck, but don't add it to balanceOwed to prevent reentrancy attacks
        // next, update our debt:
        runningDebt = runningDebt.add(earnings);
        runningDebt = runningDebt.sub(balance); // might be going negative due to not adding the excess eth send to runningDebt
        debtPaid = debtPaid.add(balance);

        // account for excess Eth
        balance = balance.add(excess);
        totalExcessEth = totalExcessEth.sub(excess);

        WillWithdraw(balance);

        // finally, send balance owed to msg.sender
        require(balance > 0);
        msg.sender.transfer(balance);
        //totalWithdrawn[msg.sender] = totalWithdrawn[msg.sender].add(balance.sub(excess));

        // might want to return bool
    }

    function startUnlock()
    onlyOwner public
    {
        require(lock && now.sub(unlockDate) > 2 weeks);
        unlockDate = now + 2 weeks;
        lock = false;
        StartedSafeUnlock(now);
    }

    function emergencyWithdraw(uint amount, bool relock)
    onlyOwner public
    {
        require(!lock && now > unlockDate);
        shopSettings.bank.transfer(amount);
        if (relock) {
            lock = relock;
            SafeLocked(now);
        }
    }

}

/*
to-do:
- implement something so that calling claimFunds() if the balance var is 0 throws an exception?

- implement a check if necessary for when balance to be sent to msg.sender > address.balance

- implement an emergency withdrawal function for owners?
    migrate this from ShopManager

- "forwardFunds() in EnchantedShop has to be executed sequentially with other purchases, we may want to implement the design you were talking about before which forces 1 tx per block or whatever it was" -- will know more after testing









    address public bank;
    bool public lock;
    uint public unlockDate;

    event FundsMoved(uint amount);
    event SafeLocked(uint date);
    event StartedSafeUnlock(uint date);
    
    function ShopManager (address _bank) public {
        bank = _bank;
        unlockDate = 0;
        lock = true;
        SafeLocked(now);
    }

    function startUnlock()
    onlyOwner public
    {
        require(lock && now - unlockDate > 2 weeks);
        unlockDate = now + 2 weeks;
        lock = false;
        StartedSafeUnlock(now);
    }

    function fundsToBank()
    onlyOwner public
    {
        require(!lock && now > unlockDate);
        bank.transfer(this.balance);
        lock = true;
        SafeLocked(now);
    }


*/

    Contract ABI  
[{"constant":true,"inputs":[],"name":"additionalDebt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"object","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"itemsOwned","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"latestBalanceCheck","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unlockDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"itemReturn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"originalPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"startUnlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyObject","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeShop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"shopSettings","outputs":[{"name":"bank","type":"address"},{"name":"startTime","type":"uint32"},{"name":"endTime","type":"uint32"},{"name":"fundsRaised","type":"uint256"},{"name":"rate","type":"uint256"},{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"runningDebt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"relock","type":"bool"}],"name":"emergencyWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"debtPaid","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxDebt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalExcessEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"excessEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOwed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_bank","type":"address"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_rate","type":"uint256"},{"name":"_endTime","type":"uint32"},{"name":"_itemReturn","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"wallet","type":"address"},{"indexed":false,"name":"rate","type":"uint256"},{"indexed":false,"name":"itemReturn","type":"uint256"},{"indexed":false,"name":"endTime","type":"uint32"}],"name":"ShopDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"price","type":"uint256"}],"name":"PriceUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"FundsMoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"date","type":"uint256"}],"name":"SafeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"date","type":"uint256"}],"name":"StartedSafeUnlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"WillWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"date","type":"uint32"}],"name":"ShopClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"ObjectPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200001057600080fd5b60405162003c2538038062003c25833981016040528080519060200190919080518201919060200180518201919060200180519060200190919080519060200190919080519060200190919050508585858585336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620000e157600080fd5b60008310151515620000f257600080fd5b428263ffffffff161115156200010757600080fd5b60c0604051908101604052808773ffffffffffffffffffffffffffffffffffffffff1681526020014263ffffffff1681526020018363ffffffff168152602001600081526020018481526020016000815250600260008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548163ffffffff021916908363ffffffff160217905550606082015181600101556080820151816002015560a082015181600301559050506200022f620004b16401000000000262001aa5176401000000009004565b5084846200023c6200056b565b808060200180602001838103835285818151815260200191508051906020019080838360005b838110156200027f57808201518184015260208101905062000262565b50505050905090810190601f168015620002ad5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015620002e8578082015181840152602081019050620002cb565b50505050905090810190601f168015620003165780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f08015156200033457600080fd5b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050620003a36064600260030154620005106401000000000262001a4f179091906401000000009004565b81141515620003b157600080fd5b80600a81905550600260030154600f819055507f71be1851bb7ff5d8237de4de4b82736205ee1d47ca1d2895b92bf33fbacd4ebd86848385604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a160006012819055506001601160006101000a81548160ff0219169083151502179055507fa7bc3cb9591bd9990bb948d3975502affafeef235b08b15eea1bf5be92badff1426040518082815260200191505060405180910390a15050505050506200057c565b6000620005046002800154620004e7670de0b6b3a7640000806200052c6401000000000262001a6a179091906401000000009004565b620005106401000000000262001a4f179091906401000000009004565b60026003018190555090565b60008082848115156200051f57fe5b0490508091505092915050565b600080600084141562000543576000915062000564565b82840290508284828115156200055557fe5b041415156200056057fe5b8091505b5092915050565b604051611b89806200209c83390190565b611b10806200058c6000396000f300606060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d8bb971461013e5780632812988f1461016757806348e1c18b146101bc5780634bdbea2f146102095780636827e7641461025657806369ac57211461027f5780636e9cfb79146102a857806376a24f25146102d15780637baf5b84146102fa578063828f1b421461030f5780638da5cb5b1461033d5780639b6dbc8a14610392578063a52c34c3146103a7578063ac30777314610437578063b1bb5fde1461044c578063bb5b3edc14610475578063cbb04cbd146104a3578063d0064c00146104cc578063d7bea56a146104f5578063db31fb031461051e578063f2fde38b1461056b578063f83d08ba146105a4578063ff9852bf146105d1575b61013c3361061e565b005b341561014957600080fd5b610151610899565b6040518082815260200191505060405180910390f35b341561017257600080fd5b61017a61089f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101c757600080fd5b6101f3600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108c5565b6040518082815260200191505060405180910390f35b341561021457600080fd5b610240600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108dd565b6040518082815260200191505060405180910390f35b341561026157600080fd5b6102696108f5565b6040518082815260200191505060405180910390f35b341561028a57600080fd5b6102926108fa565b6040518082815260200191505060405180910390f35b34156102b357600080fd5b6102bb610900565b6040518082815260200191505060405180910390f35b34156102dc57600080fd5b6102e4610906565b6040518082815260200191505060405180910390f35b341561030557600080fd5b61030d61090c565b005b61033b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061061e565b005b341561034857600080fd5b610350610a04565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561039d57600080fd5b6103a5610a29565b005b34156103b257600080fd5b6103ba610b16565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390f35b341561044257600080fd5b61044a610b80565b005b341561045757600080fd5b61045f610fe5565b6040518082815260200191505060405180910390f35b341561048057600080fd5b6104a160048080359060200190919080351515906020019091905050610feb565b005b34156104ae57600080fd5b6104b6611130565b6040518082815260200191505060405180910390f35b34156104d757600080fd5b6104df611136565b6040518082815260200191505060405180910390f35b341561050057600080fd5b61050861113c565b6040518082815260200191505060405180910390f35b341561052957600080fd5b610555600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611142565b6040518082815260200191505060405180910390f35b341561057657600080fd5b6105a2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061115a565b005b34156105af57600080fd5b6105b76112af565b604051808215151515815260200191505060405180910390f35b34156105dc57600080fd5b610608600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112c2565b6040518082815260200191505060405180910390f35b6000600260030154341015151561063457600080fd5b600260000160149054906101000a900463ffffffff1663ffffffff16421015801561067a5750600260000160189054906101000a900463ffffffff1663ffffffff164211155b8015610687575060003414155b151561069257600080fd5b813373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156106cd57600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561070a57600080fd5b6107126112da565b925061072c346002600101546112f390919063ffffffff16565b600260010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1985856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561080257600080fd5b6102c65a03f1151561081357600080fd5b50505060405180519050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17f6c712ed756d8ee310ddf7fcd41ffcfb4dd5dd9dcbfe8bd92fad7717a6b5cb3486604051808381526020018281526020019250505060405180910390a3610893611311565b50505050565b600d5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b60076020528060005260406000206000915090505481565b607d81565b60125481565b600a5481565b600f5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561096757600080fd5b601160009054906101000a900460ff16801561099957506212750061099760125442611a3690919063ffffffff16565b115b15156109a457600080fd5b6212750042016012819055506000601160006101000a81548160ff0219169083151502179055507f19245155fbfd5d28f967eb8d3965f5a0608252e7acdece34eb2c00919a9f5163426040518082815260200191505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a8457600080fd5b600260000160189054906101000a900463ffffffff1663ffffffff1642101515610aad57600080fd5b42600260000160186101000a81548163ffffffff021916908363ffffffff1602179055507fb567a1e708dab1490bd0e0c66021fec2bd86fa13605874f72415015ad4b31ee642604051808263ffffffff1663ffffffff16815260200191505060405180910390a1565b60028060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900463ffffffff16908060000160189054906101000a900463ffffffff16908060010154908060020154908060030154905086565b600080600080600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111515610bd557600080fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549450600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610ca557600080fd5b6102c65a03f11515610cb657600080fd5b505050604051805190509350600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250610db0600a54610da2670de0b6b3a7640000610d94610d2c8a8a611a3690919063ffffffff16565b610d86670de0b6b3a7640000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b9150600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ed582846112f390919063ffffffff16565b9250610eec82600c546112f390919063ffffffff16565b600c81905550610f0783600c54611a3690919063ffffffff16565b600c81905550610f2283600e546112f390919063ffffffff16565b600e81905550610f3b81846112f390919063ffffffff16565b9250610f5281601054611a3690919063ffffffff16565b6010819055507fb5df3ef832e32a6fad6eb76596d61268bb83567253a51b6b6e24b5f029c87c2e836040518082815260200191505060405180910390a1600083111515610f9e57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501515610fde57600080fd5b5050505050565b600c5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561104657600080fd5b601160009054906101000a900460ff16158015611064575060125442115b151561106f57600080fd5b600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015156110d457600080fd5b801561112c5780601160006101000a81548160ff0219169083151502179055507fa7bc3cb9591bd9990bb948d3975502affafeef235b08b15eea1bf5be92badff1426040518082815260200191505060405180910390a15b5050565b600e5481565b600b5481565b60105481565b60096020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111b557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156111f157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160009054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b60006112e4611aa5565b50670de0b6b3a7640000905090565b600080828401905083811015151561130757fe5b8091505092915050565b60008060006113436103e8611335607d600260030154611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b9250600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156113d357600080fd5b6102c65a03f115156113e457600080fd5b5050506040518051905091506002600301543411156114dc5761146661141860026003015434611a3690919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112f390919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114d56114c460026003015434611a3690919063ffffffff16565b6010546112f390919063ffffffff16565b6010819055505b600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561154157600080fd5b61159b670de0b6b3a7640000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112f390919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116dc600a546116ce670de0b6b3a76400006116c0611645600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205488611a3690919063ffffffff16565b6116b260016116a4670de0b6b3a7640000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a4f90919063ffffffff16565b611a3690919063ffffffff16565b611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b90506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415156117d85761177981600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112f390919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117d181600c546112f390919063ffffffff16565b600c819055505b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611879611868600a5461185a670de0b6b3a764000061184c670de0b6b3a764000088611a3690919063ffffffff16565b611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b600b546112f390919063ffffffff16565b600b819055506118aa600e5461189c600c54600b54611a3690919063ffffffff16565b611a3690919063ffffffff16565b600d819055506000600d5410156118c4576000600d819055505b6118f06010543073ffffffffffffffffffffffffffffffffffffffff1631611a3690919063ffffffff16565b611947600d54611939600c5461192b600a5461191d670de0b6b3a76400008a611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b6112f390919063ffffffff16565b6112f390919063ffffffff16565b1115611a31576119e36119ba611969607d6103e8611a3690919063ffffffff16565b6119ac6103e861199e600a54611990670de0b6b3a76400008a611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b6119d5670de0b6b3a764000080611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b60028001819055506119f3611aa5565b507fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a6002600301546040518082815260200191505060405180910390a15b505050565b6000828211151515611a4457fe5b818303905092915050565b6000808284811515611a5d57fe5b0490508091505092915050565b6000806000841415611a7f5760009150611a9e565b8284029050828482811515611a9057fe5b04141515611a9a57fe5b8091505b5092915050565b6000611ad86002800154611aca670de0b6b3a764000080611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b600260030181905550905600a165627a7a723058205f886375a76a5cb52db71f6ebf0c92c93b9f71d3e47e53224f4e39c7e70e4903002960606040526000600660006101000a81548160ff02191690831515021790555034156200002b57600080fd5b60405162001b8938038062001b898339810160405280805182019190602001805182019190505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160049080519060200190620000ab929190620000cd565b508060059080519060200190620000c4929190620000cd565b5050506200017c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200011057805160ff191683800117855562000141565b8280016001018555821562000141579182015b828111156200014057825182559160200191906001019062000123565b5b50905062000150919062000154565b5090565b6200017991905b80821115620001755760008160009055506001016200015b565b5090565b90565b6119fd806200018c6000396000f3006060604052600436106100f1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d2035b146100f657806306fdde0314610123578063095ea7b3146101b157806318160ddd1461020b57806323b872dd14610234578063313ce567146102ad57806340c10f19146102dc57806342966c6814610336578063661884631461035957806370a08231146103b35780637d64bcb4146104005780638da5cb5b1461042d57806395d89b4114610482578063a9059cbb14610510578063d73dd6231461056a578063dd62ed3e146105c4578063f2fde38b14610630575b600080fd5b341561010157600080fd5b610109610669565b604051808215151515815260200191505060405180910390f35b341561012e57600080fd5b61013661067c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561017657808201518184015260208101905061015b565b50505050905090810190601f1680156101a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101bc57600080fd5b6101f1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061071a565b604051808215151515815260200191505060405180910390f35b341561021657600080fd5b61021e61080c565b6040518082815260200191505060405180910390f35b341561023f57600080fd5b610293600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610812565b604051808215151515815260200191505060405180910390f35b34156102b857600080fd5b6102c0610bd1565b604051808260ff1660ff16815260200191505060405180910390f35b34156102e757600080fd5b61031c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bd6565b604051808215151515815260200191505060405180910390f35b341561034157600080fd5b6103576004808035906020019091905050610dbe565b005b341561036457600080fd5b610399600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f13565b604051808215151515815260200191505060405180910390f35b34156103be57600080fd5b6103ea600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111a4565b6040518082815260200191505060405180910390f35b341561040b57600080fd5b6104136111ed565b604051808215151515815260200191505060405180910390f35b341561043857600080fd5b6104406112b5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561048d57600080fd5b6104956112db565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104d55780820151818401526020810190506104ba565b50505050905090810190601f1680156105025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561051b57600080fd5b610550600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611379565b604051808215151515815260200191505060405180910390f35b341561057557600080fd5b6105aa600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506115bf565b604051808215151515815260200191505060405180910390f35b34156105cf57600080fd5b61061a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506117bb565b6040518082815260200191505060405180910390f35b341561063b57600080fd5b610667600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611842565b005b600660009054906101000a900460ff1681565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b505050505081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561084f57600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561089d57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561092857600080fd5b61097a82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199a90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a0f82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ae182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199a90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c3457600080fd5b600660009054906101000a900460ff16151515610c5057600080fd5b610c65826000546119b390919063ffffffff16565b600081905550610cbd82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610e0e57600080fd5b339050610e6382600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199a90919063ffffffff16565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ebb8260005461199a90919063ffffffff16565b6000819055508073ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a25050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611024576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110b8565b611037838261199a90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561124b57600080fd5b600660009054906101000a900460ff1615151561126757600080fd5b6001600660006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a16001905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113715780601f1061134657610100808354040283529160200191611371565b820191906000526020600020905b81548152906001019060200180831161135457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156113b657600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561140457600080fd5b6000670de0b6b3a76400008381151561141957fe5b0614151561142657600080fd5b61147882600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199a90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061150d82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600061165082600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b390919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561189e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156118da57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008282111515156119a857fe5b818303905092915050565b60008082840190508381101515156119c757fe5b80915050929150505600a165627a7a723058207fa3ef8de074600e8cd200cc3e8758e54c268c210cc8d10b2ee5c0e0972f5df2002900000000000000000000000036770ff967bd05248b1c4c899ffb70caa3391b8400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000005a83da9200000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000846726f6720486174000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000748454c4d37373700000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000036770ff967bd05248b1c4c899ffb70caa3391b84
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [4] : 000000000000000000000000000000000000000000000000000000005a83da92
Arg [5] : 00000000000000000000000000000000000000000000000000038d7ea4c68000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 46726f6720486174000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [9] : 48454c4d37373700000000000000000000000000000000000000000000000000


   Swarm Source:
bzzr://7fa3ef8de074600e8cd200cc3e8758e54c268c210cc8d10b2ee5c0e0972f5df2

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.