diff --git a/RELEASE_NOTES_v1.1.0.md b/RELEASE_NOTES_v1.1.0.md
new file mode 100644
index 0000000..ae041dd
--- /dev/null
+++ b/RELEASE_NOTES_v1.1.0.md
@@ -0,0 +1,55 @@
+# SilentDragonXLite v1.1.0 Release Notes
+
+## What's New
+
+### DragonX Compatibility
+- Full compatibility with the DragonX blockchain
+- Updated payment URIs from `hush:` to `drgx:`
+- Updated branding and UI strings throughout
+
+### Crash Fixes
+- Fixed Rust FFI panics with `catch_unwind` wrappers and safe CString construction
+- Handle poisoned mutex/RwLock from prior panics instead of crashing
+- Fixed empty block list panics in `clear_blocks` and `invalidate_block`
+- Removed `throw;` in exception handler that caused undefined behavior
+
+### Reorg Detection & Stuck Sync Recovery
+- Detects stuck syncs (10-second stall threshold) and prompts the user to repair
+- Chain reorganization detection with one-time user prompt to clear and re-sync
+- Prevents duplicate reorg dialogs
+
+### Server Failover
+- All 6 lite servers available: lite, lite1-5.dragonx.is
+- Random server selection with connectivity probing — dead servers are automatically skipped
+- Server dropdown in settings for manual selection
+
+### Faster Block Sync
+- Reuses Tokio runtime across block fetch batches, eliminating per-batch runtime creation overhead
+
+### Clean Shutdown
+- Added 15-second timeout on wallet save during exit — the app will no longer hang on close
+- Rust background threads (mempool monitor) are now cleanly stopped on exit via `litelib_shutdown()`
+
+### Wallet Safety
+- Atomic wallet saves: writes to a temp file, then renames over the original — a crash during save can no longer corrupt the wallet
+- Automatic `.bak` backup created before each save
+- On startup, if the wallet file is missing or corrupted, automatically recovers from the backup
+
+### Seed Phrase
+- Added "Skip Verification" button to seed phrase wizard for faster wallet setup
+
+### UI Contrast Improvements
+- Fixed disabled buttons being invisible (white text on white background)
+- Fixed setup wizard, message boxes, and dialog contrast for the dark theme
+- Chat bubbles now use dark themed backgrounds matching the overall UI
+- Seed verification buttons styled with proper contrast
+- Fixed hyperlink color in Terms of Service (blue on dark was unreadable)
+
+---
+
+## Downloads
+
+| File | SHA-256 |
+|---|---|
+| `SilentDragonXLite` (Linux) | `f9d3e3a8cd916b2d83dda89bc181670ef2cdd8b9ae5a50ef3a1c0e76e74f04fc` |
+| `SilentDragonXLite.exe` (Windows) | `5064082c1300c42bef5c0f767e39743b08c66641eb495e1d975cbfb163b76cb0` |
diff --git a/SilentDragonXLite b/SilentDragonXLite
index 4747e43..4efa340 100755
Binary files a/SilentDragonXLite and b/SilentDragonXLite differ
diff --git a/lib/silentdragonxlitelib.h b/lib/silentdragonxlitelib.h
index 9d6ba28..d23a274 100644
--- a/lib/silentdragonxlitelib.h
+++ b/lib/silentdragonxlitelib.h
@@ -15,6 +15,7 @@ extern char * litelib_execute (const char* s, const char* args);
extern void litelib_rust_free_string (char* s);
extern char * blake3_PW (char* pw);
extern bool litelib_check_server_online (const char* server);
+extern void litelib_shutdown (void);
#ifdef __cplusplus
}
diff --git a/lib/src/lib.rs b/lib/src/lib.rs
index 9ec2a69..6c02643 100644
--- a/lib/src/lib.rs
+++ b/lib/src/lib.rs
@@ -290,6 +290,20 @@ pub extern "C" fn litelib_check_server_online(server: *const c_char) -> bool {
}
}
+/// Cleanly shut down the light client, stopping mempool monitor threads.
+/// Must be called before exit to prevent hangs.
+#[no_mangle]
+pub extern "C" fn litelib_shutdown() {
+ let lc_option = match LIGHTCLIENT.lock() {
+ Ok(l) => l.borrow().clone(),
+ Err(poisoned) => poisoned.into_inner().borrow().clone(),
+ };
+
+ if let Some(lc) = lc_option {
+ lc.shutdown();
+ }
+}
+
/**
* Callers that receive string return values from other functions should call this to return the string
* back to rust, so it can be freed. Failure to call this function will result in a memory leak
diff --git a/res/css/dragonx.css b/res/css/dragonx.css
index bd8855a..102aa7f 100644
--- a/res/css/dragonx.css
+++ b/res/css/dragonx.css
@@ -158,10 +158,9 @@ QPushButton:selected {
background-color: rgba(216, 38, 82, 0.75);
}
QPushButton:disabled {
- color: rgba(255, 255, 255, 0.15);
+ color: rgba(255, 255, 255, 0.35);
border: 1px solid rgba(216, 38, 82, 0.15);
- background-color: rgba(255, 255, 255, 0.796);
- opacity: 25%;
+ background-color: rgba(41, 21, 21, 0.5);
}
QComboBox{
@@ -284,11 +283,6 @@ QLabel#lblMessage {
border: 1px solid rgba(216, 38, 82, 0.5);
background-color: rgba(216, 38, 82, 0.05);
}
-QLabel#lblMessage{
- color: rgb(24, 21, 21);
- border: 1px solid rgba(255, 255, 255, 0.5);
- background-color: rgba(216, 38, 82, 0.05);
-}
@@ -532,4 +526,71 @@ QDialog#requestDialog QPushButton {
}
QDialog#requestDialog QPushButton#addContact {
min-width: 150px;
+}
+
+
+/* ===== SETUP WIZARD & DIALOG CONTRAST FIXES ===== */
+
+QWizard, QWizardPage {
+ color: white;
+ background-color: rgb(24, 21, 21);
+}
+
+QWizard QLabel, QWizardPage QLabel {
+ color: rgba(255, 255, 255, 0.85);
+}
+
+QWizard QPushButton, QWizardPage QPushButton {
+ color: rgba(255, 255, 255, 0.75);
+ border: 1px solid rgba(216, 38, 82, 0.5);
+ background-color: rgba(216, 38, 82, 0.15);
+}
+QWizard QPushButton:hover, QWizardPage QPushButton:hover {
+ color: white;
+ border: 1px solid rgba(216, 38, 82, 0.75);
+ background-color: rgba(216, 38, 82, 0.45);
+}
+
+QTextBrowser, QPlainTextEdit, QTextEdit {
+ color: white;
+ border: 1px solid rgba(216, 38, 82, 0.5);
+ background-color: rgba(41, 21, 21, 0.75);
+}
+
+QCheckBox {
+ color: rgba(255, 255, 255, 0.85);
+}
+
+QCheckBox::indicator {
+ border: 1px solid rgba(216, 38, 82, 0.75);
+ background-color: rgba(41, 21, 21, 0.5);
+}
+
+QCheckBox::indicator:checked {
+ background-color: rgba(216, 38, 82, 0.75);
+}
+
+QRadioButton {
+ color: rgba(255, 255, 255, 0.85);
+}
+
+QDialogButtonBox QPushButton {
+ color: rgba(255, 255, 255, 0.75);
+ border: 1px solid rgba(216, 38, 82, 0.5);
+ background-color: rgba(216, 38, 82, 0.15);
+ min-width: 80px;
+ padding: 6px 16px;
+}
+QDialogButtonBox QPushButton:hover {
+ color: white;
+ border: 1px solid rgba(216, 38, 82, 0.75);
+ background-color: rgba(216, 38, 82, 0.45);
+}
+
+QMessageBox {
+ color: white;
+ background-color: rgb(24, 21, 21);
+}
+QMessageBox QLabel {
+ color: white;
}
\ No newline at end of file
diff --git a/src/chatbubbleme.ui b/src/chatbubbleme.ui
index 0ad7bcc..d7058f0 100644
--- a/src/chatbubbleme.ui
+++ b/src/chatbubbleme.ui
@@ -15,14 +15,16 @@
QWidget{
- background: whitesmoke;
- border: 1px solid #afafaf;
+ background: rgba(216, 38, 82, 0.15);
+ border: 1px solid rgba(216, 38, 82, 0.4);
border-radius: 3px;
+ color: white;
}
QLabel
{
background: none;
border: none;
+ color: rgba(255, 255, 255, 0.9);
}
diff --git a/src/chatbubblepartner.ui b/src/chatbubblepartner.ui
index e41a0ef..8f5bb94 100644
--- a/src/chatbubblepartner.ui
+++ b/src/chatbubblepartner.ui
@@ -15,14 +15,16 @@
QWidget{
- background: #c8e1ff;
- border: 1px solid #fefefe;
+ background: rgba(41, 21, 21, 0.75);
+ border: 1px solid rgba(216, 38, 82, 0.3);
border-radius: 3px;
+ color: white;
}
QLabel
{
background: none;
border: none;
+ color: rgba(255, 255, 255, 0.85);
}
diff --git a/src/controller.cpp b/src/controller.cpp
index 7431271..91571d9 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -7,6 +7,7 @@
#include "settings.h"
#include "version.h"
#include "camount.h"
+#include "../lib/silentdragonxlitelib.h"
#include "Model/ChatItem.h"
#include "DataStore/DataStore.h"
#include
@@ -2019,6 +2020,9 @@ void Controller::refreshDRAGONXPrice()
void Controller::shutdownhushd()
{
+ // Signal Rust to stop background threads (mempool monitor, etc.)
+ litelib_shutdown();
+
// Save the wallet and exit the lightclient library cleanly.
if (!zrpc) {
zrpc = new LiteInterface();
@@ -2040,7 +2044,7 @@ void Controller::shutdownhushd()
connD.topIcon->setMovie(movie2);
movie2->start();
connD.status->setText(QObject::tr("Please wait for SilentDragonXLite to exit"));
- connD.statusDetail->setText(QObject::tr("It may take several minutes"));
+ connD.statusDetail->setText(QObject::tr("Saving wallet..."));
} else {
QMovie *movie1 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");;
movie1->setScaledSize(size);
@@ -2048,7 +2052,7 @@ void Controller::shutdownhushd()
connD.topIcon->setMovie(movie1);
movie1->start();
connD.status->setText(QObject::tr("Please wait for SilentDragonXLite to exit"));
- connD.statusDetail->setText(QObject::tr("It may take several minutes"));
+ connD.statusDetail->setText(QObject::tr("Saving wallet..."));
}
bool finished = false;
@@ -2059,6 +2063,15 @@ void Controller::shutdownhushd()
qDebug() << __func__ << ": saveWallet finished";
});
+ // Add a timeout so the dialog can't hang forever
+ QTimer::singleShot(15000, &d, [&]() {
+ if (!finished) {
+ qDebug() << __func__ << ": saveWallet timed out after 15 seconds, forcing exit";
+ finished = true;
+ d.accept();
+ }
+ });
+
if (!finished)
d.exec();
} else {
diff --git a/src/firsttimewizard.cpp b/src/firsttimewizard.cpp
index d4b1dc0..91c48ea 100644
--- a/src/firsttimewizard.cpp
+++ b/src/firsttimewizard.cpp
@@ -412,7 +412,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word1, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word1 + " ");
- verifyseed.word1->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word1->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word1->font();
button.setStrikeOut(true);
verifyseed.word1->setFont(button);
@@ -421,7 +421,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word2, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word2);
- verifyseed.word2->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word2->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word2->font();
button.setStrikeOut(true);
verifyseed.word2->setFont(button);
@@ -430,7 +430,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word3, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word3 + " ");
- verifyseed.word3->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word3->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word3->font();
button.setStrikeOut(true);
verifyseed.word3->setFont(button);
@@ -439,7 +439,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word4, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word4 + " ");
- verifyseed.word4->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word4->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word4->font();
button.setStrikeOut(true);
verifyseed.word4->setFont(button);
@@ -448,7 +448,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word5, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word5 + " ");
- verifyseed.word5->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word5->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word5->font();
button.setStrikeOut(true);
verifyseed.word5->setFont(button);
@@ -457,7 +457,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word6, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word6 + " ");
- verifyseed.word6->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word6->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word6->font();
button.setStrikeOut(true);
verifyseed.word6->setFont(button);
@@ -466,7 +466,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word7, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word7 + " ");
- verifyseed.word7->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word7->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word7->font();
button.setStrikeOut(true);
verifyseed.word7->setFont(button);
@@ -475,7 +475,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word8, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word8 + " ");
- verifyseed.word8->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word8->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word8->font();
button.setStrikeOut(true);
verifyseed.word8->setFont(button);
@@ -484,7 +484,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word9, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word9 + " ");
- verifyseed.word9->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word9->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word9->font();
button.setStrikeOut(true);
verifyseed.word9->setFont(button);
@@ -493,7 +493,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word10, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word10 + " ");
- verifyseed.word10->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word10->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word10->font();
button.setStrikeOut(true);
verifyseed.word10->setFont(button);
@@ -502,7 +502,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word11, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word11 + " ");
- verifyseed.word11->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word11->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word11->font();
button.setStrikeOut(true);
verifyseed.word11->setFont(button);
@@ -511,7 +511,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word12, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word12 + " ");
- verifyseed.word12->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word12->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word12->font();
button.setStrikeOut(true);
verifyseed.word12->setFont(button);
@@ -520,7 +520,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word13, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word13 + " ");
- verifyseed.word13->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word13->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word13->font();
button.setStrikeOut(true);
verifyseed.word13->setFont(button);
@@ -529,7 +529,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word14, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word14 + " ");
- verifyseed.word14->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word14->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word14->font();
button.setStrikeOut(true);
verifyseed.word14->setFont(button);
@@ -538,7 +538,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word15, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word15 + " ");
- verifyseed.word15->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word15->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word15->font();
button.setStrikeOut(true);
verifyseed.word15->setFont(button);
@@ -547,7 +547,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word16, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word16 + " ");
- verifyseed.word16->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word16->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word16->font();
button.setStrikeOut(true);
verifyseed.word16->setFont(button);
@@ -556,7 +556,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word17, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word17 + " ");
- verifyseed.word17->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word17->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word17->font();
button.setStrikeOut(true);
verifyseed.word17->setFont(button);
@@ -565,7 +565,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word18, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word18 + " ");
- verifyseed.word18->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word18->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word18->font();
button.setStrikeOut(true);
verifyseed.word18->setFont(button);
@@ -574,7 +574,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word19, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word19 + " ");
- verifyseed.word19->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word19->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word19->font();
button.setStrikeOut(true);
verifyseed.word19->setFont(button);
@@ -583,7 +583,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word20, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word20 + " ");
- verifyseed.word20->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word20->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word20->font();
button.setStrikeOut(true);
verifyseed.word20->setFont(button);
@@ -592,7 +592,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word21, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word21 + " ");
- verifyseed.word21->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word21->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word21->font();
button.setStrikeOut(true);
verifyseed.word21->setFont(button);
@@ -601,7 +601,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word22, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word22 + " ");
- verifyseed.word22->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word22->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word22->font();
button.setStrikeOut(true);
verifyseed.word22->setFont(button);
@@ -610,7 +610,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word23, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word23 + " ");
- verifyseed.word23->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word23->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word23->font();
button.setStrikeOut(true);
verifyseed.word23->setFont(button);
@@ -619,7 +619,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word24, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word24 + " ");
- verifyseed.word24->setStyleSheet("background-color: rgb(182,182,182);");
+ verifyseed.word24->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word24->font();
button.setStrikeOut(true);
verifyseed.word24->setFont(button);
diff --git a/src/newwallet.ui b/src/newwallet.ui
index 475631c..7c3252f 100644
--- a/src/newwallet.ui
+++ b/src/newwallet.ui
@@ -90,7 +90,7 @@
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
<h1 align="center" style=" margin-top:18px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:xx-large; font-weight:600;">DragonX + HushChat Terms of Service</span></h1>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">All users of this platform agree to not use it for initiating or threatening any forceful interference or violence on an individual or their property, aka, the <a href="https://en.wikipedia.org/wiki/Non-aggression_principle"><span style=" text-decoration: underline; color:#0000ff;">Non-Aggression Principle</span></a>.</p>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">All users of this platform agree to not use it for initiating or threatening any forceful interference or violence on an individual or their property, aka, the <a href="https://en.wikipedia.org/wiki/Non-aggression_principle"><span style=" text-decoration: underline; color:#6699ff;">Non-Aggression Principle</span></a>.</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">THE SERVICE IS PROVIDED “AS IS” AND The Hush Developers DO NOT MAKE ANY SPECIFIC COMMITMENTS OR WARRANTIES ABOUT THE SERVICE.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">By clicking OK, you agree to use Hush, the SilentDragon family of wallets, HushChat, and any software developed by The Hush Developers in accordance with your local laws, that all liabilities related to using this service are your own, and The Hush Developers WILL NOT BE RESPONSIBLE FOR any losses related to using this software.</p>