contract ReleasableToken is Releasable, HoldableToken {

  //We restrict transfer by overriding it
  function transfer(address to, uint value) public canOperate(msg.sender) returns (bool success) {
   return super.transfer(to, value);
  }

  //We restrict transferFrom by overriding it
  //"from" must be an agent before released
  function transferFrom(address from, address to, uint value) public canOperate(from) returns (bool success) {
    return super.transferFrom(from, to, value);
  }

  //We restrict burn by overriding it
  function burn(uint value) public canOperate(msg.sender) returns (bool success) {
    return super.burn(value);
  }
}
//Define interface for releasing the token transfer after a successful crowdsale.
function transfer(address to, uint value) public canOperate(msg.sender) returns (bool success) {
 return super.transfer(to, value);
}

//We restrict transfer by overriding it