contract Mest is MintableToken {
  string public constant name = "Monaco Estate";
  string public constant symbol = "MEST";
  uint8 public constant decimals = 18;
 
  address public admin=0x6bfc645b3fd135f14eed944922157c41dcc5e9ab;
 event Pause();
 event Unpause();
 event AdminAccessTransferred(address indexed admin, address indexed newAdmin);

  bool public paused = true;

 // modifier to allow only owner has full control on the function
    modifier onlyAdmin {
        require(msg.sender == admin);
        _;
    }
  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

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

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

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

  /**
   * @dev Allows the current admin to transfer control of the contract to a newAdmin.
   * @param newAdmin The address to transfer Admin to.
   */
  function changeAdmin(address newAdmin) public onlyAdmin {
    require(newAdmin != address(0));
    AdminAccessTransferred(admin, newAdmin);
    admin = newAdmin;
  }
 /**
  * @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) whenNotPaused 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 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) whenNotPaused 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;
  }




}
function pause() onlyAdmin whenNotPaused public {
  paused = true;
  Pause();
}

/**
 * @dev called by the owner to pause, triggers stopped state
 */