contract SingleCreatorDigitalMediaCore is DigitalMediaCore {
    event SingleCreatorChanged(
        address indexed previousCreatorAddress, 
        address indexed newCreatorAddress);

    constructor (string memory _tokenName, string memory _tokenSymbol, address _creatorAddress,
            address _crsAddress) DigitalMediaCore(
                _tokenName, _tokenSymbol, _crsAddress) {
        require(_creatorAddress != address(0), "creator address cant be 0");
        singleCreatorAddress = _creatorAddress;
    }

    /**
     * A publicly accessible function that allows the current single creator
     * assigned to this contract to change to another address.
     */
    function changeSingleCreator(address _newCreatorAddress) external {
        require(_newCreatorAddress != address(0) &&
            singleCreatorAddress != address(0) &&
            msg.sender == singleCreatorAddress, "Not approved to change single creator");
        singleCreatorAddress = _newCreatorAddress;
        emit SingleCreatorChanged(singleCreatorAddress, _newCreatorAddress);
    }
}
function changeSingleCreator(address _newCreatorAddress) external {
    require(_newCreatorAddress != address(0) &&
        singleCreatorAddress != address(0) &&
        msg.sender == singleCreatorAddress, "Not approved to change single creator");
    singleCreatorAddress = _newCreatorAddress;
    emit SingleCreatorChanged(singleCreatorAddress, _newCreatorAddress);
}

/**
 * A publicly accessible function that allows the current single creator
 * assigned to this contract to change to another address.
 */