abstract contract BurnPausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event BurnPaused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event BurnUnpaused(address account);

    bool private _burnPaused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _burnPaused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function burnPaused() public view virtual returns (bool) {
        return _burnPaused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenBurnNotPaused() {
        require(!burnPaused(), "BurnPausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenBurnPaused() {
        require(burnPaused(), "BurnPausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _burnPause() internal virtual whenBurnNotPaused {
        _burnPaused = true;
        emit BurnPaused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _burnUnpause() internal virtual whenBurnPaused {
        _burnPaused = false;
        emit BurnUnpaused(_msgSender());
    }
}
function burnPaused() public view virtual returns (bool) {
    return _burnPaused;
}

/**
 * @dev Returns true if the contract is paused, and false otherwise.
 */