abstract contract ERC20BurnableWithFinish is Ownable, ERC20Burnable {

    event LogBurnFinished();

    // Flag indicating if Custom Token burning has been permanently finished or not.
    bool public burningFinished;

    modifier canBurn() {
        require(!burningFinished, "burning finished");
        _;
    }

    /**
    * @dev Stop burning new tokens.
    * @return true if the operation was successful.
    */
    function finishBurning() public onlyOwner canBurn returns(bool) {
        burningFinished = true;
        emit LogBurnFinished();
        return true;
    }

    function burn(uint256 amount) public override virtual canBurn {
        super.burn(amount);
    }

    function burnFrom(address account, uint256 amount) public override virtual canBurn {
        super.burnFrom(account, amount);
    }

}
function finishBurning() public onlyOwner canBurn returns(bool) {
    burningFinished = true;
    emit LogBurnFinished();
    return true;
}

/**
 * @dev Stop burning new tokens.
 * @return true if the operation was successful.
 */