contract AbstractToken is Ownable, StandardToken {
    string public name;
    string public symbol;
    uint256 public decimals;

    string public value;        // Stable Value
    string public description;  // Description
    string public website;      // Website
    string public email;        // Email
    string public news;         // Latest News
    uint256 public cap;         // Cap Limit


    mapping (address => bool) public mintAgents;  // Mint Agents

    event Mint(address indexed _to, uint256 _amount);
    event MintAgentChanged(address _addr, bool _state);
    event NewsPublished(string _news);


    /**
     * @dev Set Info
     * 
     * @param _description string
     * @param _website string
     * @param _email string
     */
    function setInfo(string _description, string _website, string _email) external onlyOwner returns (bool) {
        description = _description;
        website = _website;
        email = _email;
        return true;
    }

    /**
     * @dev Set News
     * 
     * @param _news string
     */
    function setNews(string _news) external onlyOwner returns (bool) {
        news = _news;
        emit NewsPublished(_news);
        return true;
    }

    /**
     * @dev Set a mint agent address
     * 
     * @param _addr  address  The address that will receive the minted tokens.
     * @param _state bool     The amount of tokens to mint.
     * @return A boolean that indicates if the operation was successful.
     */
    function setMintAgent(address _addr, bool _state) onlyOwner public returns (bool) {
        mintAgents[_addr] = _state;
        emit MintAgentChanged(_addr, _state);
        return true;
    }

    /**
     * @dev Constructor
     */
    constructor() public {
        setMintAgent(msg.sender, true);
    }
}
/**
 * @title Abstract Standard ERC20 token
 */
function setNews(string _news) external onlyOwner returns (bool) {
        news = _news;
        emit NewsPublished(_news);
        return true;
    }
/**
 * @dev Set News
 * 
 * @param _news string
 */