contract TransferAndPause is Ownable {
    event TransferAndPauseRenounced(address account);

    bool private _transferAndPauseEnabled;

    constructor () internal {
        _transferAndPauseEnabled = true;
    }     
 
    /**
     * @return True if the transfer and pause mechanism is enabled, false otherwise.
     */
    function transferAndPauseEnabled() public view returns (bool) {
        return _transferAndPauseEnabled;
    }

    /**
     * @dev Modifier to make a function callable only when the transfer and pause mechanism is not enabled.
     */
    modifier whenTransferAndPauseNotEnabled() {
        require(!_transferAndPauseEnabled);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the transfer and pause mechanism is enabled.
     */
    modifier whenTransferAndPauseEnabled() {
        require(_transferAndPauseEnabled);
        _;
    }

    /**
     * @dev Called by owner to renounce the pausability of transfers.
     */
    function renounceTransferAndPause() public onlyOwner whenTransferAndPauseEnabled {
        _transferAndPauseEnabled = false;
        emit TransferAndPauseRenounced(msg.sender);
    }
}
/**
 * @title TransferAndPause
 * @dev Base contract which allows children to implement transfer and pause.
 */
function transferAndPauseEnabled() public view returns (bool) {
    return _transferAndPauseEnabled;
}

/**
 * @return True if the transfer and pause mechanism is enabled, false otherwise.
 */