diff --git a/AdvancedSettingsDialog.cpp b/AdvancedSettingsDialog.cpp new file mode 100644 index 0000000..ceb1cdb --- /dev/null +++ b/AdvancedSettingsDialog.cpp @@ -0,0 +1,118 @@ +#include "AdvancedSettingsDialog.h" +#include "ui_AdvancedSettingsDialog.h" +#include +#include +#include +#include + +AdvancedSettingsDialog::AdvancedSettingsDialog(QWidget *parent) + : QDialog(parent), + ui(new Ui::AdvancedSettingsDialog) +{ + ui->setupUi(this); +} + +AdvancedSettingsDialog::~AdvancedSettingsDialog() +{ + delete ui; +} + +QString AdvancedSettingsDialog::getJsonTemplate() const +{ + return ui->jsonTemplateEdit->toPlainText(); +} + +QString AdvancedSettingsDialog::getAceStepPath() const +{ + return ui->aceStepPathEdit->text(); +} + +QString AdvancedSettingsDialog::getQwen3ModelPath() const +{ + return ui->qwen3ModelEdit->text(); +} + +QString AdvancedSettingsDialog::getTextEncoderModelPath() const +{ + return ui->textEncoderEdit->text(); +} + +QString AdvancedSettingsDialog::getDiTModelPath() const +{ + return ui->ditModelEdit->text(); +} + +QString AdvancedSettingsDialog::getVAEModelPath() const +{ + return ui->vaeModelEdit->text(); +} + +void AdvancedSettingsDialog::setJsonTemplate(const QString &templateStr) +{ + ui->jsonTemplateEdit->setPlainText(templateStr); +} + +void AdvancedSettingsDialog::setAceStepPath(const QString &path) +{ + ui->aceStepPathEdit->setText(path); +} + +void AdvancedSettingsDialog::setQwen3ModelPath(const QString &path) +{ + ui->qwen3ModelEdit->setText(path); +} + +void AdvancedSettingsDialog::setTextEncoderModelPath(const QString &path) +{ + ui->textEncoderEdit->setText(path); +} + +void AdvancedSettingsDialog::setDiTModelPath(const QString &path) +{ + ui->ditModelEdit->setText(path); +} + +void AdvancedSettingsDialog::setVAEModelPath(const QString &path) +{ + ui->vaeModelEdit->setText(path); +} + +void AdvancedSettingsDialog::on_aceStepBrowseButton_clicked() +{ + QString dir = QFileDialog::getExistingDirectory(this, "Select AceStep Build Directory", ui->aceStepPathEdit->text()); + if (!dir.isEmpty()) { + ui->aceStepPathEdit->setText(dir); + } +} + +void AdvancedSettingsDialog::on_qwen3BrowseButton_clicked() +{ + QString file = QFileDialog::getOpenFileName(this, "Select Qwen3 Model", ui->qwen3ModelEdit->text(), "GGUF Files (*.gguf)"); + if (!file.isEmpty()) { + ui->qwen3ModelEdit->setText(file); + } +} + +void AdvancedSettingsDialog::on_textEncoderBrowseButton_clicked() +{ + QString file = QFileDialog::getOpenFileName(this, "Select Text Encoder Model", ui->textEncoderEdit->text(), "GGUF Files (*.gguf)"); + if (!file.isEmpty()) { + ui->textEncoderEdit->setText(file); + } +} + +void AdvancedSettingsDialog::on_ditBrowseButton_clicked() +{ + QString file = QFileDialog::getOpenFileName(this, "Select DiT Model", ui->ditModelEdit->text(), "GGUF Files (*.gguf)"); + if (!file.isEmpty()) { + ui->ditModelEdit->setText(file); + } +} + +void AdvancedSettingsDialog::on_vaeBrowseButton_clicked() +{ + QString file = QFileDialog::getOpenFileName(this, "Select VAE Model", ui->vaeModelEdit->text(), "GGUF Files (*.gguf)"); + if (!file.isEmpty()) { + ui->vaeModelEdit->setText(file); + } +} \ No newline at end of file diff --git a/AdvancedSettingsDialog.h b/AdvancedSettingsDialog.h new file mode 100644 index 0000000..be7b873 --- /dev/null +++ b/AdvancedSettingsDialog.h @@ -0,0 +1,46 @@ +#ifndef ADVANCEDSETTINGSDIALOG_H +#define ADVANCEDSETTINGSDIALOG_H + +#include +#include + +namespace Ui { +class AdvancedSettingsDialog; +} + +class AdvancedSettingsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AdvancedSettingsDialog(QWidget *parent = nullptr); + ~AdvancedSettingsDialog(); + + // Getters for settings + QString getJsonTemplate() const; + QString getAceStepPath() const; + QString getQwen3ModelPath() const; + QString getTextEncoderModelPath() const; + QString getDiTModelPath() const; + QString getVAEModelPath() const; + + // Setters for settings + void setJsonTemplate(const QString &templateStr); + void setAceStepPath(const QString &path); + void setQwen3ModelPath(const QString &path); + void setTextEncoderModelPath(const QString &path); + void setDiTModelPath(const QString &path); + void setVAEModelPath(const QString &path); + +private slots: + void on_aceStepBrowseButton_clicked(); + void on_qwen3BrowseButton_clicked(); + void on_textEncoderBrowseButton_clicked(); + void on_ditBrowseButton_clicked(); + void on_vaeBrowseButton_clicked(); + +private: + Ui::AdvancedSettingsDialog *ui; +}; + +#endif // ADVANCEDSETTINGSDIALOG_H \ No newline at end of file diff --git a/AdvancedSettingsDialog.ui b/AdvancedSettingsDialog.ui new file mode 100644 index 0000000..41d49a6 --- /dev/null +++ b/AdvancedSettingsDialog.ui @@ -0,0 +1,203 @@ + + + AdvancedSettingsDialog + + + + 0 + 0 + 600 + 450 + + + + Advanced Settings + + + + + + 0 + + + + JSON Template + + + + + + JSON Template for AceStep generation: + + + true + + + + + + + + + + + Model Paths + + + + QFormLayout::FieldGrowthPolicy::AllNonFixedFieldsGrow + + + + + AceStep Path: + + + + + + + + + + + + Browse... + + + + + + + + + Qwen3 Model: + + + + + + + + + + + + Browse... + + + + + + + + + Text Encoder Model: + + + + + + + + + + + + Browse... + + + + + + + + + DiT Model: + + + + + + + + + + + + Browse... + + + + + + + + + VAE Model: + + + + + + + + + + + + Browse... + + + + + + + + + + + + + QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Save + + + + + + + + + buttonBox + accepted() + AdvancedSettingsDialog + accept() + + + 248 + 254 + + + 157 + 254 + + + + + buttonBox + rejected() + AdvancedSettingsDialog + reject() + + + 316 + 260 + + + 286 + 260 + + + + + diff --git a/CMakeLists.txt b/CMakeLists.txt index d72d698..f33dd35 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,8 @@ add_executable(${PROJECT_NAME} main.cpp MainWindow.ui MainWindow.cpp + AdvancedSettingsDialog.ui + AdvancedSettingsDialog.cpp SongDialog.ui SongDialog.cpp SongListModel.cpp diff --git a/MainWindow.cpp b/MainWindow.cpp index 7fcdee0..e686bbc 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -1,18 +1,15 @@ #include "MainWindow.h" #include "ui_MainWindow.h" #include "SongDialog.h" +#include "AdvancedSettingsDialog.h" #include #include #include #include #include #include -#include #include #include -#include -#include -#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -215,14 +212,6 @@ void MainWindow::on_stopButton_clicked() } } -void MainWindow::on_positionSlider_sliderMoved(int position) -{ - if (isPlaying && audioPlayer->isPlaying()) { - // Seek to the new position when slider is moved - audioPlayer->setPosition(position); - } -} - void MainWindow::on_shuffleButton_clicked() { shuffleMode = ui->shuffleButton->isChecked(); @@ -291,138 +280,34 @@ void MainWindow::on_removeSongButton_clicked() void MainWindow::on_advancedSettingsButton_clicked() { - // Create a dialog for advanced settings - QDialog dialog(this); - dialog.setWindowTitle("Advanced Settings"); - dialog.resize(600, 400); + AdvancedSettingsDialog dialog(this); - QVBoxLayout *layout = new QVBoxLayout(&dialog); + // Set current values + dialog.setJsonTemplate(jsonTemplate); + dialog.setAceStepPath(aceStepPath); + dialog.setQwen3ModelPath(qwen3ModelPath); + dialog.setTextEncoderModelPath(textEncoderModelPath); + dialog.setDiTModelPath(ditModelPath); + dialog.setVAEModelPath(vaeModelPath); - // Tab widget for organized settings - QTabWidget *tabWidget = new QTabWidget(&dialog); - layout->addWidget(tabWidget); - - // JSON Template tab - QWidget *jsonTab = new QWidget(); - QVBoxLayout *jsonLayout = new QVBoxLayout(jsonTab); - - QLabel *jsonLabel = new QLabel("JSON Template for AceStep generation:"); - jsonLabel->setWordWrap(true); - jsonLayout->addWidget(jsonLabel); - - QTextEdit *jsonTemplateEdit = new QTextEdit(); - jsonTemplateEdit->setPlainText(jsonTemplate); - jsonTemplateEdit->setMinimumHeight(200); - jsonLayout->addWidget(jsonTemplateEdit); - - tabWidget->addTab(jsonTab, "JSON Template"); - - // Path Settings tab - QWidget *pathsTab = new QWidget(); - QFormLayout *pathsLayout = new QFormLayout(pathsTab); - pathsLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow); - - QLineEdit *aceStepPathEdit = new QLineEdit(aceStepPath); - QPushButton *aceStepBrowseBtn = new QPushButton("Browse..."); - connect(aceStepBrowseBtn, &QPushButton::clicked, [this, aceStepPathEdit]() { - QString dir = QFileDialog::getExistingDirectory(this, "Select AceStep Build Directory", aceStepPathEdit->text()); - if (!dir.isEmpty()) { - aceStepPathEdit->setText(dir); - } - }); - - QHBoxLayout *aceStepLayout = new QHBoxLayout(); - aceStepLayout->addWidget(aceStepPathEdit); - aceStepLayout->addWidget(aceStepBrowseBtn); - pathsLayout->addRow("AceStep Path:", aceStepLayout); - - QLineEdit *qwen3ModelEdit = new QLineEdit(qwen3ModelPath); - QPushButton *qwen3BrowseBtn = new QPushButton("Browse..."); - connect(qwen3BrowseBtn, &QPushButton::clicked, [this, qwen3ModelEdit]() { - QString file = QFileDialog::getOpenFileName(this, "Select Qwen3 Model", qwen3ModelEdit->text(), "GGUF Files (*.gguf)"); - if (!file.isEmpty()) { - qwen3ModelEdit->setText(file); - } - }); - - QHBoxLayout *qwen3Layout = new QHBoxLayout(); - qwen3Layout->addWidget(qwen3ModelEdit); - qwen3Layout->addWidget(qwen3BrowseBtn); - pathsLayout->addRow("Qwen3 Model:", qwen3Layout); - - QLineEdit *textEncoderEdit = new QLineEdit(textEncoderModelPath); - QPushButton *textEncoderBrowseBtn = new QPushButton("Browse..."); - connect(textEncoderBrowseBtn, &QPushButton::clicked, [this, textEncoderEdit]() { - QString file = QFileDialog::getOpenFileName(this, "Select Text Encoder Model", textEncoderEdit->text(), "GGUF Files (*.gguf)"); - if (!file.isEmpty()) { - textEncoderEdit->setText(file); - } - }); - - QHBoxLayout *textEncoderLayout = new QHBoxLayout(); - textEncoderLayout->addWidget(textEncoderEdit); - textEncoderLayout->addWidget(textEncoderBrowseBtn); - pathsLayout->addRow("Text Encoder Model:", textEncoderLayout); - - QLineEdit *ditModelEdit = new QLineEdit(ditModelPath); - QPushButton *ditModelBrowseBtn = new QPushButton("Browse..."); - connect(ditModelBrowseBtn, &QPushButton::clicked, [this, ditModelEdit]() { - QString file = QFileDialog::getOpenFileName(this, "Select DiT Model", ditModelEdit->text(), "GGUF Files (*.gguf)"); - if (!file.isEmpty()) { - ditModelEdit->setText(file); - } - }); - - QHBoxLayout *ditModelLayout = new QHBoxLayout(); - ditModelLayout->addWidget(ditModelEdit); - ditModelLayout->addWidget(ditModelBrowseBtn); - pathsLayout->addRow("DiT Model:", ditModelLayout); - - QLineEdit *vaeModelEdit = new QLineEdit(vaeModelPath); - QPushButton *vaeModelBrowseBtn = new QPushButton("Browse..."); - connect(vaeModelBrowseBtn, &QPushButton::clicked, [this, vaeModelEdit]() { - QString file = QFileDialog::getOpenFileName(this, "Select VAE Model", vaeModelEdit->text(), "GGUF Files (*.gguf)"); - if (!file.isEmpty()) { - vaeModelEdit->setText(file); - } - }); - - QHBoxLayout *vaeModelLayout = new QHBoxLayout(); - vaeModelLayout->addWidget(vaeModelEdit); - vaeModelLayout->addWidget(vaeModelBrowseBtn); - pathsLayout->addRow("VAE Model:", vaeModelLayout); - - tabWidget->addTab(pathsTab, "Model Paths"); - - // Buttons - QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Cancel); - layout->addWidget(buttonBox); - - connect(buttonBox, &QDialogButtonBox::accepted, [&dialog, this, jsonTemplateEdit, aceStepPathEdit, qwen3ModelEdit, textEncoderEdit, ditModelEdit, vaeModelEdit]() { + if (dialog.exec() == QDialog::Accepted) { // Validate JSON template QJsonParseError parseError; - QJsonDocument doc = QJsonDocument::fromJson(jsonTemplateEdit->toPlainText().toUtf8(), &parseError); + QJsonDocument doc = QJsonDocument::fromJson(dialog.getJsonTemplate().toUtf8(), &parseError); if (!doc.isObject()) { QMessageBox::warning(this, "Invalid JSON", "Please enter valid JSON: " + QString(parseError.errorString())); return; } // Update settings - jsonTemplate = jsonTemplateEdit->toPlainText(); - aceStepPath = aceStepPathEdit->text(); - qwen3ModelPath = qwen3ModelEdit->text(); - textEncoderModelPath = textEncoderEdit->text(); - ditModelPath = ditModelEdit->text(); - vaeModelPath = vaeModelEdit->text(); + jsonTemplate = dialog.getJsonTemplate(); + aceStepPath = dialog.getAceStepPath(); + qwen3ModelPath = dialog.getQwen3ModelPath(); + textEncoderModelPath = dialog.getTextEncoderModelPath(); + ditModelPath = dialog.getDiTModelPath(); + vaeModelPath = dialog.getVAEModelPath(); saveSettings(); - dialog.accept(); - }); - - connect(buttonBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); - - // Show the dialog - if (dialog.exec() == QDialog::Accepted) { QMessageBox::information(this, "Settings Saved", "Advanced settings have been saved successfully."); } } @@ -526,3 +411,11 @@ void MainWindow::updatePlaybackStatus(bool playing) isPlaying = playing; updateControls(); } + +void MainWindow::on_positionSlider_sliderMoved(int position) +{ + if (isPlaying && audioPlayer->isPlaying()) { + // Seek to the new position when slider is moved + audioPlayer->setPosition(position); + } +} \ No newline at end of file diff --git a/MainWindow.ui b/MainWindow.ui new file mode 100644 index 0000000..0fa9d09 --- /dev/null +++ b/MainWindow.ui @@ -0,0 +1,239 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + Music Generator GUI + + + + + + + Music Generator + + + Qt::AlignCenter + + + + + + + + + 0 + 200 + + + + QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed + + + + + + + + + Add Song + + + + + + + Edit Song + + + + + + + Remove Song + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0:00 + + + + + + + Qt::Horizontal + + + + + + + 0:00 + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Play + + + + .. + + + + + + + + Pause + + + + .. + + + + + + + + Skip + + + + .. + + + + + + + + Stop + + + + .. + + + + + + + + Shuffle + + + true + + + + .. + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + + + + + + + Ready + + + + + + + + + + + 0 + 0 + 800 + 22 + + + + + Settings + + + + + + + + + Advanced Settings... + + + + + + diff --git a/SongDialog.cpp b/SongDialog.cpp new file mode 100644 index 0000000..c941434 --- /dev/null +++ b/SongDialog.cpp @@ -0,0 +1,50 @@ +#include "SongDialog.h" +#include "ui_SongDialog.h" +#include + +SongDialog::SongDialog(QWidget *parent, const QString &caption, const QString &lyrics) + : QDialog(parent), + ui(new Ui::SongDialog) +{ + ui->setupUi(this); + + // Set initial values if provided + if (!caption.isEmpty()) { + ui->captionEdit->setPlainText(caption); + } + if (!lyrics.isEmpty()) { + ui->lyricsEdit->setPlainText(lyrics); + } +} + +SongDialog::~SongDialog() +{ + delete ui; +} + +QString SongDialog::getCaption() const +{ + return ui->captionEdit->toPlainText(); +} + +QString SongDialog::getLyrics() const +{ + return ui->lyricsEdit->toPlainText(); +} + +void SongDialog::on_okButton_clicked() +{ + // Validate that caption is not empty + QString caption = getCaption(); + if (caption.trimmed().isEmpty()) { + QMessageBox::warning(this, "Invalid Input", "Caption cannot be empty."); + return; + } + + accept(); +} + +void SongDialog::on_cancelButton_clicked() +{ + reject(); +} \ No newline at end of file diff --git a/SongDialog.h b/SongDialog.h new file mode 100644 index 0000000..126de2f --- /dev/null +++ b/SongDialog.h @@ -0,0 +1,30 @@ +#ifndef SONGDIALOG_H +#define SONGDIALOG_H + +#include +#include + +namespace Ui { +class SongDialog; +} + +class SongDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SongDialog(QWidget *parent = nullptr, const QString &caption = "", const QString &lyrics = ""); + ~SongDialog(); + + QString getCaption() const; + QString getLyrics() const; + +private slots: + void on_okButton_clicked(); + void on_cancelButton_clicked(); + +private: + Ui::SongDialog *ui; +}; + +#endif // SONGDIALOG_H \ No newline at end of file diff --git a/SongDialog.ui b/SongDialog.ui new file mode 100644 index 0000000..21d96e0 --- /dev/null +++ b/SongDialog.ui @@ -0,0 +1,92 @@ + + + SongDialog + + + + 0 + 0 + 500 + 400 + + + + Song Details + + + + + + Caption: + + + Qt::AlignTop + + + + + + + Enter song caption (e.g., "Upbeat pop rock anthem with driving electric guitars") + + + 80 + + + + + + + Lyrics (optional): + + + Qt::AlignTop + + + + + + + Enter lyrics or leave empty for instrumental music + + + 150 + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + \ No newline at end of file diff --git a/moc_predefs.h b/moc_predefs.h new file mode 100644 index 0000000..165c2ba --- /dev/null +++ b/moc_predefs.h @@ -0,0 +1,473 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __OPTIMIZE__ 1 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __SSP_STRONG__ 3 +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __FLT64X_MANT_DIG__ 64 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define __pie__ 2 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 201703L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260103" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __FLT32X_MIN_EXP__ (-1021) +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 201603L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201411L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __pic__ 2 +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __PIC__ 2 +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201703L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __PIE__ 2 +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201304L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201304L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3