contract ERC20DetailedChangeable is ERC20, Ownable {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    event NameChanged(string oldName, string newName, address changer);
    event SymbolChanged(string oldSymbol, string newSymbol, address changer);

    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

    /**
     * @return the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @return the symbol of the token.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @return the number of decimals of the token.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function setName(string memory newName) public onlyOwner {
        emit NameChanged(_name, newName, msg.sender);
        _name = newName;
    }

    function setSymbol(string memory newSymbol) public onlyOwner {
        emit SymbolChanged(_symbol, newSymbol, msg.sender);
        _symbol = newSymbol;
    }
}
/**
 * @title ERC20DetailedChangeable token
 * @dev Name and symbol can be changed later.
 */
function symbol() public view returns (string memory) {
    return _symbol;
}

/**
 * @return the symbol of the token.
 */