Contract 0xa5Fd1A791C4dfcaacC963D4F73c6Ae5824149eA7 3

 
 
Txn Hash
Method
Block
From
To
Value
0x79af9219c79ce8ce12ade0fbbd02f76a78ce0a890b8d50ca4b2565da245033ccTransfer(pending)2022-08-18 3:54:5620 hrs 13 mins ago0x41612b96c5ab66a3a3cf53ec451076dc72e99443 IN Jibrel Network: Old JNT Token0 Ether(Pending)(Pending)
0xf8f1d5d0de4f470823816671c5e571390afa92d52b03f357eaa1f5d4d9d6f068Transfer(pending)2022-08-18 3:54:5620 hrs 13 mins ago0x41612b96c5ab66a3a3cf53ec451076dc72e99443 IN Jibrel Network: Old JNT Token0 Ether(Pending)(Pending)
0x157cb49af29ce97bba810f3929f1cc0ae383ac82b2eca7be3470bca5dea13362Transfer(pending)2022-08-18 3:54:5620 hrs 13 mins ago0x41612b96c5ab66a3a3cf53ec451076dc72e99443 IN Jibrel Network: Old JNT Token0 Ether(Pending)(Pending)
0xe9fce6110e88acc14938aff7d02f4b7945e5429418cda6cbbc07aa706fb0fcadTransfer147692652022-05-13 19:34:2697 days 4 hrs ago0x73d2516255ddb4c6813a33265f4c50e635b8773e IN  Jibrel Network: Old JNT Token0 Ether0.‍0011980436
0x7bafbc5a24390f760c14fb820828ff72cd6bdebe828bf1eb96d10a7790e3e63aTransfer143616202022-03-10 21:44:16161 days 2 hrs agoHitBTC 3 IN  Jibrel Network: Old JNT Token0 Ether0.‍001071632.‍18901877
0x5b244b34e6b30912ed0a727ef40eda70499e41eaf3f712225ad6ff2147e7bdf9Transfer143615442022-03-10 21:27:13161 days 2 hrs agoHitBTC 3 IN  Jibrel Network: Old JNT Token0 Ether0.‍0013887141.‍7143825
0x5e5f3b59da20dfe0e79ed6402ef87002825b273e79027323455a27ddd37f5cbeTransfer141483542022-02-05 21:20:59194 days 2 hrs ago0xfd03e76afa140f442a1b3eaf7b9af1461f61b59c IN  Jibrel Network: Old JNT Token0 Ether0.‍00417663 125.‍54881559
0x3daf569d87926f945b351574b9a18ece8a518f0decd8700ed36e55475c56842fTransfer141483462022-02-05 21:19:10194 days 2 hrs ago0xfd03e76afa140f442a1b3eaf7b9af1461f61b59c IN  Jibrel Network: Old JNT Token0 Ether0.‍00370972 111.‍47339965
0x34546019ff57d992c6320fe5ee701cf49156d9250054888685ecaf264c262075Transfer139312812022-01-03 7:52:13227 days 16 hrs agoKuCoin 3 IN  Jibrel Network: Old JNT Token0 Ether0.‍00426165128.‍42888723
0x18cfe3e24d863ec94029dc6c634b6a9dcb6579ad3d466e93e26ccca8049558ebTransfer138860242021-12-27 7:52:30234 days 16 hrs agoKuCoin 3 IN  Jibrel Network: Old JNT Token0 Ether0.‍0020340761.‍29864151
0x3bb1b469ad30e0d3234747116a913e07074af21fd61833996a70099a080b8f07Transfer137514002021-12-06 9:06:49255 days 15 hrs ago0x76717d2ff873c0e762f1dd60d273c1b908ae9825 IN  Jibrel Network: Old JNT Token0 Ether0.‍0030450291.‍5
0xfd26c72ca34e12288041b897ba1df8a39a79c6b86ed7a497a78a5f32652e3c78Transfer137513862021-12-06 9:04:25255 days 15 hrs ago0x76717d2ff873c0e762f1dd60d273c1b908ae9825 IN  Jibrel Network: Old JNT Token0 Ether0.‍0030616692
0xec265b9feb0fe429f94d78dafeb30c13e80af8c0187810ac81b54c3ba19a42e0Transfer135929322021-11-11 4:53:34280 days 19 hrs ago0x3e868c0a44074da84749d91c172dbc2b11097a9d IN  Jibrel Network: Old JNT Token0 Ether0.‍00448972192
0x22aae2b750e4c38ce8c83262e9ccdf0b2d4d3a63dcbe911e8ebff7d61890ee67Transfer135929152021-11-11 4:49:35280 days 19 hrs ago0x3e868c0a44074da84749d91c172dbc2b11097a9d IN  Jibrel Network: Old JNT Token0 Ether0.‍00360468155
0xeb63c26039d177b5fec70b2d9fc7c30c7f521f60b19c8b263006b6513c790262Transfer135231782021-10-31 6:15:23291 days 17 hrs ago0x7b69ec1ea9a3178a1ec3109d5e44a61be9d5e5a7 IN  Jibrel Network: Old JNT Token0 Ether0.‍00430998129.‍60424189
0x5a87a15d2d1b7e35dfb483b5bfca14378744e10d367dd4605cd4a19148ce4d6eTransfer134738882021-10-23 12:54:57299 days 11 hrs ago0x36d3066691b397a2dc1d642a4162fecb76fa7148 IN  Jibrel Network: Old JNT Token0 Ether0.‍0011248433.‍8125
0x7f8d16a3f885e2e28cf1e9b8d713067a031623c0c431970b53e8f267d982602cTransfer133677602021-10-06 21:11:15316 days 2 hrs ago0x53f231fc7315ba600f377705b6068477ff349f47 IN  Jibrel Network: Old JNT Token0 Ether0.‍00499185150
0x8f542e9e129462a2b8b31ccb20ecfd70f277f3af6b2d715a753470873b5dbe15Transfer133019192021-09-26 14:33:42326 days 9 hrs ago0xc29b63070b9740a589bcbe6d0f7438a60b2ace77 IN  Jibrel Network: Old JNT Token0 Ether0.‍0011039133.‍15954229
0x7c5ffe7b63654982d1b8e705908a073ad21ed6a641348cdd18ec898f381db695Transfer132985382021-09-26 1:35:26326 days 22 hrs ago0xd60b3f7fff21b47f53c412f3c20ea55dd851419c IN  Jibrel Network: Old JNT Token0 Ether0.‍0013187939.‍6
0xd238f389880ec88305a3abb274163f18f8b1b606c20adb9e3f09c13e93250ba8Transfer132980602021-09-25 23:43:46327 days 25 mins ago0xdf3bd504cb681e635d983caadc9a53e365a71112 IN  Jibrel Network: Old JNT Token0 Ether0.‍0008719226.‍20041545
0x6c084acd5acffb7412575261d0a0b8eb86704adb915d4113a2a77b207e0d0295Transfer132977172021-09-25 22:36:43327 days 1 hr ago0xdf3bd504cb681e635d983caadc9a53e365a71112 IN  Jibrel Network: Old JNT Token0 Ether0.‍0010032330.‍14626754
0xf7901ab2ae4fdb6865e795ed0afbec1a05373b024e6d0e03c7b74f629392dd45Transfer132945782021-09-25 11:00:17327 days 13 hrs ago0xb61a0a7c9b87a214814cc776825b8639d0748527 IN  Jibrel Network: Old JNT Token0 Ether0.‍0009053927.‍19635366
0x9b6d88e286e06bc9477e22219f5711cce4c84b0d7cb298639e03d6c0885418efTransfer130585382021-08-19 22:49:24364 days 1 hr ago0x2e2fb1b9cc6f2c4a61816d8b0d4c985b66b4d83a IN  Jibrel Network: Old JNT Token0 Ether0.‍0009584328.‍8
0xbcc1fc544c4ffaf76416862efbd95c3ad3129f639863b4157d0e4c132dc93762Transfer129159562021-07-28 18:24:59386 days 5 hrs ago0xf5500712669f566c4bc902ac1d912708bbc95d25 IN  Jibrel Network: Old JNT Token0 Ether0.‍0011714235.‍2000016
0xfafe5278ebcad74b8962e06c8c7cdab262f3795afb2c1b42c85de84949918968Approve128565552021-07-19 10:46:01395 days 13 hrs ago0x99b1d3506f9356540e456620d1fadf7e511b4fcc IN  Jibrel Network: Old JNT Token0 Ether0.‍0004273613
[ Download CSV Export 

OVERVIEW

Jibrel Network Token contract has migrated to 0x0AeE8703D34DD9aE107386d3eFF22AE75Dd616D.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JNTViewERC20

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-12-15
*/

/* Author: Victor Mezrin  [email protected] */

pragma solidity ^0.4.18;



/**
 * @title CommonModifiers
 * @dev Base contract which contains common checks.
 */
contract CommonModifiersInterface {

  /**
   * @dev Assemble the given address bytecode. If bytecode exists then the _addr is a contract.
   */
  function isContract(address _targetAddress) internal constant returns (bool);

  /**
   * @dev modifier to allow actions only when the _targetAddress is a contract.
   */
  modifier onlyContractAddress(address _targetAddress) {
    require(isContract(_targetAddress) == true);
    _;
  }
}



/**
 * @title CommonModifiers
 * @dev Base contract which contains common checks.
 */
contract CommonModifiers is CommonModifiersInterface {

  /**
   * @dev Assemble the given address bytecode. If bytecode exists then the _addr is a contract.
   */
  function isContract(address _targetAddress) internal constant returns (bool) {
    require (_targetAddress != address(0x0));

    uint256 length;
    assembly {
      //retrieve the size of the code on target address, this needs assembly
      length := extcodesize(_targetAddress)
    }
    return (length > 0);
  }
}



/**
 * @title AssetIDInterface
 * @dev Interface of a contract that assigned to an asset (JNT, jUSD etc.)
 * @dev Contracts for the same asset (like JNT, jUSD etc.) will have the same AssetID.
 * @dev This will help to avoid misconfiguration of contracts
 */
contract AssetIDInterface {
  function getAssetID() public constant returns (string);
  function getAssetIDHash() public constant returns (bytes32);
}



/**
 * @title AssetID
 * @dev Base contract implementing AssetIDInterface
 */
contract AssetID is AssetIDInterface {

  /* Storage */

  string assetID;


  /* Constructor */

  function AssetID(string _assetID) public {
    require(bytes(_assetID).length > 0);

    assetID = _assetID;
  }


  /* Getters */

  function getAssetID() public constant returns (string) {
    return assetID;
  }

  function getAssetIDHash() public constant returns (bytes32) {
    return keccak256(assetID);
  }
}



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

  /**
   * @dev The getter for "owner" contract variable
   */
  function getOwner() public constant returns (address);

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



/**
 * @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 is OwnableInterface {

  /* Storage */

  address owner = address(0x0);
  address proposedOwner = address(0x0);


  /* Events */

  event OwnerAssignedEvent(address indexed newowner);
  event OwnershipOfferCreatedEvent(address indexed currentowner, address indexed proposedowner);
  event OwnershipOfferAcceptedEvent(address indexed currentowner, address indexed proposedowner);
  event OwnershipOfferCancelledEvent(address indexed currentowner, address indexed proposedowner);


  /**
   * @dev The constructor sets the initial `owner` to the passed account.
   */
  function Ownable() public {
    owner = msg.sender;

    OwnerAssignedEvent(owner);
  }


  /**
   * @dev Old owner requests transfer ownership to the new owner.
   * @param _proposedOwner The address to transfer ownership to.
   */
  function createOwnershipOffer(address _proposedOwner) external onlyOwner {
    require (proposedOwner == address(0x0));
    require (_proposedOwner != address(0x0));
    require (_proposedOwner != address(this));

    proposedOwner = _proposedOwner;

    OwnershipOfferCreatedEvent(owner, _proposedOwner);
  }


  /**
   * @dev Allows the new owner to accept an ownership offer to contract control.
   */
  //noinspection UnprotectedFunction
  function acceptOwnershipOffer() external {
    require (proposedOwner != address(0x0));
    require (msg.sender == proposedOwner);

    address _oldOwner = owner;
    owner = proposedOwner;
    proposedOwner = address(0x0);

    OwnerAssignedEvent(owner);
    OwnershipOfferAcceptedEvent(_oldOwner, owner);
  }


  /**
   * @dev Old owner cancels transfer ownership to the new owner.
   */
  function cancelOwnershipOffer() external {
    require (proposedOwner != address(0x0));
    require (msg.sender == owner || msg.sender == proposedOwner);

    address _oldProposedOwner = proposedOwner;
    proposedOwner = address(0x0);

    OwnershipOfferCancelledEvent(owner, _oldProposedOwner);
  }


  /**
   * @dev The getter for "owner" contract variable
   */
  function getOwner() public constant returns (address) {
    return owner;
  }

  /**
   * @dev The getter for "proposedOwner" contract variable
   */
  function getProposedOwner() public constant returns (address) {
    return proposedOwner;
  }
}



/**
 * @title ManageableInterface
 * @dev Contract that allows to grant permissions to any address
 * @dev In real life we are no able to perform all actions with just one Ethereum address
 * @dev because risks are too high.
 * @dev Instead owner delegates rights to manage an contract to the different addresses and
 * @dev stay able to revoke permissions at any time.
 */
contract ManageableInterface {

  /**
   * @dev Function to check if the manager can perform the action or not
   * @param _manager        address Manager`s address
   * @param _permissionName string  Permission name
   * @return True if manager is enabled and has been granted needed permission
   */
  function isManagerAllowed(address _manager, string _permissionName) public constant returns (bool);

  /**
   * @dev Modifier to use in derived contracts
   */
  modifier onlyAllowedManager(string _permissionName) {
    require(isManagerAllowed(msg.sender, _permissionName) == true);
    _;
  }
}



contract Manageable is OwnableInterface,
                       ManageableInterface {

  /* Storage */

  mapping (address => bool) managerEnabled;  // hard switch for a manager - on/off
  mapping (address => mapping (string => bool)) managerPermissions;  // detailed info about manager`s permissions


  /* Events */

  event ManagerEnabledEvent(address indexed manager);
  event ManagerDisabledEvent(address indexed manager);
  event ManagerPermissionGrantedEvent(address indexed manager, string permission);
  event ManagerPermissionRevokedEvent(address indexed manager, string permission);


  /* Configure contract */

  /**
   * @dev Function to add new manager
   * @param _manager address New manager
   */
  function enableManager(address _manager) external onlyOwner onlyValidManagerAddress(_manager) {
    require(managerEnabled[_manager] == false);

    managerEnabled[_manager] = true;
    ManagerEnabledEvent(_manager);
  }

  /**
   * @dev Function to remove existing manager
   * @param _manager address Existing manager
   */
  function disableManager(address _manager) external onlyOwner onlyValidManagerAddress(_manager) {
    require(managerEnabled[_manager] == true);

    managerEnabled[_manager] = false;
    ManagerDisabledEvent(_manager);
  }

  /**
   * @dev Function to grant new permission to the manager
   * @param _manager        address Existing manager
   * @param _permissionName string  Granted permission name
   */
  function grantManagerPermission(
    address _manager, string _permissionName
  )
    external
    onlyOwner
    onlyValidManagerAddress(_manager)
    onlyValidPermissionName(_permissionName)
  {
    require(managerPermissions[_manager][_permissionName] == false);

    managerPermissions[_manager][_permissionName] = true;
    ManagerPermissionGrantedEvent(_manager, _permissionName);
  }

  /**
   * @dev Function to revoke permission of the manager
   * @param _manager        address Existing manager
   * @param _permissionName string  Revoked permission name
   */
  function revokeManagerPermission(
    address _manager, string _permissionName
  )
    external
    onlyOwner
    onlyValidManagerAddress(_manager)
    onlyValidPermissionName(_permissionName)
  {
    require(managerPermissions[_manager][_permissionName] == true);

    managerPermissions[_manager][_permissionName] = false;
    ManagerPermissionRevokedEvent(_manager, _permissionName);
  }


  /* Getters */

  /**
   * @dev Function to check manager status
   * @param _manager address Manager`s address
   * @return True if manager is enabled
   */
  function isManagerEnabled(
    address _manager
  )
    public
    constant
    onlyValidManagerAddress(_manager)
    returns (bool)
  {
    return managerEnabled[_manager];
  }

  /**
   * @dev Function to check permissions of a manager
   * @param _manager        address Manager`s address
   * @param _permissionName string  Permission name
   * @return True if manager has been granted needed permission
   */
  function isPermissionGranted(
    address _manager, string _permissionName
  )
    public
    constant
    onlyValidManagerAddress(_manager)
    onlyValidPermissionName(_permissionName)
    returns (bool)
  {
    return managerPermissions[_manager][_permissionName];
  }

  /**
   * @dev Function to check if the manager can perform the action or not
   * @param _manager        address Manager`s address
   * @param _permissionName string  Permission name
   * @return True if manager is enabled and has been granted needed permission
   */
  function isManagerAllowed(
    address _manager, string _permissionName
  )
    public
    constant
    onlyValidManagerAddress(_manager)
    onlyValidPermissionName(_permissionName)
    returns (bool)
  {
    return (managerEnabled[_manager] && managerPermissions[_manager][_permissionName]);
  }


  /* Helpers */

  /**
   * @dev Modifier to check manager address
   */
  modifier onlyValidManagerAddress(address _manager) {
    require(_manager != address(0x0));
    _;
  }

  /**
   * @dev Modifier to check name of manager permission
   */
  modifier onlyValidPermissionName(string _permissionName) {
    require(bytes(_permissionName).length != 0);
    _;
  }
}



/**
 * @title PausableInterface
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 * @dev Based on zeppelin's Pausable, but integrated with Manageable
 * @dev Contract is in paused state by default and should be explicitly unlocked
 */
contract PausableInterface {

  /**
   * Events
   */

  event PauseEvent();
  event UnpauseEvent();


  /**
   * @dev called by the manager to pause, triggers stopped state
   */
  function pauseContract() public;

  /**
   * @dev called by the manager to unpause, returns to normal state
   */
  function unpauseContract() public;

  /**
   * @dev The getter for "paused" contract variable
   */
  function getPaused() public constant returns (bool);


  /**
   * @dev modifier to allow actions only when the contract IS paused
   */
  modifier whenContractNotPaused() {
    require(getPaused() == false);
    _;
  }

  /**
   * @dev modifier to allow actions only when the contract IS NOT paused
   */
  modifier whenContractPaused {
    require(getPaused() == true);
    _;
  }
}



/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 * @dev Based on zeppelin's Pausable, but integrated with Manageable
 * @dev Contract is in paused state by default and should be explicitly unlocked
 */
contract Pausable is ManageableInterface,
                     PausableInterface {

  /**
   * Storage
   */

  bool paused = true;


  /**
   * @dev called by the manager to pause, triggers stopped state
   */
  function pauseContract() public onlyAllowedManager('pause_contract') whenContractNotPaused {
    paused = true;
    PauseEvent();
  }

  /**
   * @dev called by the manager to unpause, returns to normal state
   */
  function unpauseContract() public onlyAllowedManager('unpause_contract') whenContractPaused {
    paused = false;
    UnpauseEvent();
  }

  /**
   * @dev The getter for "paused" contract variable
   */
  function getPaused() public constant returns (bool) {
    return paused;
  }
}



/**
 * @title BytecodeExecutorInterface interface
 * @dev Implementation of a contract that execute any bytecode on behalf of the contract
 * @dev Last resort for the immutable and not-replaceable contract :)
 */
contract BytecodeExecutorInterface {

  /* Events */

  event CallExecutedEvent(address indexed target,
                          uint256 suppliedGas,
                          uint256 ethValue,
                          bytes32 transactionBytecodeHash);
  event DelegatecallExecutedEvent(address indexed target,
                                  uint256 suppliedGas,
                                  bytes32 transactionBytecodeHash);


  /* Functions */

  function executeCall(address _target, uint256 _suppliedGas, uint256 _ethValue, bytes _transactionBytecode) external;
  function executeDelegatecall(address _target, uint256 _suppliedGas, bytes _transactionBytecode) external;
}



/**
 * @title BytecodeExecutor
 * @dev Implementation of a contract that execute any bytecode on behalf of the contract
 * @dev Last resort for the immutable and not-replaceable contract :)
 */
contract BytecodeExecutor is ManageableInterface,
                             BytecodeExecutorInterface {

  /* Storage */

  bool underExecution = false;


  /* BytecodeExecutorInterface */

  function executeCall(
    address _target,
    uint256 _suppliedGas,
    uint256 _ethValue,
    bytes _transactionBytecode
  )
    external
    onlyAllowedManager('execute_call')
  {
    require(underExecution == false);

    underExecution = true; // Avoid recursive calling
    _target.call.gas(_suppliedGas).value(_ethValue)(_transactionBytecode);
    underExecution = false;

    CallExecutedEvent(_target, _suppliedGas, _ethValue, keccak256(_transactionBytecode));
  }

  function executeDelegatecall(
    address _target,
    uint256 _suppliedGas,
    bytes _transactionBytecode
  )
    external
    onlyAllowedManager('execute_delegatecall')
  {
    require(underExecution == false);

    underExecution = true; // Avoid recursive calling
    _target.delegatecall.gas(_suppliedGas)(_transactionBytecode);
    underExecution = false;

    DelegatecallExecutedEvent(_target, _suppliedGas, keccak256(_transactionBytecode));
  }
}





/**
 * @title CrydrControllerERC20Interface interface
 * @dev Interface of a contract that implement business-logic of an ERC20 CryDR
 */
contract CrydrControllerERC20Interface {

  /* ERC20 support. _msgsender - account that invoked CrydrView */

  function transfer(address _msgsender, address _to, uint256 _value) public;
  function getTotalSupply() public constant returns (uint256);
  function getBalance(address _owner) public constant returns (uint256);

  function approve(address _msgsender, address _spender, uint256 _value) public;
  function transferFrom(address _msgsender, address _from, address _to, uint256 _value) public;
  function getAllowance(address _owner, address _spender) public constant returns (uint256);
}





contract CrydrViewBaseInterface {

  /* Events */

  event CrydrControllerChangedEvent(address indexed crydrcontroller);


  /* Configuration */

  function setCrydrController(address _crydrController) external;
  function getCrydrController() public constant returns (address);

  function getCrydrViewStandardName() public constant returns (string);
  function getCrydrViewStandardNameHash() public constant returns (bytes32);
}



contract CrydrViewBase is CommonModifiersInterface,
                          AssetIDInterface,
                          ManageableInterface,
                          PausableInterface,
                          CrydrViewBaseInterface {

  /* Storage */

  address crydrController = address(0x0);
  string crydrViewStandardName = '';


  /* Constructor */

  function CrydrViewBase(string _crydrViewStandardName) public {
    require(bytes(_crydrViewStandardName).length > 0);

    crydrViewStandardName = _crydrViewStandardName;
  }


  /* CrydrViewBaseInterface */

  function setCrydrController(
    address _crydrController
  )
    external
    onlyContractAddress(_crydrController)
    onlyAllowedManager('set_crydr_controller')
    whenContractPaused
  {
    require(crydrController != _crydrController);

    crydrController = _crydrController;
    CrydrControllerChangedEvent(_crydrController);
  }

  function getCrydrController() public constant returns (address) {
    return crydrController;
  }


  function getCrydrViewStandardName() public constant returns (string) {
    return crydrViewStandardName;
  }

  function getCrydrViewStandardNameHash() public constant returns (bytes32) {
    return keccak256(crydrViewStandardName);
  }


  /* PausableInterface */

  /**
   * @dev Override method to ensure that contract properly configured before it is unpaused
   */
  function unpauseContract() public {
    require(isContract(crydrController) == true);
    require(getAssetIDHash() == AssetIDInterface(crydrController).getAssetIDHash());

    super.unpauseContract();
  }
}



/**
 * @title CrydrViewERC20Interface
 * @dev ERC20 interface to use in applications
 */
contract CrydrViewERC20Interface {
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);

  function transfer(address _to, uint256 _value) external returns (bool);
  function totalSupply() external constant returns (uint256);
  function balanceOf(address _owner) external constant returns (uint256);

  function approve(address _spender, uint256 _value) external returns (bool);
  function transferFrom(address _from, address _to, uint256 _value) external returns (bool);
  function allowance(address _owner, address _spender) external constant returns (uint256);
}



contract CrydrViewERC20 is PausableInterface,
                           CrydrViewBaseInterface,
                           CrydrViewERC20Interface {

  /* ERC20Interface */

  function transfer(
    address _to,
    uint256 _value
  )
    external
    whenContractNotPaused
    onlyPayloadSize(2 * 32)
    returns (bool)
  {
    CrydrControllerERC20Interface(getCrydrController()).transfer(msg.sender, _to, _value);
    return true;
  }

  function totalSupply() external constant returns (uint256) {
    return CrydrControllerERC20Interface(getCrydrController()).getTotalSupply();
  }

  function balanceOf(address _owner) external constant onlyPayloadSize(1 * 32) returns (uint256) {
    return CrydrControllerERC20Interface(getCrydrController()).getBalance(_owner);
  }


  function approve(
    address _spender,
    uint256 _value
  )
    external
    whenContractNotPaused
    onlyPayloadSize(2 * 32)
    returns (bool)
  {
    CrydrControllerERC20Interface(getCrydrController()).approve(msg.sender, _spender, _value);
    return true;
  }

  function transferFrom(
    address _from,
    address _to,
    uint256 _value
  )
    external
    whenContractNotPaused
    onlyPayloadSize(3 * 32)
    returns (bool)
  {
    CrydrControllerERC20Interface(getCrydrController()).transferFrom(msg.sender, _from, _to, _value);
    return true;
  }

  function allowance(
    address _owner,
    address _spender
  )
    external
    constant
    onlyPayloadSize(2 * 32)
    returns (uint256)
  {
    return CrydrControllerERC20Interface(getCrydrController()).getAllowance(_owner, _spender);
  }


  /* Helpers */

  /**
   * @dev Fix for the ERC20 short address attack.
   */
  modifier onlyPayloadSize(uint256 size) {
    require(msg.data.length == (size + 4));
    _;
  }
}



/**
 * @title CrydrViewERC20LoggableInterface
 * @dev Contract is able to create Transfer/Approval events with the cal from controller
 */
contract CrydrViewERC20LoggableInterface {

  function emitTransferEvent(address _from, address _to, uint256 _value) external;
  function emitApprovalEvent(address _owner, address _spender, uint256 _value) external;
}



contract CrydrViewERC20Loggable is PausableInterface,
                                   CrydrViewBaseInterface,
                                   CrydrViewERC20Interface,
                                   CrydrViewERC20LoggableInterface {

  function emitTransferEvent(
    address _from,
    address _to,
    uint256 _value
  )
    external
  {
    require(msg.sender == getCrydrController());

    Transfer(_from, _to, _value);
  }

  function emitApprovalEvent(
    address _owner,
    address _spender,
    uint256 _value
  )
    external
  {
    require(msg.sender == getCrydrController());

    Approval(_owner, _spender, _value);
  }
}



/**
 * @title CrydrViewERC20MintableInterface
 * @dev Contract is able to create Mint/Burn events with the cal from controller
 */
contract CrydrViewERC20MintableInterface {
  event MintEvent(address indexed owner, uint256 value);
  event BurnEvent(address indexed owner, uint256 value);

  function emitMintEvent(address _owner, uint256 _value) external;
  function emitBurnEvent(address _owner, uint256 _value) external;
}



contract CrydrViewERC20Mintable is PausableInterface,
                                   CrydrViewBaseInterface,
                                   CrydrViewERC20MintableInterface {

  function emitMintEvent(
    address _owner,
    uint256 _value
  )
    external
  {
    require(msg.sender == getCrydrController());

    MintEvent(_owner, _value);
  }

  function emitBurnEvent(
    address _owner,
    uint256 _value
  )
    external
  {
    require(msg.sender == getCrydrController());

    BurnEvent(_owner, _value);
  }
}



/**
 * @title CrydrViewERC20NamedInterface
 * @dev Contract is able to set name/symbol/decimals
 */
contract CrydrViewERC20NamedInterface {

  function name() external constant returns (string);
  function symbol() external constant returns (string);
  function decimals() external constant returns (uint8);

  function getNameHash() external constant returns (bytes32);
  function getSymbolHash() external constant returns (bytes32);

  function setName(string _name) external;
  function setSymbol(string _symbol) external;
  function setDecimals(uint8 _decimals) external;
}



contract CrydrViewERC20Named is ManageableInterface,
                                PausableInterface,
                                CrydrViewERC20NamedInterface {

  /* Storage */

  string tokenName = '';
  string tokenSymbol = '';
  uint8 tokenDecimals = 0;


  /* Constructor */

  function CrydrViewERC20Named(string _name, string _symbol, uint8 _decimals) public {
    require(bytes(_name).length > 0);
    require(bytes(_symbol).length > 0);

    tokenName = _name;
    tokenSymbol = _symbol;
    tokenDecimals = _decimals;
  }


  /* CrydrViewERC20NamedInterface */

  function name() external constant returns (string) {
    return tokenName;
  }

  function symbol() external constant returns (string) {
    return tokenSymbol;
  }

  function decimals() external constant returns (uint8) {
    return tokenDecimals;
  }


  function getNameHash() external constant returns (bytes32){
    return keccak256(tokenName);
  }

  function getSymbolHash() external constant returns (bytes32){
    return keccak256(tokenSymbol);
  }


  function setName(
    string _name
  )
    external
    whenContractPaused
    onlyAllowedManager('set_crydr_name')
  {
    require(bytes(_name).length > 0);

    tokenName = _name;
  }

  function setSymbol(
    string _symbol
  )
    external
    whenContractPaused
    onlyAllowedManager('set_crydr_symbol')
  {
    require(bytes(_symbol).length > 0);

    tokenSymbol = _symbol;
  }

  function setDecimals(
    uint8 _decimals
  )
    external
    whenContractPaused
    onlyAllowedManager('set_crydr_decimals')
  {
    tokenDecimals = _decimals;
  }
}



contract JCashCrydrViewERC20 is CommonModifiers,
                                AssetID,
                                Ownable,
                                Manageable,
                                Pausable,
                                BytecodeExecutor,
                                CrydrViewBase,
                                CrydrViewERC20,
                                CrydrViewERC20Loggable,
                                CrydrViewERC20Mintable,
                                CrydrViewERC20Named {

  function JCashCrydrViewERC20(string _assetID, string _name, string _symbol, uint8 _decimals)
    public
    AssetID(_assetID)
    CrydrViewBase('erc20')
    CrydrViewERC20Named(_name, _symbol, _decimals)
  { }
}



contract JNTViewERC20 is JCashCrydrViewERC20 {
  function JNTViewERC20() public JCashCrydrViewERC20('JNT', 'Jibrel Network Token', 'JNT', 18) {}
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_manager","type":"address"},{"name":"_permissionName","type":"string"}],"name":"isManagerAllowed","outputs":[{"name":"","type":"bool"}],"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":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"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":"cancelOwnershipOffer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCrydrViewStandardNameHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_crydrController","type":"address"}],"name":"setCrydrController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_manager","type":"address"},{"name":"_permissionName","type":"string"}],"name":"isPermissionGranted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pauseContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"enableManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getPaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAssetID","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSymbolHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","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":"_decimals","type":"uint8"}],"name":"setDecimals","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"},{"name":"_permissionName","type":"string"}],"name":"revokeManagerPermission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCrydrViewStandardName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"},{"name":"_permissionName","type":"string"}],"name":"grantManagerPermission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_suppliedGas","type":"uint256"},{"name":"_ethValue","type":"uint256"},{"name":"_transactionBytecode","type":"bytes"}],"name":"executeCall","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_value","type":"uint256"}],"name":"emitMintEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_proposedOwner","type":"address"}],"name":"createOwnershipOffer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_manager","type":"address"}],"name":"isManagerEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"emitTransferEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAssetIDHash","outputs":[{"name":"","type":"bytes32"}],"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":false,"inputs":[],"name":"unpauseContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCrydrController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_suppliedGas","type":"uint256"},{"name":"_transactionBytecode","type":"bytes"}],"name":"executeDelegatecall","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"disableManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNameHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getProposedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_value","type":"uint256"}],"name":"emitBurnEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"emitApprovalEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnershipOffer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"MintEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"BurnEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"crydrcontroller","type":"address"}],"name":"CrydrControllerChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"suppliedGas","type":"uint256"},{"indexed":false,"name":"ethValue","type":"uint256"},{"indexed":false,"name":"transactionBytecodeHash","type":"bytes32"}],"name":"CallExecutedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"suppliedGas","type":"uint256"},{"indexed":false,"name":"transactionBytecodeHash","type":"bytes32"}],"name":"DelegatecallExecutedEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"PauseEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"UnpauseEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"manager","type":"address"}],"name":"ManagerEnabledEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"manager","type":"address"}],"name":"ManagerDisabledEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"manager","type":"address"},{"indexed":false,"name":"permission","type":"string"}],"name":"ManagerPermissionGrantedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"manager","type":"address"},{"indexed":false,"name":"permission","type":"string"}],"name":"ManagerPermissionRevokedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newowner","type":"address"}],"name":"OwnerAssignedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"currentowner","type":"address"},{"indexed":true,"name":"proposedowner","type":"address"}],"name":"OwnershipOfferCreatedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"currentowner","type":"address"},{"indexed":true,"name":"proposedowner","type":"address"}],"name":"OwnershipOfferAcceptedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"currentowner","type":"address"},{"indexed":true,"name":"proposedowner","type":"address"}],"name":"OwnershipOfferCancelledEvent","type":"event"}]

60606040526000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560006101000a81548160ff0219169083151502179055506000600560016101000a81548160ff0219169083151502179055506000600560026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060206040519081016040528060008152506006908051906020019062000128929190620003f9565b5060206040519081016040528060008152506007908051906020019062000151929190620003f9565b506020604051908101604052806000815250600890805190602001906200017a929190620003f9565b506000600960006101000a81548160ff021916908360ff1602179055503415620001a357600080fd5b6040805190810160405280600381526020017f4a4e5400000000000000000000000000000000000000000000000000000000008152506040805190810160405280601481526020017f4a696272656c204e6574776f726b20546f6b656e0000000000000000000000008152506040805190810160405280600381526020017f4a4e54000000000000000000000000000000000000000000000000000000000081525060128282826040805190810160405280600581526020017f657263323000000000000000000000000000000000000000000000000000000081525087600081511115156200029257600080fd5b8060009080519060200190620002aa929190620003f9565b505033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8d2a41ca5ff551a8f68510de75177b7d56e6019c8579b5509d2be1bb41a0d0af60405160405180910390a2600081511115156200036357600080fd5b80600690805190602001906200037b929190620003f9565b5050600083511115156200038e57600080fd5b600082511115156200039f57600080fd5b8260079080519060200190620003b7929190620003f9565b508160089080519060200190620003d0929190620003f9565b5080600960006101000a81548160ff021916908360ff16021790555050505050505050620004a8565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200043c57805160ff19168380011785556200046d565b828001600101855582156200046d579182015b828111156200046c5782518255916020019190600101906200044f565b5b5090506200047c919062000480565b5090565b620004a591905b80821115620004a157600081600090555060010162000487565b5090565b90565b61364f80620004b86000396000f3006060604052600436106101f9576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630392d2b4146101fe57806306fdde0314610292578063095ea7b31461032057806318160ddd1461037a5780631eb96a5c146103a3578063230f6e83146103b857806323b872dd146103e9578063305f17d514610462578063313ce5671461049b57806332a2fda7146104ca578063439766ce1461055e5780635ca5b334146105735780636805b84b146105ac578063696b5fb7146105d95780636ea928d91461066757806370a08231146106985780637a1395aa146106e55780637c0efb8b1461070b5780637c6fb02a14610758578063822b08d0146107e6578063893d20e8146108335780638ba7e57014610888578063958689d7146108e757806395d89b41146109295780639739db9d146109b75780639b53d87c146109f0578063a6d49dca14610a41578063a773d98a14610aa2578063a9059cbb14610ad3578063b33712c514610b2d578063b84c824614610b42578063c47f002714610b70578063ca9c286214610b9e578063d2b7d95714610bf3578063d4859dc514610c49578063dd62ed3e14610c82578063e102d95014610cee578063eae5a62d14610d1f578063ed810cfa14610d74578063f23b6fa214610db6578063f538534514610e17575b600080fd5b341561020957600080fd5b610278600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610e2c565b604051808215151515815260200191505060405180910390f35b341561029d57600080fd5b6102a5610f92565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102e55780820151818401526020810190506102ca565b50505050905090810190601f1680156103125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561032b57600080fd5b610360600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061103a565b604051808215151515815260200191505060405180910390f35b341561038557600080fd5b61038d611168565b6040518082815260200191505060405180910390f35b34156103ae57600080fd5b6103b66111fd565b005b34156103c357600080fd5b6103cb6113f6565b60405180826000191660001916815260200191505060405180910390f35b34156103f457600080fd5b610448600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611467565b604051808215151515815260200191505060405180910390f35b341561046d57600080fd5b610499600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115ca565b005b34156104a657600080fd5b6104ae611738565b604051808260ff1660ff16815260200191505060405180910390f35b34156104d557600080fd5b610544600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061174f565b604051808215151515815260200191505060405180910390f35b341561056957600080fd5b610571611860565b005b341561057e57600080fd5b6105aa600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611916565b005b34156105b757600080fd5b6105bf611a92565b604051808215151515815260200191505060405180910390f35b34156105e457600080fd5b6105ec611aa9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561062c578082015181840152602081019050610611565b50505050905090810190601f1680156106595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561067257600080fd5b61067a611b51565b60405180826000191660001916815260200191505060405180910390f35b34156106a357600080fd5b6106cf600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611bc2565b6040518082815260200191505060405180910390f35b34156106f057600080fd5b610709600480803560ff16906020019091905050611ca8565b005b341561071657600080fd5b610756600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192905050611d33565b005b341561076357600080fd5b61076b611f61565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107ab578082015181840152602081019050610790565b50505050905090810190601f1680156107d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156107f157600080fd5b610831600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192905050612009565b005b341561083e57600080fd5b610846612237565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561089357600080fd5b6108e5600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919080359060200190919080359060200190820180359060200191909192905050612261565b005b34156108f257600080fd5b610927600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506123d6565b005b341561093457600080fd5b61093c612469565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561097c578082015181840152602081019050610961565b50505050905090810190601f1680156109a95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156109c257600080fd5b6109ee600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612511565b005b34156109fb57600080fd5b610a27600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506126e6565b604051808215151515815260200191505060405180910390f35b3415610a4c57600080fd5b610aa0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061277a565b005b3415610aad57600080fd5b610ab5612825565b60405180826000191660001916815260200191505060405180910390f35b3415610ade57600080fd5b610b13600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612895565b604051808215151515815260200191505060405180910390f35b3415610b3857600080fd5b610b406129c3565b005b3415610b4d57600080fd5b610b6e60048080359060200190820180359060200191909192905050612acf565b005b3415610b7b57600080fd5b610b9c60048080359060200190820180359060200191909192905050612b64565b005b3415610ba957600080fd5b610bb1612bf9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610bfe57600080fd5b610c47600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919080359060200190820180359060200191909192905050612c23565b005b3415610c5457600080fd5b610c80600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d8c565b005b3415610c8d57600080fd5b610cd8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612f08565b6040518082815260200191505060405180910390f35b3415610cf957600080fd5b610d01613023565b60405180826000191660001916815260200191505060405180910390f35b3415610d2a57600080fd5b610d32613094565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610d7f57600080fd5b610db4600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506130be565b005b3415610dc157600080fd5b610e15600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050613151565b005b3415610e2257600080fd5b610e2a6131fc565b005b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610e6b57600080fd5b826000815114151515610e7d57600080fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610f885750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020846040518082805190602001908083835b602083101515610f465780518252602082019150602081019050602083039250610f21565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff165b9250505092915050565b610f9a61356a565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110305780601f1061100557610100808354040283529160200191611030565b820191906000526020600020905b81548152906001019060200180831161101357829003601f168201915b5050505050905090565b6000801515611047611a92565b151514151561105557600080fd5b604060048101600036905014151561106c57600080fd5b611074612bf9565b73ffffffffffffffffffffffffffffffffffffffff1663e1f21c673386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b151561114957600080fd5b6102c65a03f1151561115a57600080fd5b505050600191505092915050565b6000611172612bf9565b73ffffffffffffffffffffffffffffffffffffffff1663c4e41b226000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156111dd57600080fd5b6102c65a03f115156111ee57600080fd5b50505060405180519050905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561125c57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113055750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561131057600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f223225995c0c0965e8752fd93ca10aba4bafcbca26f31b1565955adb68e76bda60405160405180910390a350565b6000600660405180828054600181600116156101000203166002900480156114555780601f10611433576101008083540402835291820191611455565b820191906000526020600020905b815481529060010190602001808311611441575b50509150506040518091039020905090565b6000801515611474611a92565b151514151561148257600080fd5b606060048101600036905014151561149957600080fd5b6114a1612bf9565b73ffffffffffffffffffffffffffffffffffffffff166315dacbea338787876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15156115aa57600080fd5b6102c65a03f115156115bb57600080fd5b50505060019150509392505050565b80600115156115d882613465565b15151415156115e657600080fd5b6040805190810160405280601481526020017f7365745f63727964725f636f6e74726f6c6c65720000000000000000000000008152506001151561162a3383610e2c565b151514151561163857600080fd5b60011515611644611a92565b151514151561165257600080fd5b8273ffffffffffffffffffffffffffffffffffffffff16600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156116af57600080fd5b82600560026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f95e43e6707a0436b5cc3af93d12042ce56df5ec4fe857d77836fe6316dc8457060405160405180910390a2505050565b6000600960009054906101000a900460ff16905090565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561178e57600080fd5b8260008151141515156117a057600080fd5b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020846040518082805190602001908083835b60208310151561181557805182526020820191506020810190506020830392506117f0565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff169250505092915050565b6040805190810160405280600e81526020017f70617573655f636f6e7472616374000000000000000000000000000000000000815250600115156118a43383610e2c565b15151415156118b257600080fd5b600015156118be611a92565b15151415156118cc57600080fd5b6001600560006101000a81548160ff0219169083151502179055507f14cc32b2b0edca88201ca20553c392d108a2feb2c750a0ee14c707b4f34fbee260405160405180910390a150565b61191e612237565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561195757600080fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561199457600080fd5b60001515600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415156119f357600080fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f7f0b61f78ab0b549b68ce61404f4ee01a26ffdf8d421d099d271d789aaea3a8e60405160405180910390a25050565b6000600560009054906101000a900460ff16905090565b611ab161356a565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b475780601f10611b1c57610100808354040283529160200191611b47565b820191906000526020600020905b815481529060010190602001808311611b2a57829003601f168201915b5050505050905090565b600060086040518082805460018160011615610100020316600290048015611bb05780601f10611b8e576101008083540402835291820191611bb0565b820191906000526020600020905b815481529060010190602001808311611b9c575b50509150506040518091039020905090565b60006020600481016000369050141515611bdb57600080fd5b611be3612bf9565b73ffffffffffffffffffffffffffffffffffffffff1663f8b2cb4f846000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611c8557600080fd5b6102c65a03f11515611c9657600080fd5b50505060405180519050915050919050565b60011515611cb4611a92565b1515141515611cc257600080fd5b6040805190810160405280601281526020017f7365745f63727964725f646563696d616c73000000000000000000000000000081525060011515611d063383610e2c565b1515141515611d1457600080fd5b81600960006101000a81548160ff021916908360ff1602179055505050565b611d3b612237565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d7457600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611db157600080fd5b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506000815114151515611df557600080fd5b60011515600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060009054906101000a900460ff161515141515611e7757600080fd5b6000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060006101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff167fe2b13fa06e3428fe0e43b2e517d25708ba477cafdff4fbcd06e3e93864517ddc8585604051808060200182810382528484828181526020019250808284378201915050935050505060405180910390a25050505050565b611f6961356a565b60068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fff5780601f10611fd457610100808354040283529160200191611fff565b820191906000526020600020905b815481529060010190602001808311611fe257829003601f168201915b5050505050905090565b612011612237565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561204a57600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561208757600080fd5b82828080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505060008151141515156120cb57600080fd5b60001515600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060009054906101000a900460ff16151514151561214d57600080fd5b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060006101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff167fb76b4ee2621e0744da93fa797bdc4851a3b9e303b2950f2f234a449e5f36d35e8585604051808060200182810382528484828181526020019250808284378201915050935050505060405180910390a25050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040805190810160405280600c81526020017f657865637574655f63616c6c0000000000000000000000000000000000000000815250600115156122a53383610e2c565b15151415156122b357600080fd5b60001515600560019054906101000a900460ff1615151415156122d557600080fd5b6001600560016101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff168585858560405180838380828437820191505092505050600060405180830381858888f19350505050506000600560016101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff167f376185a1f1832ecd7ffd6a421a54d437594db00f80f6122e8534d19d978b65b686868686604051808383808284378201915050925050506040518091039020604051808481526020018381526020018260001916600019168152602001935050505060405180910390a2505050505050565b6123de612bf9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561241757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff167f3fffaa5804a26fcec0d70b1d0fb0a2d0031df3a5f9c8af2127c2f4360e97b463826040518082815260200191505060405180910390a25050565b61247161356a565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125075780601f106124dc57610100808354040283529160200191612507565b820191906000526020600020905b8154815290600101906020018083116124ea57829003601f168201915b5050505050905090565b612519612237565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561255257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156125af57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156125eb57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561262657600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0c5d18b25c2665dfeec8ea7956663ec48f079fdd04799ddd335f2fdce1a9fceb60405160405180910390a350565b600081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561272557600080fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050919050565b612782612bf9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127bb57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008060405180828054600181600116156101000203166002900480156128835780601f10612861576101008083540402835291820191612883565b820191906000526020600020905b81548152906001019060200180831161286f575b50509150506040518091039020905090565b60008015156128a2611a92565b15151415156128b057600080fd5b60406004810160003690501415156128c757600080fd5b6128cf612bf9565b73ffffffffffffffffffffffffffffffffffffffff1663beabacc83386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15156129a457600080fd5b6102c65a03f115156129b557600080fd5b505050600191505092915050565b600115156129f2600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613465565b1515141515612a0057600080fd5b600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a773d98a6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612a8e57600080fd5b6102c65a03f11515612a9f57600080fd5b5050506040518051905060001916612ab5612825565b60001916141515612ac557600080fd5b612acd6134b4565b565b60011515612adb611a92565b1515141515612ae957600080fd5b6040805190810160405280601081526020017f7365745f63727964725f73796d626f6c0000000000000000000000000000000081525060011515612b2d3383610e2c565b1515141515612b3b57600080fd5b600083839050111515612b4d57600080fd5b828260089190612b5e92919061357e565b50505050565b60011515612b70611a92565b1515141515612b7e57600080fd5b6040805190810160405280600e81526020017f7365745f63727964725f6e616d6500000000000000000000000000000000000081525060011515612bc23383610e2c565b1515141515612bd057600080fd5b600083839050111515612be257600080fd5b828260079190612bf392919061357e565b50505050565b6000600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040805190810160405280601481526020017f657865637574655f64656c656761746563616c6c00000000000000000000000081525060011515612c673383610e2c565b1515141515612c7557600080fd5b60001515600560019054906101000a900460ff161515141515612c9757600080fd5b6001600560016101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff16848484604051808383808284378201915050925050506000604051808303818686f492505050506000600560016101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff167ffd9a51b5876c403362d350caaea2a99618ed2c0b3eb601e0ab04606616e671888585856040518083838082843782019150509250505060405180910390206040518083815260200182600019166000191681526020019250505060405180910390a25050505050565b612d94612237565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612dcd57600080fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612e0a57600080fd5b60011515600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515612e6957600080fd5b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f91975e22df3ba360814d3153e8eaef17954cf47d52a42840fc9747ad1086b35160405160405180910390a25050565b60006040600481016000369050141515612f2157600080fd5b612f29612bf9565b73ffffffffffffffffffffffffffffffffffffffff16630af4187d85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1515612fff57600080fd5b6102c65a03f1151561301057600080fd5b5050506040518051905091505092915050565b6000600760405180828054600181600116156101000203166002900480156130825780601f10613060576101008083540402835291820191613082565b820191906000526020600020905b81548152906001019060200180831161306e575b50509150506040518091039020905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6130c6612bf9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130ff57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff167f512586160ebd4dc6945ba9ec5d21a1f723f26f3c7aa36cdffb6818d4e7b88030826040518082815260200191505060405180910390a25050565b613159612bf9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561319257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561325b57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156132b757600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8d2a41ca5ff551a8f68510de75177b7d56e6019c8579b5509d2be1bb41a0d0af60405160405180910390a2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3912b3f6ff73ee5d4cd2894666c349dec2d3d2ed7dc6d35c28c5eabf105a88d860405160405180910390a350565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156134a457600080fd5b823b905060008111915050919050565b6040805190810160405280601081526020017f756e70617573655f636f6e747261637400000000000000000000000000000000815250600115156134f83383610e2c565b151514151561350657600080fd5b60011515613512611a92565b151514151561352057600080fd5b6000600560006101000a81548160ff0219169083151502179055507f6249a5c797c884cbf33e63e8cfc250816032db24e22051de68a388315e64afc660405160405180910390a150565b602060405190810160405280600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106135bf57803560ff19168380011785556135ed565b828001600101855582156135ed579182015b828111156135ec5782358255916020019190600101906135d1565b5b5090506135fa91906135fe565b5090565b61362091905b8082111561361c576000816000905550600101613604565b5090565b905600a165627a7a72305820ec674e8d64e700bcb0909d4673514f7a296d8f89c8b59f5af0c4157895cdd18e0029

Swarm Source

bzzr://ec674e8d64e700bcb0909d4673514f7a296d8f89c8b59f5af0c4157895cdd18e
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.