From 078c5cbba0055e24d0477bddbf84f38858914a31 Mon Sep 17 00:00:00 2001 From: axiom Date: Fri, 16 Aug 2024 14:50:34 +0300 Subject: [PATCH 01/56] Add: desktop basic structure --- desktop/__init__.py | 5 + desktop/core.py | 97 ++++ desktop/main.py | 29 ++ desktop/ui/__init__.py | 5 + desktop/ui/bip38.ui | 936 +++++++++++++++++++++++++++++++++++++++ desktop/ui/css/theme.css | 0 desktop/ui/ui_bip38.py | 465 +++++++++++++++++++ desktop/utils.py | 37 ++ launch.py | 22 + 9 files changed, 1596 insertions(+) create mode 100644 desktop/__init__.py create mode 100644 desktop/core.py create mode 100644 desktop/main.py create mode 100644 desktop/ui/__init__.py create mode 100644 desktop/ui/bip38.ui create mode 100644 desktop/ui/css/theme.css create mode 100644 desktop/ui/ui_bip38.py create mode 100644 desktop/utils.py create mode 100644 launch.py diff --git a/desktop/__init__.py b/desktop/__init__.py new file mode 100644 index 0000000..b6e3e62 --- /dev/null +++ b/desktop/__init__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 + +# Copyright © 2024, Eyoel Tadesse +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit \ No newline at end of file diff --git a/desktop/core.py b/desktop/core.py new file mode 100644 index 0000000..c7879c7 --- /dev/null +++ b/desktop/core.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 + +# Copyright © 2024, Eyoel Tadesse +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit + +from typing import Optional + +from PySide6.QtWidgets import ( + QMainWindow, QWidget, QStackedWidget, +) +from PySide6.QtCore import QFileSystemWatcher + +from desktop.utils import resolve_path +from desktop.ui.ui_bip38 import Ui_MainWindow + + +class Application(QMainWindow): + _instance: Optional['Application'] = None + ui: Ui_MainWindow = None + theme_watcher: QFileSystemWatcher = None + + def __new__(cls, *args, **kwargs) -> 'Application': + """ + Create a new instance if not already created, implementing the Singleton pattern. + """ + if not cls._instance: + cls._instance = super().__new__(cls) + return cls._instance + + def __init__(self) -> None: + """ + Initialize the Application instance if not already initialized. + """ + if not hasattr(self, 'initialized'): + super().__init__() + self.initialize() + self.initialized = True + + @classmethod + def instance(cls) -> 'Application': + """ + Get the singleton instance of the Application. + + :return: The singleton instance of Application. + """ + if not cls._instance: + cls._instance = cls() + return cls._instance + + def initialize(self) -> None: + """ + Perform initialization tasks for the application, such as setting up the UI and loading resources. + """ + self.ui = Ui_MainWindow() + self.ui.setupUi(self) + + self.detached_window = None + + self.setWindowTitle("BIP38") + css_path = resolve_path("desktop/ui/css/theme.css") + self.theme_watcher = QFileSystemWatcher([css_path]) + self.theme_watcher.fileChanged.connect(lambda: self.load_stylesheet(css_path)) + self.load_stylesheet(css_path) + + def load_stylesheet(self, path: str) -> None: + """ + Load and apply a stylesheet from the specified path. + + :param path: The path to the stylesheet file. + """ + try: + with open(path, 'r', encoding='utf-8') as style_file: + stylesheet = style_file.read() + self.setStyleSheet(stylesheet) + except Exception as e: + print(f"Failed to load stylesheet: {e}") + + def change_page(self, stacked_name: str, widget_name: str) -> None: + """ + Change the currently displayed page in a QStackedWidget. + + :param stacked_name: The name of the QStackedWidget. + :param widget_name: The name of the widget to display. + """ + qStackedWidget: Optional[QStackedWidget] = self.findChild(QStackedWidget, stacked_name) + + if qStackedWidget is None: + print(f"QStackWidget not found: {stacked_name}") + return + + qWidget: Optional[QWidget] = qStackedWidget.findChild(QWidget, widget_name) + + if qStackedWidget and qWidget: + qStackedWidget.setCurrentWidget(qWidget) + else: + print(f"ERROR changing page: '{stacked_name}' '{widget_name}'") \ No newline at end of file diff --git a/desktop/main.py b/desktop/main.py new file mode 100644 index 0000000..745f482 --- /dev/null +++ b/desktop/main.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 + +# Copyright © 2024, Eyoel Tadesse +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit + +from desktop.core import Application + + +class BIP38Application: + """ + Main application class for managing the UI and core functionalities. + """ + def __init__(self) -> None: + """ + Initialize the MainApplication class. + """ + super().__init__() + + self.app = Application.instance() + self.ui = self.app.ui + + self.__init_ui() + + def __init_ui(self) -> None: + """ + Initialize the UI components and their connections. + """ + pass \ No newline at end of file diff --git a/desktop/ui/__init__.py b/desktop/ui/__init__.py new file mode 100644 index 0000000..b6e3e62 --- /dev/null +++ b/desktop/ui/__init__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 + +# Copyright © 2024, Eyoel Tadesse +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit \ No newline at end of file diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui new file mode 100644 index 0000000..35fe6c0 --- /dev/null +++ b/desktop/ui/bip38.ui @@ -0,0 +1,936 @@ + + + MainWindow + + + + 0 + 0 + 705 + 455 + + + + MainWindow + + + + + 0 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 10 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Cryptocurrency + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + (Select) + + + + + + + + + + + 115 + 16777215 + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Network + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + (Select) + + + + + + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Passphrase + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + 115 + 16777215 + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Mode + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + (Select) + + + + + + + + + + + + + 0 + + + + + 10 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Private Key + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + 115 + 16777215 + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + WIF Type + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + (Select) + + + + + + + + + + + 115 + 16777215 + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::LayoutDirection::LeftToRight + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + Convert + + + + + + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + WIF + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + 0 + 0 + + + + Encrypt + + + + + + + + + + + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Encrypted WIF + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + 0 + 0 + + + + Decrypt + + + + + + + + + + + + + + + + Output + + + + 0 + + + 0 + + + 5 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css new file mode 100644 index 0000000..e69de29 diff --git a/desktop/ui/ui_bip38.py b/desktop/ui/ui_bip38.py new file mode 100644 index 0000000..abad681 --- /dev/null +++ b/desktop/ui/ui_bip38.py @@ -0,0 +1,465 @@ +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QApplication, QComboBox, QFrame, QGroupBox, + QHBoxLayout, QLabel, QLineEdit, QMainWindow, + QPushButton, QSizePolicy, QSpacerItem, QStackedWidget, + QTextEdit, QVBoxLayout, QWidget) + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + MainWindow.resize(705, 455) + self.centralwidget = QWidget(MainWindow) + self.centralwidget.setObjectName(u"centralwidget") + self.centeralWidgetLayout = QVBoxLayout(self.centralwidget) + self.centeralWidgetLayout.setSpacing(0) + self.centeralWidgetLayout.setObjectName(u"centeralWidgetLayout") + self.centeralWidgetLayout.setContentsMargins(10, 10, 10, 10) + self.bip38ContainerQFrame = QFrame(self.centralwidget) + self.bip38ContainerQFrame.setObjectName(u"bip38ContainerQFrame") + self.bip38ContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.bip38ContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.verticalLayout = QVBoxLayout(self.bip38ContainerQFrame) + self.verticalLayout.setSpacing(10) + self.verticalLayout.setObjectName(u"verticalLayout") + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.cryptoAndNetworkContainerQFrame = QFrame(self.bip38ContainerQFrame) + self.cryptoAndNetworkContainerQFrame.setObjectName(u"cryptoAndNetworkContainerQFrame") + self.cryptoAndNetworkContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.cryptoAndNetworkContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout = QHBoxLayout(self.cryptoAndNetworkContainerQFrame) + self.horizontalLayout.setSpacing(15) + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.cryptocurrencyContainerQFrame = QFrame(self.cryptoAndNetworkContainerQFrame) + self.cryptocurrencyContainerQFrame.setObjectName(u"cryptocurrencyContainerQFrame") + self.cryptocurrencyContainerQFrameVLayout = QVBoxLayout(self.cryptocurrencyContainerQFrame) + self.cryptocurrencyContainerQFrameVLayout.setSpacing(5) + self.cryptocurrencyContainerQFrameVLayout.setObjectName(u"cryptocurrencyContainerQFrameVLayout") + self.cryptocurrencyContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.cryptocurrencyLabelContainerQFrame = QFrame(self.cryptocurrencyContainerQFrame) + self.cryptocurrencyLabelContainerQFrame.setObjectName(u"cryptocurrencyLabelContainerQFrame") + self.cryptocurrencyLabelContainerQFrameHLayout = QHBoxLayout(self.cryptocurrencyLabelContainerQFrame) + self.cryptocurrencyLabelContainerQFrameHLayout.setSpacing(15) + self.cryptocurrencyLabelContainerQFrameHLayout.setObjectName(u"cryptocurrencyLabelContainerQFrameHLayout") + self.cryptocurrencyLabelContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.cryptocurrencyQLabel = QLabel(self.cryptocurrencyLabelContainerQFrame) + self.cryptocurrencyQLabel.setObjectName(u"cryptocurrencyQLabel") + + self.cryptocurrencyLabelContainerQFrameHLayout.addWidget(self.cryptocurrencyQLabel) + + self.cryptocurrencyLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.cryptocurrencyLabelContainerQFrameHLayout.addItem(self.cryptocurrencyLabelContainerQFrameHSpacer) + + + self.cryptocurrencyContainerQFrameVLayout.addWidget(self.cryptocurrencyLabelContainerQFrame) + + self.CryptocurrencyQComboBox = QComboBox(self.cryptocurrencyContainerQFrame) + self.CryptocurrencyQComboBox.setObjectName(u"CryptocurrencyQComboBox") + + self.cryptocurrencyContainerQFrameVLayout.addWidget(self.CryptocurrencyQComboBox) + + + self.horizontalLayout.addWidget(self.cryptocurrencyContainerQFrame) + + self.networkContainerQFrame = QFrame(self.cryptoAndNetworkContainerQFrame) + self.networkContainerQFrame.setObjectName(u"networkContainerQFrame") + self.networkContainerQFrame.setMaximumSize(QSize(115, 16777215)) + self.networkContainerQFrameVLayout = QVBoxLayout(self.networkContainerQFrame) + self.networkContainerQFrameVLayout.setSpacing(5) + self.networkContainerQFrameVLayout.setObjectName(u"networkContainerQFrameVLayout") + self.networkContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.networkLabelContainerQFrame = QFrame(self.networkContainerQFrame) + self.networkLabelContainerQFrame.setObjectName(u"networkLabelContainerQFrame") + self.networkLabelContainerQFrameHLayout = QHBoxLayout(self.networkLabelContainerQFrame) + self.networkLabelContainerQFrameHLayout.setSpacing(15) + self.networkLabelContainerQFrameHLayout.setObjectName(u"networkLabelContainerQFrameHLayout") + self.networkLabelContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.networkQLabel = QLabel(self.networkLabelContainerQFrame) + self.networkQLabel.setObjectName(u"networkQLabel") + + self.networkLabelContainerQFrameHLayout.addWidget(self.networkQLabel) + + self.networkLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.networkLabelContainerQFrameHLayout.addItem(self.networkLabelContainerQFrameHSpacer) + + + self.networkContainerQFrameVLayout.addWidget(self.networkLabelContainerQFrame) + + self.networkQComboBox = QComboBox(self.networkContainerQFrame) + self.networkQComboBox.setObjectName(u"networkQComboBox") + + self.networkContainerQFrameVLayout.addWidget(self.networkQComboBox) + + + self.horizontalLayout.addWidget(self.networkContainerQFrame) + + self.passphraseContainerQFrame = QFrame(self.cryptoAndNetworkContainerQFrame) + self.passphraseContainerQFrame.setObjectName(u"passphraseContainerQFrame") + self.passphraseContainerQFrameVLayout = QVBoxLayout(self.passphraseContainerQFrame) + self.passphraseContainerQFrameVLayout.setSpacing(5) + self.passphraseContainerQFrameVLayout.setObjectName(u"passphraseContainerQFrameVLayout") + self.passphraseContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.passphraseLabelContainerQFrame = QFrame(self.passphraseContainerQFrame) + self.passphraseLabelContainerQFrame.setObjectName(u"passphraseLabelContainerQFrame") + self.passphraseLabelContainerQFrameHLayout = QHBoxLayout(self.passphraseLabelContainerQFrame) + self.passphraseLabelContainerQFrameHLayout.setSpacing(15) + self.passphraseLabelContainerQFrameHLayout.setObjectName(u"passphraseLabelContainerQFrameHLayout") + self.passphraseLabelContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.passphraseQLabel = QLabel(self.passphraseLabelContainerQFrame) + self.passphraseQLabel.setObjectName(u"passphraseQLabel") + + self.passphraseLabelContainerQFrameHLayout.addWidget(self.passphraseQLabel) + + self.passphraseLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.passphraseLabelContainerQFrameHLayout.addItem(self.passphraseLabelContainerQFrameHSpacer) + + + self.passphraseContainerQFrameVLayout.addWidget(self.passphraseLabelContainerQFrame) + + self.passphraseQLineEdit = QLineEdit(self.passphraseContainerQFrame) + self.passphraseQLineEdit.setObjectName(u"passphraseQLineEdit") + + self.passphraseContainerQFrameVLayout.addWidget(self.passphraseQLineEdit) + + + self.horizontalLayout.addWidget(self.passphraseContainerQFrame) + + self.modeContainerQFrame = QFrame(self.cryptoAndNetworkContainerQFrame) + self.modeContainerQFrame.setObjectName(u"modeContainerQFrame") + self.modeContainerQFrame.setMaximumSize(QSize(115, 16777215)) + self.modeContainerQFrameVLayout = QVBoxLayout(self.modeContainerQFrame) + self.modeContainerQFrameVLayout.setSpacing(5) + self.modeContainerQFrameVLayout.setObjectName(u"modeContainerQFrameVLayout") + self.modeContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.modeLabelContainerQFrame = QFrame(self.modeContainerQFrame) + self.modeLabelContainerQFrame.setObjectName(u"modeLabelContainerQFrame") + self.modeLabelContainerQFrameHLayout = QHBoxLayout(self.modeLabelContainerQFrame) + self.modeLabelContainerQFrameHLayout.setSpacing(15) + self.modeLabelContainerQFrameHLayout.setObjectName(u"modeLabelContainerQFrameHLayout") + self.modeLabelContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.modeQLabel = QLabel(self.modeLabelContainerQFrame) + self.modeQLabel.setObjectName(u"modeQLabel") + + self.modeLabelContainerQFrameHLayout.addWidget(self.modeQLabel) + + self.modeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.modeLabelContainerQFrameHLayout.addItem(self.modeLabelContainerQFrameHSpacer) + + + self.modeContainerQFrameVLayout.addWidget(self.modeLabelContainerQFrame) + + self.modeQComboBox = QComboBox(self.modeContainerQFrame) + self.modeQComboBox.setObjectName(u"modeQComboBox") + + self.modeContainerQFrameVLayout.addWidget(self.modeQComboBox) + + + self.horizontalLayout.addWidget(self.modeContainerQFrame) + + + self.verticalLayout.addWidget(self.cryptoAndNetworkContainerQFrame) + + self.modeQStackedWidget = QStackedWidget(self.bip38ContainerQFrame) + self.modeQStackedWidget.setObjectName(u"modeQStackedWidget") + self.noECQWidget = QWidget() + self.noECQWidget.setObjectName(u"noECQWidget") + self.noECVLayout = QVBoxLayout(self.noECQWidget) + self.noECVLayout.setSpacing(10) + self.noECVLayout.setObjectName(u"noECVLayout") + self.noECVLayout.setContentsMargins(0, 0, 0, 0) + self.noECPrivateKeyAndWifTypeContainerQFrame = QFrame(self.noECQWidget) + self.noECPrivateKeyAndWifTypeContainerQFrame.setObjectName(u"noECPrivateKeyAndWifTypeContainerQFrame") + self.noECPrivateKeyAndWifTypeContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.noECPrivateKeyAndWifTypeContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.noECPrivateKeyAndWifTypeContainerHLayout_2 = QHBoxLayout(self.noECPrivateKeyAndWifTypeContainerQFrame) + self.noECPrivateKeyAndWifTypeContainerHLayout_2.setSpacing(15) + self.noECPrivateKeyAndWifTypeContainerHLayout_2.setObjectName(u"noECPrivateKeyAndWifTypeContainerHLayout_2") + self.noECPrivateKeyAndWifTypeContainerHLayout_2.setContentsMargins(0, 0, 0, 0) + self.noECPrivateKeyContainerQFrame = QFrame(self.noECPrivateKeyAndWifTypeContainerQFrame) + self.noECPrivateKeyContainerQFrame.setObjectName(u"noECPrivateKeyContainerQFrame") + self.noECPrivateKeyContainerQFrameVLayout = QVBoxLayout(self.noECPrivateKeyContainerQFrame) + self.noECPrivateKeyContainerQFrameVLayout.setSpacing(5) + self.noECPrivateKeyContainerQFrameVLayout.setObjectName(u"noECPrivateKeyContainerQFrameVLayout") + self.noECPrivateKeyContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.noECPrivateKeyLabelContainerQFrame = QFrame(self.noECPrivateKeyContainerQFrame) + self.noECPrivateKeyLabelContainerQFrame.setObjectName(u"noECPrivateKeyLabelContainerQFrame") + self.noECPrivateKeyLabelContainerQFrameHLayout = QHBoxLayout(self.noECPrivateKeyLabelContainerQFrame) + self.noECPrivateKeyLabelContainerQFrameHLayout.setSpacing(15) + self.noECPrivateKeyLabelContainerQFrameHLayout.setObjectName(u"noECPrivateKeyLabelContainerQFrameHLayout") + self.noECPrivateKeyLabelContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.noECPrivateKeyQLabel = QLabel(self.noECPrivateKeyLabelContainerQFrame) + self.noECPrivateKeyQLabel.setObjectName(u"noECPrivateKeyQLabel") + + self.noECPrivateKeyLabelContainerQFrameHLayout.addWidget(self.noECPrivateKeyQLabel) + + self.noECPrivateKeyLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.noECPrivateKeyLabelContainerQFrameHLayout.addItem(self.noECPrivateKeyLabelContainerQFrameHSpacer) + + + self.noECPrivateKeyContainerQFrameVLayout.addWidget(self.noECPrivateKeyLabelContainerQFrame) + + self.noECPrivateKeyQLineEdit = QLineEdit(self.noECPrivateKeyContainerQFrame) + self.noECPrivateKeyQLineEdit.setObjectName(u"noECPrivateKeyQLineEdit") + + self.noECPrivateKeyContainerQFrameVLayout.addWidget(self.noECPrivateKeyQLineEdit) + + + self.noECPrivateKeyAndWifTypeContainerHLayout_2.addWidget(self.noECPrivateKeyContainerQFrame) + + self.noECWIFTypeContainerQFrame = QFrame(self.noECPrivateKeyAndWifTypeContainerQFrame) + self.noECWIFTypeContainerQFrame.setObjectName(u"noECWIFTypeContainerQFrame") + self.noECWIFTypeContainerQFrame.setMaximumSize(QSize(115, 16777215)) + self.noECWIFTypeContainerQFrameVLayout = QVBoxLayout(self.noECWIFTypeContainerQFrame) + self.noECWIFTypeContainerQFrameVLayout.setSpacing(5) + self.noECWIFTypeContainerQFrameVLayout.setObjectName(u"noECWIFTypeContainerQFrameVLayout") + self.noECWIFTypeContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.noECWIFTypeLabelContainerQFrame = QFrame(self.noECWIFTypeContainerQFrame) + self.noECWIFTypeLabelContainerQFrame.setObjectName(u"noECWIFTypeLabelContainerQFrame") + self.noECWIFTypeLabelContainerQFrameHLayout = QHBoxLayout(self.noECWIFTypeLabelContainerQFrame) + self.noECWIFTypeLabelContainerQFrameHLayout.setSpacing(15) + self.noECWIFTypeLabelContainerQFrameHLayout.setObjectName(u"noECWIFTypeLabelContainerQFrameHLayout") + self.noECWIFTypeLabelContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.noECWIFTypeQLabel = QLabel(self.noECWIFTypeLabelContainerQFrame) + self.noECWIFTypeQLabel.setObjectName(u"noECWIFTypeQLabel") + + self.noECWIFTypeLabelContainerQFrameHLayout.addWidget(self.noECWIFTypeQLabel) + + self.noECWIFTypeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.noECWIFTypeLabelContainerQFrameHLayout.addItem(self.noECWIFTypeLabelContainerQFrameHSpacer) + + + self.noECWIFTypeContainerQFrameVLayout.addWidget(self.noECWIFTypeLabelContainerQFrame) + + self.noECWIFTypeQComboBox = QComboBox(self.noECWIFTypeContainerQFrame) + self.noECWIFTypeQComboBox.setObjectName(u"noECWIFTypeQComboBox") + + self.noECWIFTypeContainerQFrameVLayout.addWidget(self.noECWIFTypeQComboBox) + + + self.noECPrivateKeyAndWifTypeContainerHLayout_2.addWidget(self.noECWIFTypeContainerQFrame) + + self.noECCovertButtonContainerQFrame = QFrame(self.noECPrivateKeyAndWifTypeContainerQFrame) + self.noECCovertButtonContainerQFrame.setObjectName(u"noECCovertButtonContainerQFrame") + self.noECCovertButtonContainerQFrame.setMaximumSize(QSize(115, 16777215)) + self.noECConvertContainerQFrameVLayout = QVBoxLayout(self.noECCovertButtonContainerQFrame) + self.noECConvertContainerQFrameVLayout.setSpacing(5) + self.noECConvertContainerQFrameVLayout.setObjectName(u"noECConvertContainerQFrameVLayout") + self.noECConvertContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.noECPrivateKeyButtonContainerQFrame = QFrame(self.noECCovertButtonContainerQFrame) + self.noECPrivateKeyButtonContainerQFrame.setObjectName(u"noECPrivateKeyButtonContainerQFrame") + self.noECPrivateKeyButtonContainerQFrame.setLayoutDirection(Qt.LayoutDirection.LeftToRight) + self.noECPrivateKeyButtonHLayout = QVBoxLayout(self.noECPrivateKeyButtonContainerQFrame) + self.noECPrivateKeyButtonHLayout.setSpacing(0) + self.noECPrivateKeyButtonHLayout.setObjectName(u"noECPrivateKeyButtonHLayout") + self.noECPrivateKeyButtonHLayout.setContentsMargins(0, 0, 0, 0) + self.noECPrivateKeyButtonSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.noECPrivateKeyButtonHLayout.addItem(self.noECPrivateKeyButtonSpacer) + + self.noECPrivateKeyConvertQPushButton = QPushButton(self.noECPrivateKeyButtonContainerQFrame) + self.noECPrivateKeyConvertQPushButton.setObjectName(u"noECPrivateKeyConvertQPushButton") + + self.noECPrivateKeyButtonHLayout.addWidget(self.noECPrivateKeyConvertQPushButton) + + + self.noECConvertContainerQFrameVLayout.addWidget(self.noECPrivateKeyButtonContainerQFrame) + + + self.noECPrivateKeyAndWifTypeContainerHLayout_2.addWidget(self.noECCovertButtonContainerQFrame) + + + self.noECVLayout.addWidget(self.noECPrivateKeyAndWifTypeContainerQFrame) + + self.noECWIFAndButtonContainerQFrame = QFrame(self.noECQWidget) + self.noECWIFAndButtonContainerQFrame.setObjectName(u"noECWIFAndButtonContainerQFrame") + self.noECWIFAndButtonContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.noECWIFAndButtonContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.noECWIFHorizontalLayout = QHBoxLayout(self.noECWIFAndButtonContainerQFrame) + self.noECWIFHorizontalLayout.setSpacing(15) + self.noECWIFHorizontalLayout.setObjectName(u"noECWIFHorizontalLayout") + self.noECWIFHorizontalLayout.setContentsMargins(0, 0, 0, 0) + self.noECWIFContainerQFrame = QFrame(self.noECWIFAndButtonContainerQFrame) + self.noECWIFContainerQFrame.setObjectName(u"noECWIFContainerQFrame") + self.noECWIFContainerQFrameVLayout = QVBoxLayout(self.noECWIFContainerQFrame) + self.noECWIFContainerQFrameVLayout.setSpacing(5) + self.noECWIFContainerQFrameVLayout.setObjectName(u"noECWIFContainerQFrameVLayout") + self.noECWIFContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.noECWIFwifLableContainerQFrame = QFrame(self.noECWIFContainerQFrame) + self.noECWIFwifLableContainerQFrame.setObjectName(u"noECWIFwifLableContainerQFrame") + self.noECWIFLabelContainerQFrameHLayout = QHBoxLayout(self.noECWIFwifLableContainerQFrame) + self.noECWIFLabelContainerQFrameHLayout.setSpacing(15) + self.noECWIFLabelContainerQFrameHLayout.setObjectName(u"noECWIFLabelContainerQFrameHLayout") + self.noECWIFLabelContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.noECWIFQLabel = QLabel(self.noECWIFwifLableContainerQFrame) + self.noECWIFQLabel.setObjectName(u"noECWIFQLabel") + + self.noECWIFLabelContainerQFrameHLayout.addWidget(self.noECWIFQLabel) + + self.noECWIFLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.noECWIFLabelContainerQFrameHLayout.addItem(self.noECWIFLabelContainerQFrameHSpacer) + + + self.noECWIFContainerQFrameVLayout.addWidget(self.noECWIFwifLableContainerQFrame) + + self.noECWIFAndEncyptContainerQFrame = QFrame(self.noECWIFContainerQFrame) + self.noECWIFAndEncyptContainerQFrame.setObjectName(u"noECWIFAndEncyptContainerQFrame") + self.noECWIFAndEncyptContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.noECWIFAndEncyptContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.noECWIFContainerVLayout = QHBoxLayout(self.noECWIFAndEncyptContainerQFrame) + self.noECWIFContainerVLayout.setSpacing(15) + self.noECWIFContainerVLayout.setObjectName(u"noECWIFContainerVLayout") + self.noECWIFContainerVLayout.setContentsMargins(0, 0, 0, 0) + self.noECWIFQLineEdit = QLineEdit(self.noECWIFAndEncyptContainerQFrame) + self.noECWIFQLineEdit.setObjectName(u"noECWIFQLineEdit") + + self.noECWIFContainerVLayout.addWidget(self.noECWIFQLineEdit) + + self.noECEncryptQPushButton = QPushButton(self.noECWIFAndEncyptContainerQFrame) + self.noECEncryptQPushButton.setObjectName(u"noECEncryptQPushButton") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.noECEncryptQPushButton.sizePolicy().hasHeightForWidth()) + self.noECEncryptQPushButton.setSizePolicy(sizePolicy) + + self.noECWIFContainerVLayout.addWidget(self.noECEncryptQPushButton) + + + self.noECWIFContainerQFrameVLayout.addWidget(self.noECWIFAndEncyptContainerQFrame) + + + self.noECWIFHorizontalLayout.addWidget(self.noECWIFContainerQFrame) + + + self.noECVLayout.addWidget(self.noECWIFAndButtonContainerQFrame) + + self.modeQStackedWidget.addWidget(self.noECQWidget) + self.ecQWidget = QWidget() + self.ecQWidget.setObjectName(u"ecQWidget") + self.modeQStackedWidget.addWidget(self.ecQWidget) + + self.verticalLayout.addWidget(self.modeQStackedWidget) + + self.decryptWIFAndButtonsContainerQFrame = QFrame(self.bip38ContainerQFrame) + self.decryptWIFAndButtonsContainerQFrame.setObjectName(u"decryptWIFAndButtonsContainerQFrame") + self.decryptWIFAndButtonsContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.decryptWIFAndButtonsContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.decryptWIFfHorizontalLayout = QHBoxLayout(self.decryptWIFAndButtonsContainerQFrame) + self.decryptWIFfHorizontalLayout.setSpacing(15) + self.decryptWIFfHorizontalLayout.setObjectName(u"decryptWIFfHorizontalLayout") + self.decryptWIFfHorizontalLayout.setContentsMargins(0, 0, 0, 0) + self.decryptWIFContainerQFrame = QFrame(self.decryptWIFAndButtonsContainerQFrame) + self.decryptWIFContainerQFrame.setObjectName(u"decryptWIFContainerQFrame") + self.decryptWIFContainerQFrameVLayout = QVBoxLayout(self.decryptWIFContainerQFrame) + self.decryptWIFContainerQFrameVLayout.setSpacing(5) + self.decryptWIFContainerQFrameVLayout.setObjectName(u"decryptWIFContainerQFrameVLayout") + self.decryptWIFContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.decryptWIFLableContainerQFrame = QFrame(self.decryptWIFContainerQFrame) + self.decryptWIFLableContainerQFrame.setObjectName(u"decryptWIFLableContainerQFrame") + self.decryptWIFLabelContainerQFrameHLayout = QHBoxLayout(self.decryptWIFLableContainerQFrame) + self.decryptWIFLabelContainerQFrameHLayout.setSpacing(15) + self.decryptWIFLabelContainerQFrameHLayout.setObjectName(u"decryptWIFLabelContainerQFrameHLayout") + self.decryptWIFLabelContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.decryptWIFQLabel = QLabel(self.decryptWIFLableContainerQFrame) + self.decryptWIFQLabel.setObjectName(u"decryptWIFQLabel") + + self.decryptWIFLabelContainerQFrameHLayout.addWidget(self.decryptWIFQLabel) + + self.decryptWIFLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.decryptWIFLabelContainerQFrameHLayout.addItem(self.decryptWIFLabelContainerQFrameHSpacer) + + + self.decryptWIFContainerQFrameVLayout.addWidget(self.decryptWIFLableContainerQFrame) + + self.decryptWIFAndButtonContainerQFrame = QFrame(self.decryptWIFContainerQFrame) + self.decryptWIFAndButtonContainerQFrame.setObjectName(u"decryptWIFAndButtonContainerQFrame") + self.decryptWIFAndButtonContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.decryptWIFAndButtonContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.decryptWIFHLayout = QHBoxLayout(self.decryptWIFAndButtonContainerQFrame) + self.decryptWIFHLayout.setSpacing(15) + self.decryptWIFHLayout.setObjectName(u"decryptWIFHLayout") + self.decryptWIFHLayout.setContentsMargins(0, 0, 0, 0) + self.decryptWIFQLineEdit = QLineEdit(self.decryptWIFAndButtonContainerQFrame) + self.decryptWIFQLineEdit.setObjectName(u"decryptWIFQLineEdit") + + self.decryptWIFHLayout.addWidget(self.decryptWIFQLineEdit) + + self.decryptWIFQPushButton = QPushButton(self.decryptWIFAndButtonContainerQFrame) + self.decryptWIFQPushButton.setObjectName(u"decryptWIFQPushButton") + sizePolicy.setHeightForWidth(self.decryptWIFQPushButton.sizePolicy().hasHeightForWidth()) + self.decryptWIFQPushButton.setSizePolicy(sizePolicy) + + self.decryptWIFHLayout.addWidget(self.decryptWIFQPushButton) + + + self.decryptWIFContainerQFrameVLayout.addWidget(self.decryptWIFAndButtonContainerQFrame) + + + self.decryptWIFfHorizontalLayout.addWidget(self.decryptWIFContainerQFrame) + + + self.verticalLayout.addWidget(self.decryptWIFAndButtonsContainerQFrame) + + self.outputQGroupBox = QGroupBox(self.bip38ContainerQFrame) + self.outputQGroupBox.setObjectName(u"outputQGroupBox") + self.outputGroupBoxVLayout = QVBoxLayout(self.outputQGroupBox) + self.outputGroupBoxVLayout.setSpacing(0) + self.outputGroupBoxVLayout.setObjectName(u"outputGroupBoxVLayout") + self.outputGroupBoxVLayout.setContentsMargins(0, 5, 0, 0) + self.outputQTextEdit = QTextEdit(self.outputQGroupBox) + self.outputQTextEdit.setObjectName(u"outputQTextEdit") + + self.outputGroupBoxVLayout.addWidget(self.outputQTextEdit) + + + self.verticalLayout.addWidget(self.outputQGroupBox) + + + self.centeralWidgetLayout.addWidget(self.bip38ContainerQFrame) + + MainWindow.setCentralWidget(self.centralwidget) + + self.retranslateUi(MainWindow) + + self.modeQStackedWidget.setCurrentIndex(0) + + + QMetaObject.connectSlotsByName(MainWindow) + # setupUi + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None)) + self.cryptocurrencyQLabel.setText(QCoreApplication.translate("MainWindow", u"Cryptocurrency", None)) + self.CryptocurrencyQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) + self.networkQLabel.setText(QCoreApplication.translate("MainWindow", u"Network", None)) + self.networkQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) + self.passphraseQLabel.setText(QCoreApplication.translate("MainWindow", u"Passphrase", None)) + self.modeQLabel.setText(QCoreApplication.translate("MainWindow", u"Mode", None)) + self.modeQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) + self.noECPrivateKeyQLabel.setText(QCoreApplication.translate("MainWindow", u"Private Key", None)) + self.noECWIFTypeQLabel.setText(QCoreApplication.translate("MainWindow", u"WIF Type", None)) + self.noECWIFTypeQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) + self.noECPrivateKeyConvertQPushButton.setText(QCoreApplication.translate("MainWindow", u"Convert", None)) + self.noECWIFQLabel.setText(QCoreApplication.translate("MainWindow", u"WIF", None)) + self.noECEncryptQPushButton.setText(QCoreApplication.translate("MainWindow", u"Encrypt", None)) + self.decryptWIFQLabel.setText(QCoreApplication.translate("MainWindow", u"Encrypted WIF", None)) + self.decryptWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Decrypt", None)) + self.outputQGroupBox.setTitle(QCoreApplication.translate("MainWindow", u"Output", None)) + self.outputQTextEdit.setPlaceholderText("") + # retranslateUi + diff --git a/desktop/utils.py b/desktop/utils.py new file mode 100644 index 0000000..167296f --- /dev/null +++ b/desktop/utils.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +# Copyright © 2024, Eyoel Tadesse +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit + +import os +from PySide6.QtWidgets import QLayout + + +def clear_layout(layout: QLayout, delete: bool = True) -> None: + """ + Clear all widgets from a layout. + + :param layout: The layout to clear. + :param delete: Whether to delete the widgets after removing them from the layout. + """ + if layout is not None: + while layout.count(): + item = layout.takeAt(0) + widget = item.widget() + if widget is not None and delete: + widget.deleteLater() + else: + clear_layout(item.layout()) + + +def resolve_path(path: str) -> str: + """ + Resolve the absolute path of a given relative path. + + :param path: The relative path to resolve. + :type path: str + :return: The absolute path of the given relative path. + :rtype: str + """ + return os.path.abspath(os.path.join(os.path.dirname(__file__), "../", path)) \ No newline at end of file diff --git a/launch.py b/launch.py new file mode 100644 index 0000000..193e2f8 --- /dev/null +++ b/launch.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + +# Copyright © 2024, Eyoel Tadesse +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit + +from PySide6.QtWidgets import QApplication + +import sys + +from desktop.main import BIP38Application + + +def main() -> None: + qapp: QApplication = QApplication(sys.argv) + main_application: BIP38Application = BIP38Application() + main_application.app.show() + sys.exit(qapp.exec()) + + +if __name__ == '__main__': + main() From e907cf37f09ad63b7e3d94acd7e6f45d2d3de88f Mon Sep 17 00:00:00 2001 From: axiom Date: Sat, 17 Aug 2024 13:55:07 +0300 Subject: [PATCH 02/56] Add: Stylesheet, No EC-Multiply implementation --- desktop/core.py | 31 +- desktop/main.py | 183 +++++++++- desktop/ui/bip38.ui | 28 +- desktop/ui/css/theme.css | 194 ++++++++++ desktop/ui/images/png/cil-arrow-bottom.png | Bin 0 -> 1821 bytes desktop/ui/images/png/cil-arrow-top.png | Bin 0 -> 1824 bytes desktop/ui/resources.qrc | 6 + desktop/ui/resources_rc.py | 405 +++++++++++++++++++++ desktop/ui/ui_bip38.py | 21 +- 9 files changed, 834 insertions(+), 34 deletions(-) create mode 100644 desktop/ui/images/png/cil-arrow-bottom.png create mode 100644 desktop/ui/images/png/cil-arrow-top.png create mode 100644 desktop/ui/resources.qrc create mode 100644 desktop/ui/resources_rc.py diff --git a/desktop/core.py b/desktop/core.py index c7879c7..3cc61ea 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -8,8 +8,11 @@ from PySide6.QtWidgets import ( QMainWindow, QWidget, QStackedWidget, + QFrame, QComboBox +) +from PySide6.QtCore import ( + Qt, QFileSystemWatcher ) -from PySide6.QtCore import QFileSystemWatcher from desktop.utils import resolve_path from desktop.ui.ui_bip38 import Ui_MainWindow @@ -63,6 +66,10 @@ def initialize(self) -> None: self.theme_watcher.fileChanged.connect(lambda: self.load_stylesheet(css_path)) self.load_stylesheet(css_path) + # Remove Combo shadow + for combo in self.findChildren(QComboBox): + combo.findChild(QFrame).setWindowFlags(Qt.Popup | Qt.NoDropShadowWindowHint) + def load_stylesheet(self, path: str) -> None: """ Load and apply a stylesheet from the specified path. @@ -74,24 +81,4 @@ def load_stylesheet(self, path: str) -> None: stylesheet = style_file.read() self.setStyleSheet(stylesheet) except Exception as e: - print(f"Failed to load stylesheet: {e}") - - def change_page(self, stacked_name: str, widget_name: str) -> None: - """ - Change the currently displayed page in a QStackedWidget. - - :param stacked_name: The name of the QStackedWidget. - :param widget_name: The name of the widget to display. - """ - qStackedWidget: Optional[QStackedWidget] = self.findChild(QStackedWidget, stacked_name) - - if qStackedWidget is None: - print(f"QStackWidget not found: {stacked_name}") - return - - qWidget: Optional[QWidget] = qStackedWidget.findChild(QWidget, widget_name) - - if qStackedWidget and qWidget: - qStackedWidget.setCurrentWidget(qWidget) - else: - print(f"ERROR changing page: '{stacked_name}' '{widget_name}'") \ No newline at end of file + print(f"Failed to load stylesheet: {e}") \ No newline at end of file diff --git a/desktop/main.py b/desktop/main.py index 745f482..5425388 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -4,6 +4,24 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://opensource.org/license/mit +import re +import json +import inspect +from typing import ( + Optional, Union +) + +from PySide6.QtGui import ( + QTextCharFormat, QTextCursor, QColor, + QTextFormat, QTextOption +) + +from bip38 import ( + cryptocurrencies, BIP38 +) +from bip38.cryptocurrencies import ICryptocurrency +from bip38.wif import private_key_to_wif + from desktop.core import Application @@ -11,19 +29,180 @@ class BIP38Application: """ Main application class for managing the UI and core functionalities. """ + ERROR_COLOR: QColor = QColor(255, 96, 96) + JSON_PATTERNS = [ + (re.compile(r'\".*?\"(?=\s*:)'), QColor(0, 191, 165)), # keys + (re.compile(r'\".*?\"'), QColor(0, 191, 165)), # string values + (re.compile(r'\b\d+\b'), QColor(125, 211, 252)), # numbers + (re.compile(r'\btrue\b|\bfalse\b|\bnull\b'), QColor(16, 182, 212)), # booleans/null + (re.compile(r'[{}[\],:]'), QColor(255, 255, 255)) # punctuation + ] + def __init__(self) -> None: """ Initialize the MainApplication class. """ super().__init__() - self.app = Application.instance() + self.app: Application = Application.instance() self.ui = self.app.ui + # bip38 cryptocurrencies {name: class} dict + self.cryptocurrencies: dict = { + name: cls for name, cls in inspect.getmembers(cryptocurrencies, inspect.isclass) + if issubclass(cls, ICryptocurrency) + } + del self.cryptocurrencies["ICryptocurrency"] # Remove Interface class from the dict + + self.modes: dict = { + "No EC-Multiply": self.ui.noECQWidget, + "EC-Multiply": self.ui.ecQWidget, + } + + self.wif_types = ["wif", "wif-compressed"] + self.__init_ui() def __init_ui(self) -> None: """ Initialize the UI components and their connections. """ - pass \ No newline at end of file + + self.ui.outputQTextEdit.setWordWrapMode(QTextOption.NoWrap) + + ## populate and bindings + self.ui.cryptocurrencyQComboBox.addItems( + sorted(self.cryptocurrencies.keys(), key=str.casefold) + ) + self.ui.cryptocurrencyQComboBox.currentTextChanged.connect(self.change_cryptocurrency) + + self.ui.modeQComboBox.addItems( + self.modes.keys() + ) + self.ui.modeQComboBox.currentTextChanged.connect(self.change_mode) + + self.ui.noECWIFTypeQComboBox.addItems(self.wif_types) + self.ui.noECWIFTypeQComboBox.setCurrentIndex(0) + + # button bindings + self.ui.noECPrivateKeyConvertQPushButton.clicked.connect(self.noec_convert_private_key) + self.ui.noECEncryptQPushButton.clicked.connect(self.noec_encrypt) + self.ui.decryptWIFQPushButton.clicked.connect(self.decrypt) + ## setting defualt values + + # will update network combo too + self.ui.cryptocurrencyQComboBox.setCurrentText("Bitcoin") + self.ui.modeQComboBox.setCurrentIndex(0) + + def change_cryptocurrency(self, cryptocurrency: str) -> None: + cryptocurrency_class: ICryptocurrency = self.cryptocurrencies[cryptocurrency] + + self.ui.networkQComboBox.clear() + self.ui.networkQComboBox.addItems( + [network.title() for network in cryptocurrency_class.NETWORKS.keys()] + ) + self.ui.networkQComboBox.setCurrentIndex(0) + + def change_mode(self, mode: str) -> None: + self.ui.modeQStackedWidget.setCurrentWidget(self.modes[mode]) + + def noec_convert_private_key(self): + private_key: str = self.ui.noECPrivateKeyQLineEdit.text().strip() + wif_type: str = self.ui.noECWIFTypeQComboBox.currentText() + + try: + wif: str = private_key_to_wif( + private_key=private_key, + cryptocurrency=self.get_cryptocurrency(), + network=self.get_netowrk(), + wif_type=wif_type + ) + self.ui.noECWIFQLineEdit.setText(wif) + except ValueError as e: + self.logerr(f"Error: Invalid Private Key") + + def noec_encrypt(self): + wif: str = self.ui.noECWIFQLineEdit.text().strip() + passphrase: str = self.ui.passphraseQLineEdit.text().strip() + + bip38: BIP38 = BIP38( + cryptocurrency=self.get_cryptocurrency(), + network=self.get_netowrk() + ) + + try: + encrypted_wif: str = bip38.encrypt( + wif=wif, + passphrase=passphrase + ) + self.log(encrypted_wif) + except ValueError as e: + self.logerr(f"Error: Invalid WIF") + + def decrypt(self): + encrypted_wif: str = self.ui.decryptWIFQLineEdit.text().strip() + passphrase: str = self.ui.passphraseQLineEdit.text().strip() + + bip38: BIP38 = BIP38( + cryptocurrency=self.get_cryptocurrency(), + network=self.get_netowrk() + ) + + try: + decrypted_wif: dict = bip38.decrypt( + encrypted_wif=encrypted_wif, + passphrase=passphrase, + detail=True + ) + self.log(decrypted_wif) + except ValueError as e: + self.logerr(f"Error: Invalid Encrypted WIF") + + def get_cryptocurrency(self): + cryptocurrency_name: str = self.ui.cryptocurrencyQComboBox.currentText() + cryptocurrency: ICryptocurrency = self.cryptocurrencies[cryptocurrency_name] + return cryptocurrency + + def get_netowrk(self): + return self.ui.networkQComboBox.currentText().lower() + + + def log(self, data: Optional[Union[str, dict]], end="\n") -> None: + if isinstance(data, dict): + data = json.dumps(data, indent=4) + + cursor = self.ui.outputQTextEdit.textCursor() + cursor.movePosition(QTextCursor.End) + + # Apply highlighting + for line in data.splitlines(): + pos = 0 + while pos < len(line): + match_found = False + for pattern, color in BIP38Application.JSON_PATTERNS: + match = pattern.match(line, pos) + if match: + cformat = QTextCharFormat() + cformat.setForeground(color) + cursor.insertText(match.group(), cformat) + pos = match.end() + match_found = True + break + if not match_found: + cursor.insertText(line[pos]) + pos += 1 + cursor.insertText(end) + + self.ui.outputQTextEdit.setTextCursor(cursor) + self.ui.outputQTextEdit.ensureCursorVisible() + + def logerr(self, err: str , end: str="\n") -> None: + cformat = QTextCharFormat() + cformat.setForeground(BIP38Application.ERROR_COLOR) + + cursor = self.ui.outputQTextEdit.textCursor() + cursor.movePosition(QTextCursor.End) + cursor.insertText(err + end, cformat) + + self.ui.outputQTextEdit.setTextCursor(cursor) + self.ui.outputQTextEdit.ensureCursorVisible() \ No newline at end of file diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui index 35fe6c0..2e9e54f 100644 --- a/desktop/ui/bip38.ui +++ b/desktop/ui/bip38.ui @@ -80,6 +80,12 @@ + + + 150 + 16777215 + + 5 @@ -138,7 +144,7 @@ - + (Select) @@ -291,7 +297,7 @@ - 115 + 145 16777215 @@ -480,7 +486,7 @@ - 115 + 145 16777215 @@ -611,6 +617,9 @@ + + PointingHandCursor + Convert @@ -743,6 +752,9 @@ 0 + + PointingHandCursor + Encrypt @@ -880,6 +892,9 @@ 0 + + PointingHandCursor + Decrypt @@ -917,6 +932,9 @@ + + true + @@ -931,6 +949,8 @@ - + + + diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index e69de29..7d6a499 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -0,0 +1,194 @@ +QMainWindow { + background-color: rgba(16, 21, 27, 0.9);; +} + +QWidget { + color: white; + font: 10pt "Segoe UI"; +} + +QFrame{ + background-color: transparent; +} + +QLabel { + font: 11pt "Segoe UI"; + color: rgb(255, 255, 255); +} + + +QGroupBox { + background-color: rgba(0, 0, 0, 0.2); + border: 1px solid rgba(28, 150, 20, 0.25); + border-radius: 3px; + margin-top: 8px; + font: 11pt "Segoe UI"; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 10px; + padding: 0 3px 0 3px; +} + +QGroupBox:disabled{ + color: rgba(255, 255, 255, 0.5); + background-color: rgba(16, 21, 27, 0.5); +} + +/* Scroll bar */ +QScrollBar:vertical { + border: none; + background: rgb(16, 21, 27); + width: 8px; + border-radius: 2px; +} + + QScrollBar::handle:vertical { + background: #00bfa5; + min-height: 55px; + border-radius: 2px; + } + + QScrollBar::add-line:vertical { + border: none; + height: 20px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + subcontrol-position: bottom; + subcontrol-origin: margin; + } + + QScrollBar::sub-line:vertical { + border: none; + height: 20px; + border-top-left-radius: 0px; + border-top-right-radius: 0px; + subcontrol-position: top; + subcontrol-origin: margin; + } + + QScrollBar::up-arrow:vertical, + QScrollBar::down-arrow:vertical { + background: transparent; + } + +QScrollBar::add-page:vertical, +QScrollBar::sub-page:vertical{ + background: rgba(0, 0, 0, 0.3); +} + + +QScrollBar:horizontal { + border: none; + background: rgb(16, 21, 27); + width: 8px; + border-radius: 2px; +} + +/* Inputs */ +QComboBox { + background-color: rgb(25, 30, 36); + border-radius: 5px; + color: rgb(255, 255, 255); + padding: 5px 10px; + height: 25px; +} + + +QComboBox:disabled{ + background-color: rgba(25, 30, 36, 0.5); +} + +QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 30px; + border-left-width: 3px; + border-left-style: solid; + background-image: url(:/png/images/png/cil-arrow-bottom.png); + background-position: center; + background-repeat: no-repeat; +} + +QComboBox::drop-down:checked { + background-image: url(:/png/images/png/cil-arrow-top.png); +} + +QComboBox::drop-down:hover { + background-color: transparent; +} + + +QComboBox QAbstractItemView { + color: white; + border: none; + padding: 10px; + background-color: rgba(15, 33, 42, 0.5); + outline: none; +} + +QComboBox QAbstractItemView::item { + padding: 5px; + width: fit-content; +} + +QComboBox QAbstractItemView::item:hover { + outline: none; +} + +QComboBox QAbstractItemView::item:selected { + background-color: rgb(16, 21, 27); + selection-background-color: white; + outline: none; +} + +QLineEdit { + font: 9pt "Segoe UI"; + letter-spacing: 1px; + background-color: rgb(25, 30, 36); + border: 1px solid rgba(0, 0, 0, 0.0); + border-radius: 5px; + color: rgb(255, 255, 255); + padding: 4px 7px; + height: 25px; + selection-color: #000000; + selection-background-color: #00bfa5; +} + +QLineEdit:hover { + background-color: rgba(25, 30, 36, 100); +} + +QLineEdit:focus { + background-color: rgba(25, 30, 36, 100); + border: 1px solid rgba(0, 191, 165, 0.8); +} + +QLineEdit::disabled { + background-color: rgba(25, 30, 36, 0.5); +} + +QTextEdit { + background-color: transparent; + border-color: rgb(25, 30, 36); + border-radius: 10px; + color: rgb(255, 255, 255); + padding: 0px 10px; + height: 25px; + selection-color: #000000; + selection-background-color: #00bfa5; + margin-top: 10px; + margin-bottom: 5px; +} + +QPushButton { + font: 10pt "Segoe UI"; + font-weight: lighter; + letter-spacing: 1px; + background-color: rgb(25, 30, 36); + border-radius: 3px; + color: rgb(255, 255, 255); + padding: 5px 10px; + height: 25px; +} diff --git a/desktop/ui/images/png/cil-arrow-bottom.png b/desktop/ui/images/png/cil-arrow-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..fbe49737508ba7498b7f8e0c780e8b8b05feff10 GIT binary patch literal 1821 zcmbVNZD`zN9M4KETctRe$j}d_=?8V1tx`-w}A+vxKjL31wmW)B8s0BM0}|QUpi3es-Oc0`sD6<-lTiMK$0iV z^Lu{(-~Z+L=g9ETzMk&ex+#k4$qc5m9 zcT&_1>rO5o=8gMx6IVEB;R51n6_21Ps((+-gXTC2=>jS`Zh~2R|3ij$tORpFHh|%! zP{|pb_R+}nP|lnlH#LjdvzzX(>4czyLP*ytWjD}k38v1glW{c7GjtsijwhI8WRT7q z!*mM!h?Y5pHHDZ;$2Cq+Vn9;vr9~iUJWzQ-Vu7FoMVI4r^J0iK-?H^=`o5+u@|9pp zVd&{RU#(WTs>ETx$P1cAI7D6)S%P4LDK~^Q)(!eL7}6*(ea8zO?9ve;FUk)WDW5Ez!6Kt8fjr|HF4m%ZCM7-w~8M+llJ%!8ICx(eSseL|^N)7wicFJTS z$nM)qX9iM=peYI~azb6MVdxn*2%&4DOgh1k;Bby(>58bCimk<2WFwo%k4bF7j;pK< zZ2$y;a0tXuJ!5(rn-ft9MEe`3!NMlt_*b4JNoHIXG!|MKU^O+Su$o{Y)`SHG7Hkm} zU}1yp0pB495|-OpBUKh*gp#U?T3liUBv>p2F_~3WGtSB=F3WMC+LjWF%D$m%&Q2V4yzwNIskPiQOCY{Ww&z=23*xxDK^33|E-N(%=pUK`dKX>Pa zt_5W|y*6f^dS&dM{Ormji=Uo*;=3bHZF?Gap*MhW@%ZDT%a0v9mKBkFymV%va(g(k z>pb{ore}b9iS2yz)?a_PIJ=TO^zPQ5-&^{L_ZC@h|IvfL9hLfjJp4=d*Gu~8Kedx5 zl-Ex7ez4LxoA^XutA2IXdC+)PD{o(aIMXrr)``{pL#L`@?#tCDUthZUkNNYb4<$$6 zS={mJ$1AY3!sOxT&6 zG|A3o)u9!XRxId?meQ9ZebA~|oSZ(bh=1o~3R_yl=x^q+MPk>4#Ve?#(m*iPGE6cS~uI zwqvMZCTATqIXjloXQy@5pm#h=MXDMhC?OA0)l$)NwQ7`Z@M>i2PjfWYfOykUdc-$K zO{K@F7UIVfwg{js>6Kjr<(<+Evw!%aL##N!s@htFNY5)zrgR^IxV#BzhbEt?)$nso*0+Pj?9B#Qw_Q$b4mL8M9yuVfpiAjd!{OTr=xN>&Ps zSs>@yYF=C&In`*x8Ie=!vw$tZ{B7o%fq`Nw*H`{CU4iS&GM_{z|5 zU-0W=JzJHYZTtGKyZcVPwrQ9?xP}kn_a8rcU?{j)jnu{2`UjKW|MYZ0c0OAEtNzmM zNOkn|MfB7u_{)6x@QKsX$qU$uE{p zJ|VnUo_l@&va+CjHSlO6xp~czvnwO;%kA3bcm5n$TxSm6{^R4a{R)5K)2qJ^-8ysZ zIQva+eqhg`cl&?kdTWR0E^qmE?aK>4I|r7pT-tak@%GJY=WlF)AFA0$Rz?^6|FBeI LEdKfEt8e}T2PacE literal 0 HcmV?d00001 diff --git a/desktop/ui/resources.qrc b/desktop/ui/resources.qrc new file mode 100644 index 0000000..a733b9f --- /dev/null +++ b/desktop/ui/resources.qrc @@ -0,0 +1,6 @@ + + + images/png/cil-arrow-top.png + images/png/cil-arrow-bottom.png + + diff --git a/desktop/ui/resources_rc.py b/desktop/ui/resources_rc.py new file mode 100644 index 0000000..374b2d9 --- /dev/null +++ b/desktop/ui/resources_rc.py @@ -0,0 +1,405 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 6.7.2 +# WARNING! All changes made in this file will be lost! + +from PySide6 import QtCore + +qt_resource_data = b"\ +\x00\x00\x06\xed\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\ +\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x05\xf1iTXtXML\ +:com.adobe.xmp\x00\x00\ +\x00\x00\x00 \ + \ + <\ +/xmpMM:History> \ + \x8d\x0b\ +\x9e5\x00\x00\x00\xa2IDAT8\x11c\xf8\xff\xff\ +?\x03%\x98d\x0d\xcf\x9e=c\x04a\xb2\x0c\x00j\ +d\x22\xdb\x05@\xcd\xccP\xda\x04\x88\x8bH2\x00I\ +\xb3&\x10?\x05\xe2\x0a\x98w0\xfcG\x84\xe6bd\ +\xb5\x18\x1a\x91\xfd\x89\xa6\xf9\x09\xcc\xe90qd\x03\xa4\ +\x80x'\x10\xebB\xf9,Xl\xc6\xd0\x8c\x12\x06@\ +\x892 ~\x0e\xc4\x86Hb\xe8\xcef\xc6\x1b\x0b@\ +\x05i@\xfc\x16\x88-\x81X\xe5\x19\x04\xe0\xd4\x8c\xee\ +\x02&(\x1d\x01\xb5\x15\xa7\xb3\xf1\xb9\x00fH\x00\x10\ +\xe7\xe2J \ + \ + <\ +/xmpMM:History> \ + \xacr\ +\xe7\xb6\x00\x00\x00\xd2IDAT8\x8d\xc5\xd31J\ +\x041\x14\x87\xf1_f#.\x82\xde\xc4R\x0f\xb0\xae\ +'\xf0\x06\xb66\xdeD\xef`c\xad\x9d`+X\x8f\ +\xe0^\xc0\xca\xc6~\xdd\x89\x85\x09\x86a\x06e\xa70\ +M\xf8\x93|_\xde{\x90\x90R2e5\x93h\xc4\ +\xb6m\x1btS*\xe80\xdb\x82\x0dE\x00\x9b-\x04\ +\xa9\x16\xec\xe3\xf8\x8f\xe0A}\xb7\x08\xe6\xb8\xc1\xe5/\ +p\xc0-.J\x8eY\xf2\x8e3<\xe4\x83\xeb\x0a\xda\ +\xc1:\xc3\xf79\x9f\x976\xa2\x9f!\xbe\xe0\x04\x8f=\ +\xc9:\xefw\xd8\xc5iUM\x8a9l\x10\xf1ZI\ +\x02\xae\xaa\x97\xe7XV\xadw2T\xd6\xe7\x80\xa4\xc1\ +\x11\xf6\xb0\xe8\xc3}A_\xb2\xc0\x13\x9e\xc7\xe0!A\ +\x91\xcc\xb0\xc2!>\xc6\xe01\x01\xdf3i\xf0\x96s\ +\x18\x82!\xfc\xfbo\xfc\x02d\x060\xdc\x02*\xb0\x83\ +\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x07 \ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\ +\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x05\xf1iTXtXML\ +:com.adobe.xmp\x00\x00\ +\x00\x00\x00 \ + \ + <\ +/xmpMM:History> \ + \xaa~\ +\x0dL\x00\x00\x00\xd5IDAT8\x8d\xc5\xd3=N\ +\x031\x14\x04\xe0\xcf\xbbKEM\xc5\x05@\xe2(@\ +\x0d\x05\xc7\xa1\x01!8\x01'\x80\x13\xf0s\x80\xb4{\ +\x12@\x22\x89\x021\x05o\x91\x15\x9c\x88(\x05\xd3x\ +<~3z~\x96S\xce\xd9&h6r\xa3\xeb\xfb\ +~U\xf8 Date: Sat, 17 Aug 2024 14:37:29 +0300 Subject: [PATCH 03/56] Modify: BIP38 requirements location --- requirements/bip38.txt => requirements.txt | 0 setup.py | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) rename requirements/bip38.txt => requirements.txt (100%) diff --git a/requirements/bip38.txt b/requirements.txt similarity index 100% rename from requirements/bip38.txt rename to requirements.txt diff --git a/setup.py b/setup.py index 3622ee1..f1875fd 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ # requirements/{name}.txt def get_requirements(name: str) -> List[str]: - with open(f"requirements/{name}.txt", "r") as requirements: + with open(f"{name}.txt", "r") as requirements: return list(map(str.strip, requirements.read().split("\n"))) @@ -46,11 +46,11 @@ def get_requirements(name: str) -> List[str]: keywords=info.__keywords__, python_requires=">=3.9,<4", packages=find_packages(exclude=["tests*"]), - install_requires=get_requirements(name="bip38"), + install_requires=get_requirements(name="requirements"), include_package_data=True, extras_require=dict( - docs=get_requirements(name="docs"), - tests=get_requirements(name="tests") + docs=get_requirements(name="requirements/docs"), + tests=get_requirements(name="requirements/tests") ), classifiers=[ "Development Status :: 5 - Production/Stable", From 1ff4ce092404a5c144952ce7e3e72dfc5994e603 Mon Sep 17 00:00:00 2001 From: axiom Date: Tue, 20 Aug 2024 17:58:39 +0300 Subject: [PATCH 04/56] Add: ec-multiply ui --- desktop/ui/bip38.ui | 717 ++++++++++++++++++++++++++++++++++++++++- desktop/ui/ui_bip38.py | 361 ++++++++++++++++++++- 2 files changed, 1057 insertions(+), 21 deletions(-) diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui index 2e9e54f..46ed4a5 100644 --- a/desktop/ui/bip38.ui +++ b/desktop/ui/bip38.ui @@ -6,8 +6,8 @@ 0 0 - 705 - 455 + 804 + 409 @@ -374,7 +374,7 @@ - 0 + 1 @@ -588,7 +588,7 @@ - 0 + 5 0 @@ -771,7 +771,714 @@ - + + + + 10 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Owner Salt + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Generate + + + + + + + + + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Seed + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Generate + + + + + + + + + + + + + + 100 + 16777215 + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Lot + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + 100 + 16777215 + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Sequence + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + + + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Intermediate Passphrase + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Generate + + + + + + + + + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Confirm Code + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Verify + + + + + + + + + + + + + + diff --git a/desktop/ui/ui_bip38.py b/desktop/ui/ui_bip38.py index 808e58f..bfdcb0d 100644 --- a/desktop/ui/ui_bip38.py +++ b/desktop/ui/ui_bip38.py @@ -18,7 +18,7 @@ class Ui_MainWindow(object): def setupUi(self, MainWindow): if not MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") - MainWindow.resize(705, 455) + MainWindow.resize(804, 409) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") self.centeralWidgetLayout = QVBoxLayout(self.centralwidget) @@ -59,7 +59,7 @@ def setupUi(self, MainWindow): self.cryptocurrencyLabelContainerQFrameHLayout.addWidget(self.cryptocurrencyQLabel) - self.cryptocurrencyLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + self.cryptocurrencyLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.cryptocurrencyLabelContainerQFrameHLayout.addItem(self.cryptocurrencyLabelContainerQFrameHSpacer) @@ -92,7 +92,7 @@ def setupUi(self, MainWindow): self.networkLabelContainerQFrameHLayout.addWidget(self.networkQLabel) - self.networkLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + self.networkLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.networkLabelContainerQFrameHLayout.addItem(self.networkLabelContainerQFrameHSpacer) @@ -124,7 +124,7 @@ def setupUi(self, MainWindow): self.passphraseLabelContainerQFrameHLayout.addWidget(self.passphraseQLabel) - self.passphraseLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + self.passphraseLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.passphraseLabelContainerQFrameHLayout.addItem(self.passphraseLabelContainerQFrameHSpacer) @@ -157,7 +157,7 @@ def setupUi(self, MainWindow): self.modeLabelContainerQFrameHLayout.addWidget(self.modeQLabel) - self.modeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + self.modeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.modeLabelContainerQFrameHLayout.addItem(self.modeLabelContainerQFrameHSpacer) @@ -208,7 +208,7 @@ def setupUi(self, MainWindow): self.noECPrivateKeyLabelContainerQFrameHLayout.addWidget(self.noECPrivateKeyQLabel) - self.noECPrivateKeyLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + self.noECPrivateKeyLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.noECPrivateKeyLabelContainerQFrameHLayout.addItem(self.noECPrivateKeyLabelContainerQFrameHSpacer) @@ -241,7 +241,7 @@ def setupUi(self, MainWindow): self.noECWIFTypeLabelContainerQFrameHLayout.addWidget(self.noECWIFTypeQLabel) - self.noECWIFTypeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + self.noECWIFTypeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.noECWIFTypeLabelContainerQFrameHLayout.addItem(self.noECWIFTypeLabelContainerQFrameHSpacer) @@ -267,16 +267,16 @@ def setupUi(self, MainWindow): self.noECPrivateKeyButtonContainerQFrame.setObjectName(u"noECPrivateKeyButtonContainerQFrame") self.noECPrivateKeyButtonContainerQFrame.setLayoutDirection(Qt.LayoutDirection.LeftToRight) self.noECPrivateKeyButtonHLayout = QVBoxLayout(self.noECPrivateKeyButtonContainerQFrame) - self.noECPrivateKeyButtonHLayout.setSpacing(0) + self.noECPrivateKeyButtonHLayout.setSpacing(5) self.noECPrivateKeyButtonHLayout.setObjectName(u"noECPrivateKeyButtonHLayout") self.noECPrivateKeyButtonHLayout.setContentsMargins(0, 0, 0, 0) - self.noECPrivateKeyButtonSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + self.noECPrivateKeyButtonSpacer = QSpacerItem(20, 40, QSizePolicy.Expanding, QSizePolicy.Minimum) self.noECPrivateKeyButtonHLayout.addItem(self.noECPrivateKeyButtonSpacer) self.noECPrivateKeyConvertQPushButton = QPushButton(self.noECPrivateKeyButtonContainerQFrame) self.noECPrivateKeyConvertQPushButton.setObjectName(u"noECPrivateKeyConvertQPushButton") - self.noECPrivateKeyConvertQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) + self.noECPrivateKeyConvertQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) self.noECPrivateKeyButtonHLayout.addWidget(self.noECPrivateKeyConvertQPushButton) @@ -314,7 +314,7 @@ def setupUi(self, MainWindow): self.noECWIFLabelContainerQFrameHLayout.addWidget(self.noECWIFQLabel) - self.noECWIFLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + self.noECWIFLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.noECWIFLabelContainerQFrameHLayout.addItem(self.noECWIFLabelContainerQFrameHSpacer) @@ -336,12 +336,12 @@ def setupUi(self, MainWindow): self.noECEncryptQPushButton = QPushButton(self.noECWIFAndEncyptContainerQFrame) self.noECEncryptQPushButton.setObjectName(u"noECEncryptQPushButton") - sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.noECEncryptQPushButton.sizePolicy().hasHeightForWidth()) self.noECEncryptQPushButton.setSizePolicy(sizePolicy) - self.noECEncryptQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) + self.noECEncryptQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) self.noECWIFContainerVLayout.addWidget(self.noECEncryptQPushButton) @@ -357,6 +357,325 @@ def setupUi(self, MainWindow): self.modeQStackedWidget.addWidget(self.noECQWidget) self.ecQWidget = QWidget() self.ecQWidget.setObjectName(u"ecQWidget") + self.ecVLayout = QVBoxLayout(self.ecQWidget) + self.ecVLayout.setSpacing(10) + self.ecVLayout.setObjectName(u"ecVLayout") + self.ecVLayout.setContentsMargins(0, 0, 0, 0) + self.ecSaltMainContainerQFrame = QFrame(self.ecQWidget) + self.ecSaltMainContainerQFrame.setObjectName(u"ecSaltMainContainerQFrame") + self.ecSaltMainContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.ecSaltMainContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.ecOwnerSaltMainContainerHLayout = QHBoxLayout(self.ecSaltMainContainerQFrame) + self.ecOwnerSaltMainContainerHLayout.setSpacing(15) + self.ecOwnerSaltMainContainerHLayout.setObjectName(u"ecOwnerSaltMainContainerHLayout") + self.ecOwnerSaltMainContainerHLayout.setContentsMargins(0, 0, 0, 0) + self.ecOwnerSaltContainerQFrame = QFrame(self.ecSaltMainContainerQFrame) + self.ecOwnerSaltContainerQFrame.setObjectName(u"ecOwnerSaltContainerQFrame") + self.ecOwnerSaltContainerQFrameVLayout = QVBoxLayout(self.ecOwnerSaltContainerQFrame) + self.ecOwnerSaltContainerQFrameVLayout.setSpacing(5) + self.ecOwnerSaltContainerQFrameVLayout.setObjectName(u"ecOwnerSaltContainerQFrameVLayout") + self.ecOwnerSaltContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.ecOwnerSaltLableContainerQFrame = QFrame(self.ecOwnerSaltContainerQFrame) + self.ecOwnerSaltLableContainerQFrame.setObjectName(u"ecOwnerSaltLableContainerQFrame") + self.ecOwnerSaltLableContainerQFrameHLayout = QHBoxLayout(self.ecOwnerSaltLableContainerQFrame) + self.ecOwnerSaltLableContainerQFrameHLayout.setSpacing(15) + self.ecOwnerSaltLableContainerQFrameHLayout.setObjectName(u"ecOwnerSaltLableContainerQFrameHLayout") + self.ecOwnerSaltLableContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecOwnerSaltQLabel = QLabel(self.ecOwnerSaltLableContainerQFrame) + self.ecOwnerSaltQLabel.setObjectName(u"ecOwnerSaltQLabel") + + self.ecOwnerSaltLableContainerQFrameHLayout.addWidget(self.ecOwnerSaltQLabel) + + self.ecOwnerSaltLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + + self.ecOwnerSaltLableContainerQFrameHLayout.addItem(self.ecOwnerSaltLabelContainerQFrameHSpacer) + + + self.ecOwnerSaltContainerQFrameVLayout.addWidget(self.ecOwnerSaltLableContainerQFrame) + + self.ecOwnerSaltAndGenerateContainerQFrame = QFrame(self.ecOwnerSaltContainerQFrame) + self.ecOwnerSaltAndGenerateContainerQFrame.setObjectName(u"ecOwnerSaltAndGenerateContainerQFrame") + self.ecOwnerSaltAndGenerateContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.ecOwnerSaltAndGenerateContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.ecOwnerSaltAndGenerateContainerQFrameHLayout = QHBoxLayout(self.ecOwnerSaltAndGenerateContainerQFrame) + self.ecOwnerSaltAndGenerateContainerQFrameHLayout.setSpacing(15) + self.ecOwnerSaltAndGenerateContainerQFrameHLayout.setObjectName(u"ecOwnerSaltAndGenerateContainerQFrameHLayout") + self.ecOwnerSaltAndGenerateContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecOwnerSaltQLineEdit = QLineEdit(self.ecOwnerSaltAndGenerateContainerQFrame) + self.ecOwnerSaltQLineEdit.setObjectName(u"ecOwnerSaltQLineEdit") + + self.ecOwnerSaltAndGenerateContainerQFrameHLayout.addWidget(self.ecOwnerSaltQLineEdit) + + self.ecOwnerSaltGenerateQPushButton = QPushButton(self.ecOwnerSaltAndGenerateContainerQFrame) + self.ecOwnerSaltGenerateQPushButton.setObjectName(u"ecOwnerSaltGenerateQPushButton") + sizePolicy.setHeightForWidth(self.ecOwnerSaltGenerateQPushButton.sizePolicy().hasHeightForWidth()) + self.ecOwnerSaltGenerateQPushButton.setSizePolicy(sizePolicy) + self.ecOwnerSaltGenerateQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + + self.ecOwnerSaltAndGenerateContainerQFrameHLayout.addWidget(self.ecOwnerSaltGenerateQPushButton) + + + self.ecOwnerSaltContainerQFrameVLayout.addWidget(self.ecOwnerSaltAndGenerateContainerQFrame) + + + self.ecOwnerSaltMainContainerHLayout.addWidget(self.ecOwnerSaltContainerQFrame) + + self.ecSeedContainerQFrame = QFrame(self.ecSaltMainContainerQFrame) + self.ecSeedContainerQFrame.setObjectName(u"ecSeedContainerQFrame") + self.ecSeedContainerQFrameHLayout = QVBoxLayout(self.ecSeedContainerQFrame) + self.ecSeedContainerQFrameHLayout.setSpacing(5) + self.ecSeedContainerQFrameHLayout.setObjectName(u"ecSeedContainerQFrameHLayout") + self.ecSeedContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecSeedLabelContainerQFrame = QFrame(self.ecSeedContainerQFrame) + self.ecSeedLabelContainerQFrame.setObjectName(u"ecSeedLabelContainerQFrame") + self.ecSeedLabelContainerQFrameHLayout = QHBoxLayout(self.ecSeedLabelContainerQFrame) + self.ecSeedLabelContainerQFrameHLayout.setSpacing(15) + self.ecSeedLabelContainerQFrameHLayout.setObjectName(u"ecSeedLabelContainerQFrameHLayout") + self.ecSeedLabelContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecSeedQLabel = QLabel(self.ecSeedLabelContainerQFrame) + self.ecSeedQLabel.setObjectName(u"ecSeedQLabel") + + self.ecSeedLabelContainerQFrameHLayout.addWidget(self.ecSeedQLabel) + + self.ecSeedLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + + self.ecSeedLabelContainerQFrameHLayout.addItem(self.ecSeedLabelContainerQFrameHSpacer) + + + self.ecSeedContainerQFrameHLayout.addWidget(self.ecSeedLabelContainerQFrame) + + self.ecSeedAndGenerateContainerQFrame = QFrame(self.ecSeedContainerQFrame) + self.ecSeedAndGenerateContainerQFrame.setObjectName(u"ecSeedAndGenerateContainerQFrame") + self.ecSeedAndGenerateContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.ecSeedAndGenerateContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.ecSeedAndGenerateContainerQFrameHLayout = QHBoxLayout(self.ecSeedAndGenerateContainerQFrame) + self.ecSeedAndGenerateContainerQFrameHLayout.setSpacing(15) + self.ecSeedAndGenerateContainerQFrameHLayout.setObjectName(u"ecSeedAndGenerateContainerQFrameHLayout") + self.ecSeedAndGenerateContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecSeedQLineEdit = QLineEdit(self.ecSeedAndGenerateContainerQFrame) + self.ecSeedQLineEdit.setObjectName(u"ecSeedQLineEdit") + + self.ecSeedAndGenerateContainerQFrameHLayout.addWidget(self.ecSeedQLineEdit) + + self.ecSeedGenerateQPushButton = QPushButton(self.ecSeedAndGenerateContainerQFrame) + self.ecSeedGenerateQPushButton.setObjectName(u"ecSeedGenerateQPushButton") + sizePolicy.setHeightForWidth(self.ecSeedGenerateQPushButton.sizePolicy().hasHeightForWidth()) + self.ecSeedGenerateQPushButton.setSizePolicy(sizePolicy) + self.ecSeedGenerateQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + + self.ecSeedAndGenerateContainerQFrameHLayout.addWidget(self.ecSeedGenerateQPushButton) + + + self.ecSeedContainerQFrameHLayout.addWidget(self.ecSeedAndGenerateContainerQFrame) + + + self.ecOwnerSaltMainContainerHLayout.addWidget(self.ecSeedContainerQFrame) + + self.ecLotContainerQFrame = QFrame(self.ecSaltMainContainerQFrame) + self.ecLotContainerQFrame.setObjectName(u"ecLotContainerQFrame") + self.ecLotContainerQFrame.setMaximumSize(QSize(100, 16777215)) + self.ecLotContainerQFrameVLayout = QVBoxLayout(self.ecLotContainerQFrame) + self.ecLotContainerQFrameVLayout.setSpacing(5) + self.ecLotContainerQFrameVLayout.setObjectName(u"ecLotContainerQFrameVLayout") + self.ecLotContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.ecLotLableContainerQFrame = QFrame(self.ecLotContainerQFrame) + self.ecLotLableContainerQFrame.setObjectName(u"ecLotLableContainerQFrame") + self.ecLotLableContainerQFrameHLayout = QHBoxLayout(self.ecLotLableContainerQFrame) + self.ecLotLableContainerQFrameHLayout.setSpacing(15) + self.ecLotLableContainerQFrameHLayout.setObjectName(u"ecLotLableContainerQFrameHLayout") + self.ecLotLableContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecLotQLabel = QLabel(self.ecLotLableContainerQFrame) + self.ecLotQLabel.setObjectName(u"ecLotQLabel") + + self.ecLotLableContainerQFrameHLayout.addWidget(self.ecLotQLabel) + + self.ecLotLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + + self.ecLotLableContainerQFrameHLayout.addItem(self.ecLotLabelContainerQFrameHSpacer) + + + self.ecLotContainerQFrameVLayout.addWidget(self.ecLotLableContainerQFrame) + + self.ecLotEditContainerQFrame = QFrame(self.ecLotContainerQFrame) + self.ecLotEditContainerQFrame.setObjectName(u"ecLotEditContainerQFrame") + self.ecLotEditContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.ecLotEditContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.ecLotEditContainerQFrameHLayout = QHBoxLayout(self.ecLotEditContainerQFrame) + self.ecLotEditContainerQFrameHLayout.setSpacing(0) + self.ecLotEditContainerQFrameHLayout.setObjectName(u"ecLotEditContainerQFrameHLayout") + self.ecLotEditContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecLotQLineEdit = QLineEdit(self.ecLotEditContainerQFrame) + self.ecLotQLineEdit.setObjectName(u"ecLotQLineEdit") + + self.ecLotEditContainerQFrameHLayout.addWidget(self.ecLotQLineEdit) + + + self.ecLotContainerQFrameVLayout.addWidget(self.ecLotEditContainerQFrame) + + + self.ecOwnerSaltMainContainerHLayout.addWidget(self.ecLotContainerQFrame) + + self.ecSequenceContainerQFrame = QFrame(self.ecSaltMainContainerQFrame) + self.ecSequenceContainerQFrame.setObjectName(u"ecSequenceContainerQFrame") + self.ecSequenceContainerQFrame.setMaximumSize(QSize(100, 16777215)) + self.ecSequenceContainerQFrameVLayout = QVBoxLayout(self.ecSequenceContainerQFrame) + self.ecSequenceContainerQFrameVLayout.setSpacing(5) + self.ecSequenceContainerQFrameVLayout.setObjectName(u"ecSequenceContainerQFrameVLayout") + self.ecSequenceContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.ecSequenceLableContainerQFrame = QFrame(self.ecSequenceContainerQFrame) + self.ecSequenceLableContainerQFrame.setObjectName(u"ecSequenceLableContainerQFrame") + self.ecSequenceLableContainerQFrameHLayout = QHBoxLayout(self.ecSequenceLableContainerQFrame) + self.ecSequenceLableContainerQFrameHLayout.setSpacing(15) + self.ecSequenceLableContainerQFrameHLayout.setObjectName(u"ecSequenceLableContainerQFrameHLayout") + self.ecSequenceLableContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecSequenceQLabel = QLabel(self.ecSequenceLableContainerQFrame) + self.ecSequenceQLabel.setObjectName(u"ecSequenceQLabel") + + self.ecSequenceLableContainerQFrameHLayout.addWidget(self.ecSequenceQLabel) + + self.ecSequenceLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + + self.ecSequenceLableContainerQFrameHLayout.addItem(self.ecSequenceLabelContainerQFrameHSpacer) + + + self.ecSequenceContainerQFrameVLayout.addWidget(self.ecSequenceLableContainerQFrame) + + self.ecSequenceEditContainerQFrame = QFrame(self.ecSequenceContainerQFrame) + self.ecSequenceEditContainerQFrame.setObjectName(u"ecSequenceEditContainerQFrame") + self.ecSequenceEditContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.ecSequenceEditContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.ecSequenceEditContainerQFrameHLayout = QHBoxLayout(self.ecSequenceEditContainerQFrame) + self.ecSequenceEditContainerQFrameHLayout.setSpacing(0) + self.ecSequenceEditContainerQFrameHLayout.setObjectName(u"ecSequenceEditContainerQFrameHLayout") + self.ecSequenceEditContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecSequenceQLineEdit = QLineEdit(self.ecSequenceEditContainerQFrame) + self.ecSequenceQLineEdit.setObjectName(u"ecSequenceQLineEdit") + self.ecSequenceQLineEdit.setMinimumSize(QSize(0, 0)) + + self.ecSequenceEditContainerQFrameHLayout.addWidget(self.ecSequenceQLineEdit) + + + self.ecSequenceContainerQFrameVLayout.addWidget(self.ecSequenceEditContainerQFrame) + + + self.ecOwnerSaltMainContainerHLayout.addWidget(self.ecSequenceContainerQFrame) + + + self.ecVLayout.addWidget(self.ecSaltMainContainerQFrame) + + self.ecIPAndConfirmMainContainerQFrame = QFrame(self.ecQWidget) + self.ecIPAndConfirmMainContainerQFrame.setObjectName(u"ecIPAndConfirmMainContainerQFrame") + self.ecIPAndConfirmMainContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.ecIPAndConfirmMainContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.ecIntermidatMainContainerQFrameHLayout = QHBoxLayout(self.ecIPAndConfirmMainContainerQFrame) + self.ecIntermidatMainContainerQFrameHLayout.setSpacing(15) + self.ecIntermidatMainContainerQFrameHLayout.setObjectName(u"ecIntermidatMainContainerQFrameHLayout") + self.ecIntermidatMainContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecIPassphraseContainerQFrame = QFrame(self.ecIPAndConfirmMainContainerQFrame) + self.ecIPassphraseContainerQFrame.setObjectName(u"ecIPassphraseContainerQFrame") + self.ecIPassphraseContainerQFrameVLayout = QVBoxLayout(self.ecIPassphraseContainerQFrame) + self.ecIPassphraseContainerQFrameVLayout.setSpacing(5) + self.ecIPassphraseContainerQFrameVLayout.setObjectName(u"ecIPassphraseContainerQFrameVLayout") + self.ecIPassphraseContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.ecIPassphraseLableContainerQFrame = QFrame(self.ecIPassphraseContainerQFrame) + self.ecIPassphraseLableContainerQFrame.setObjectName(u"ecIPassphraseLableContainerQFrame") + self.ecIPassphraseLableContainerQFrameHLayout = QHBoxLayout(self.ecIPassphraseLableContainerQFrame) + self.ecIPassphraseLableContainerQFrameHLayout.setSpacing(15) + self.ecIPassphraseLableContainerQFrameHLayout.setObjectName(u"ecIPassphraseLableContainerQFrameHLayout") + self.ecIPassphraseLableContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecIPassphraseQLabel = QLabel(self.ecIPassphraseLableContainerQFrame) + self.ecIPassphraseQLabel.setObjectName(u"ecIPassphraseQLabel") + + self.ecIPassphraseLableContainerQFrameHLayout.addWidget(self.ecIPassphraseQLabel) + + self.ecIPassphraseLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + + self.ecIPassphraseLableContainerQFrameHLayout.addItem(self.ecIPassphraseLabelContainerQFrameHSpacer) + + + self.ecIPassphraseContainerQFrameVLayout.addWidget(self.ecIPassphraseLableContainerQFrame) + + self.ecIPassphraseAndGenerateContainerQFrameHLayout = QFrame(self.ecIPassphraseContainerQFrame) + self.ecIPassphraseAndGenerateContainerQFrameHLayout.setObjectName(u"ecIPassphraseAndGenerateContainerQFrameHLayout") + self.ecIPassphraseAndGenerateContainerQFrameHLayout.setFrameShape(QFrame.Shape.StyledPanel) + self.ecIPassphraseAndGenerateContainerQFrameHLayout.setFrameShadow(QFrame.Shadow.Raised) + self.ecIntermediatePassphraseAndGenerateHLayout = QHBoxLayout(self.ecIPassphraseAndGenerateContainerQFrameHLayout) + self.ecIntermediatePassphraseAndGenerateHLayout.setSpacing(15) + self.ecIntermediatePassphraseAndGenerateHLayout.setObjectName(u"ecIntermediatePassphraseAndGenerateHLayout") + self.ecIntermediatePassphraseAndGenerateHLayout.setContentsMargins(0, 0, 0, 0) + self.ecIPassphraseQLineEdit = QLineEdit(self.ecIPassphraseAndGenerateContainerQFrameHLayout) + self.ecIPassphraseQLineEdit.setObjectName(u"ecIPassphraseQLineEdit") + + self.ecIntermediatePassphraseAndGenerateHLayout.addWidget(self.ecIPassphraseQLineEdit) + + self.ecIPassphraseGenerateQPushButton = QPushButton(self.ecIPassphraseAndGenerateContainerQFrameHLayout) + self.ecIPassphraseGenerateQPushButton.setObjectName(u"ecIPassphraseGenerateQPushButton") + sizePolicy.setHeightForWidth(self.ecIPassphraseGenerateQPushButton.sizePolicy().hasHeightForWidth()) + self.ecIPassphraseGenerateQPushButton.setSizePolicy(sizePolicy) + self.ecIPassphraseGenerateQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + + self.ecIntermediatePassphraseAndGenerateHLayout.addWidget(self.ecIPassphraseGenerateQPushButton) + + + self.ecIPassphraseContainerQFrameVLayout.addWidget(self.ecIPassphraseAndGenerateContainerQFrameHLayout) + + + self.ecIntermidatMainContainerQFrameHLayout.addWidget(self.ecIPassphraseContainerQFrame) + + self.ecConfirmCodeContainerQFrame = QFrame(self.ecIPAndConfirmMainContainerQFrame) + self.ecConfirmCodeContainerQFrame.setObjectName(u"ecConfirmCodeContainerQFrame") + self.ecConfirmCodeContainerQFrameVLayout = QVBoxLayout(self.ecConfirmCodeContainerQFrame) + self.ecConfirmCodeContainerQFrameVLayout.setSpacing(5) + self.ecConfirmCodeContainerQFrameVLayout.setObjectName(u"ecConfirmCodeContainerQFrameVLayout") + self.ecConfirmCodeContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.ecCodeLableContainerQFrame = QFrame(self.ecConfirmCodeContainerQFrame) + self.ecCodeLableContainerQFrame.setObjectName(u"ecCodeLableContainerQFrame") + self.ecCodeLableContainerQFrameHLayout = QHBoxLayout(self.ecCodeLableContainerQFrame) + self.ecCodeLableContainerQFrameHLayout.setSpacing(15) + self.ecCodeLableContainerQFrameHLayout.setObjectName(u"ecCodeLableContainerQFrameHLayout") + self.ecCodeLableContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecConfirmCodeQLabel = QLabel(self.ecCodeLableContainerQFrame) + self.ecConfirmCodeQLabel.setObjectName(u"ecConfirmCodeQLabel") + + self.ecCodeLableContainerQFrameHLayout.addWidget(self.ecConfirmCodeQLabel) + + self.ecConfirmCodeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + + self.ecCodeLableContainerQFrameHLayout.addItem(self.ecConfirmCodeLabelContainerQFrameHSpacer) + + + self.ecConfirmCodeContainerQFrameVLayout.addWidget(self.ecCodeLableContainerQFrame) + + self.ecConfirmCodeAndVerifyContainerQFrame = QFrame(self.ecConfirmCodeContainerQFrame) + self.ecConfirmCodeAndVerifyContainerQFrame.setObjectName(u"ecConfirmCodeAndVerifyContainerQFrame") + self.ecConfirmCodeAndVerifyContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.ecConfirmCodeAndVerifyContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.ecConfirmCodeAndVerifyContainerQFrameHLayout = QHBoxLayout(self.ecConfirmCodeAndVerifyContainerQFrame) + self.ecConfirmCodeAndVerifyContainerQFrameHLayout.setSpacing(15) + self.ecConfirmCodeAndVerifyContainerQFrameHLayout.setObjectName(u"ecConfirmCodeAndVerifyContainerQFrameHLayout") + self.ecConfirmCodeAndVerifyContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.ecConfirmCodeQLineEdit = QLineEdit(self.ecConfirmCodeAndVerifyContainerQFrame) + self.ecConfirmCodeQLineEdit.setObjectName(u"ecConfirmCodeQLineEdit") + + self.ecConfirmCodeAndVerifyContainerQFrameHLayout.addWidget(self.ecConfirmCodeQLineEdit) + + self.ecConfirmCodeVerifyQPushButton = QPushButton(self.ecConfirmCodeAndVerifyContainerQFrame) + self.ecConfirmCodeVerifyQPushButton.setObjectName(u"ecConfirmCodeVerifyQPushButton") + sizePolicy.setHeightForWidth(self.ecConfirmCodeVerifyQPushButton.sizePolicy().hasHeightForWidth()) + self.ecConfirmCodeVerifyQPushButton.setSizePolicy(sizePolicy) + self.ecConfirmCodeVerifyQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + + self.ecConfirmCodeAndVerifyContainerQFrameHLayout.addWidget(self.ecConfirmCodeVerifyQPushButton) + + + self.ecConfirmCodeContainerQFrameVLayout.addWidget(self.ecConfirmCodeAndVerifyContainerQFrame) + + + self.ecIntermidatMainContainerQFrameHLayout.addWidget(self.ecConfirmCodeContainerQFrame) + + + self.ecVLayout.addWidget(self.ecIPAndConfirmMainContainerQFrame) + self.modeQStackedWidget.addWidget(self.ecQWidget) self.verticalLayout.addWidget(self.modeQStackedWidget) @@ -386,7 +705,7 @@ def setupUi(self, MainWindow): self.decryptWIFLabelContainerQFrameHLayout.addWidget(self.decryptWIFQLabel) - self.decryptWIFLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + self.decryptWIFLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.decryptWIFLabelContainerQFrameHLayout.addItem(self.decryptWIFLabelContainerQFrameHSpacer) @@ -410,7 +729,7 @@ def setupUi(self, MainWindow): self.decryptWIFQPushButton.setObjectName(u"decryptWIFQPushButton") sizePolicy.setHeightForWidth(self.decryptWIFQPushButton.sizePolicy().hasHeightForWidth()) self.decryptWIFQPushButton.setSizePolicy(sizePolicy) - self.decryptWIFQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) + self.decryptWIFQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) self.decryptWIFHLayout.addWidget(self.decryptWIFQPushButton) @@ -445,7 +764,7 @@ def setupUi(self, MainWindow): self.retranslateUi(MainWindow) - self.modeQStackedWidget.setCurrentIndex(0) + self.modeQStackedWidget.setCurrentIndex(1) QMetaObject.connectSlotsByName(MainWindow) @@ -466,6 +785,16 @@ def retranslateUi(self, MainWindow): self.noECPrivateKeyConvertQPushButton.setText(QCoreApplication.translate("MainWindow", u"Convert", None)) self.noECWIFQLabel.setText(QCoreApplication.translate("MainWindow", u"WIF", None)) self.noECEncryptQPushButton.setText(QCoreApplication.translate("MainWindow", u"Encrypt", None)) + self.ecOwnerSaltQLabel.setText(QCoreApplication.translate("MainWindow", u"Owner Salt", None)) + self.ecOwnerSaltGenerateQPushButton.setText(QCoreApplication.translate("MainWindow", u"Generate", None)) + self.ecSeedQLabel.setText(QCoreApplication.translate("MainWindow", u"Seed", None)) + self.ecSeedGenerateQPushButton.setText(QCoreApplication.translate("MainWindow", u"Generate", None)) + self.ecLotQLabel.setText(QCoreApplication.translate("MainWindow", u"Lot", None)) + self.ecSequenceQLabel.setText(QCoreApplication.translate("MainWindow", u"Sequence", None)) + self.ecIPassphraseQLabel.setText(QCoreApplication.translate("MainWindow", u"Intermediate Passphrase", None)) + self.ecIPassphraseGenerateQPushButton.setText(QCoreApplication.translate("MainWindow", u"Generate", None)) + self.ecConfirmCodeQLabel.setText(QCoreApplication.translate("MainWindow", u"Confirm Code", None)) + self.ecConfirmCodeVerifyQPushButton.setText(QCoreApplication.translate("MainWindow", u"Verify", None)) self.decryptWIFQLabel.setText(QCoreApplication.translate("MainWindow", u"Encrypted WIF", None)) self.decryptWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Decrypt", None)) self.outputQGroupBox.setTitle(QCoreApplication.translate("MainWindow", u"Output", None)) From 39bf64aa0c430f8b702b8ce16b8e4f1a2d387884 Mon Sep 17 00:00:00 2001 From: axiom Date: Tue, 20 Aug 2024 17:59:04 +0300 Subject: [PATCH 05/56] Update: default log color --- desktop/main.py | 14 +++++++++----- desktop/ui/css/theme.css | 5 +++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/desktop/main.py b/desktop/main.py index 5425388..1326822 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -29,10 +29,11 @@ class BIP38Application: """ Main application class for managing the UI and core functionalities. """ + TEXT_COLOR: QColor = QColor(255, 255, 255) ERROR_COLOR: QColor = QColor(255, 96, 96) JSON_PATTERNS = [ - (re.compile(r'\".*?\"(?=\s*:)'), QColor(0, 191, 165)), # keys - (re.compile(r'\".*?\"'), QColor(0, 191, 165)), # string values + # (re.compile(r'\".*?\"(?=\s*:)'), QColor(0, 191, 165)), # keys + (re.compile(r'\".*?\"'), QColor(0, 191, 165)), # string (re.compile(r'\b\d+\b'), QColor(125, 211, 252)), # numbers (re.compile(r'\btrue\b|\bfalse\b|\bnull\b'), QColor(16, 182, 212)), # booleans/null (re.compile(r'[{}[\],:]'), QColor(255, 255, 255)) # punctuation @@ -135,6 +136,7 @@ def noec_encrypt(self): wif=wif, passphrase=passphrase ) + self.ui.decryptWIFQLineEdit.setText(encrypted_wif) self.log(encrypted_wif) except ValueError as e: self.logerr(f"Error: Invalid WIF") @@ -166,7 +168,6 @@ def get_cryptocurrency(self): def get_netowrk(self): return self.ui.networkQComboBox.currentText().lower() - def log(self, data: Optional[Union[str, dict]], end="\n") -> None: if isinstance(data, dict): data = json.dumps(data, indent=4) @@ -174,6 +175,9 @@ def log(self, data: Optional[Union[str, dict]], end="\n") -> None: cursor = self.ui.outputQTextEdit.textCursor() cursor.movePosition(QTextCursor.End) + default_format = QTextCharFormat() + default_format.setForeground(BIP38Application.TEXT_COLOR) + # Apply highlighting for line in data.splitlines(): pos = 0 @@ -189,9 +193,9 @@ def log(self, data: Optional[Union[str, dict]], end="\n") -> None: match_found = True break if not match_found: - cursor.insertText(line[pos]) + cursor.insertText(line[pos], default_format) pos += 1 - cursor.insertText(end) + cursor.insertText(end, default_format) self.ui.outputQTextEdit.setTextCursor(cursor) self.ui.outputQTextEdit.ensureCursorVisible() diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index 7d6a499..035d5c1 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -9,6 +9,7 @@ QWidget { QFrame{ background-color: transparent; + border: none; } QLabel { @@ -19,7 +20,7 @@ QLabel { QGroupBox { background-color: rgba(0, 0, 0, 0.2); - border: 1px solid rgba(28, 150, 20, 0.25); + border: 1px solid rgba(0, 191, 165, 0.8); border-radius: 3px; margin-top: 8px; font: 11pt "Segoe UI"; @@ -124,7 +125,7 @@ QComboBox QAbstractItemView { color: white; border: none; padding: 10px; - background-color: rgba(15, 33, 42, 0.5); + background-color: rgba(15, 33, 42, 1); outline: none; } From bfe92f2ece2bef4c532dcd04f0789fef7d4d1651 Mon Sep 17 00:00:00 2001 From: meherett Date: Wed, 21 Aug 2024 00:26:55 +0300 Subject: [PATCH 06/56] Modify: python-bip38 `build.yml` workflow --- .github/workflows/{python-bip38.yml => build.yml} | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) rename .github/workflows/{python-bip38.yml => build.yml} (69%) diff --git a/.github/workflows/python-bip38.yml b/.github/workflows/build.yml similarity index 69% rename from .github/workflows/python-bip38.yml rename to .github/workflows/build.yml index 6d7372d..cb159c5 100644 --- a/.github/workflows/python-bip38.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,6 @@ # This workflow will install Swap package dependencies, run tests and lint with a variety of Python versions. -name: Python-BIP38 +name: BIP38 on: push: @@ -17,21 +17,26 @@ jobs: runs-on: ubuntu-latest strategy: matrix: + python-name: [ + "Python 3.9", "Python 3.10", "Python 3.11", "Python 3.12" + ] python-version: [ "3.9", "3.10", "3.11", "3.12" ] steps: - uses: actions/checkout@master - - name: Set up Python ${{ matrix.python-version }} + - name: Set up ${{ matrix.python-name }} uses: actions/setup-python@master with: python-version: ${{ matrix.python-version }} - - name: Install dependencies + - name: Install Dependencies run: | python -m pip install --upgrade pip pip install -e .[tests] - name: Test with PyTest with Coverage - run: coverage run -m pytest - - name: Submit Coverage report to Coveralls + run: | + coverage run -m pytest + coverage report + - name: Submit Coverage Report to Coveralls if: ${{ matrix.python-version == 3.12 }} run: coveralls From 5a426c483a06e9674ff6caf4ccb2d021b87b3788 Mon Sep 17 00:00:00 2001 From: meherett Date: Wed, 21 Aug 2024 00:50:09 +0300 Subject: [PATCH 07/56] Add: include all requirements `*.txt` files --- MANIFEST.in | 1 + 1 file changed, 1 insertion(+) diff --git a/MANIFEST.in b/MANIFEST.in index a179080..10e88e9 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,7 @@ include LICENSE include README.md include requirements.txt +include requirements/*.txt recursive-exclude * __pycache__ recursive-exclude * *.py[co] \ No newline at end of file From 273e89601373777320e649796e0903215efdeecb Mon Sep 17 00:00:00 2001 From: axiom Date: Wed, 21 Aug 2024 13:37:37 +0300 Subject: [PATCH 08/56] Update: intermediate passphrase, owner salt and seed generate --- desktop/main.py | 73 ++++++++++++++++++++++++++++++++++++++++++ desktop/ui/bip38.ui | 12 ++++++- desktop/ui/ui_bip38.py | 55 +++++++++++++++++-------------- 3 files changed, 115 insertions(+), 25 deletions(-) diff --git a/desktop/main.py b/desktop/main.py index 1326822..11b5e57 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -5,6 +5,7 @@ # file COPYING or https://opensource.org/license/mit import re +import os import json import inspect from typing import ( @@ -25,6 +26,8 @@ from desktop.core import Application +str_to_int = lambda s: int(s) if s.isdigit() else None + class BIP38Application: """ Main application class for managing the UI and core functionalities. @@ -85,16 +88,61 @@ def __init_ui(self) -> None: self.ui.noECWIFTypeQComboBox.addItems(self.wif_types) self.ui.noECWIFTypeQComboBox.setCurrentIndex(0) + + self.ui.ecLotQLineEdit.textEdited.connect( + lambda: self.validate_int(self.ui.ecLotQLineEdit) + ) + self.ui.ecLotQLineEdit.editingFinished.connect( + lambda: self.enforce_int_range(self.ui.ecLotQLineEdit, 100000, 999999) + ) + + self.ui.ecSequenceQLineEdit.textEdited.connect( + lambda: self.validate_int(self.ui.ecSequenceQLineEdit) + ) + self.ui.ecSequenceQLineEdit.editingFinished.connect( + lambda: self.enforce_int_range(self.ui.ecSequenceQLineEdit, 0, 4095) + ) + # button bindings self.ui.noECPrivateKeyConvertQPushButton.clicked.connect(self.noec_convert_private_key) self.ui.noECEncryptQPushButton.clicked.connect(self.noec_encrypt) + + self.ui.ecOwnerSaltGenerateQPushButton.clicked.connect( + lambda: self.ui.ecOwnerSaltQLineEdit.setText( + os.urandom(8).hex() + ) + ) + self.ui.ecSeedGenerateQPushButton.clicked.connect( + lambda: self.ui.ecSeedQLineEdit.setText( + os.urandom(24).hex() + ) + ) + + self.ui.ecIPassphraseGenerateQPushButton.clicked.connect(self.ec_generate_ipassphrase) + + self.ui.decryptWIFQPushButton.clicked.connect(self.decrypt) + ## setting defualt values # will update network combo too self.ui.cryptocurrencyQComboBox.setCurrentText("Bitcoin") self.ui.modeQComboBox.setCurrentIndex(0) + def validate_int(self, line_edit): + text = line_edit.text() + if not text.isdigit(): + line_edit.setText(''.join(filter(str.isdigit, text))) + + def enforce_int_range(self, line_edit, min_value, max_value): + text = line_edit.text() + validator = line_edit.validator() + + if text.isdigit(): + value = int(text) + value = max(min_value, min(value, max_value)) # clamp + line_edit.setText(str(value)) + def change_cryptocurrency(self, cryptocurrency: str) -> None: cryptocurrency_class: ICryptocurrency = self.cryptocurrencies[cryptocurrency] @@ -105,6 +153,7 @@ def change_cryptocurrency(self, cryptocurrency: str) -> None: self.ui.networkQComboBox.setCurrentIndex(0) def change_mode(self, mode: str) -> None: + self.ui.createEncryptedWIFQPushButton.setVisible("EC-Multiply" == mode) self.ui.modeQStackedWidget.setCurrentWidget(self.modes[mode]) def noec_convert_private_key(self): @@ -141,6 +190,30 @@ def noec_encrypt(self): except ValueError as e: self.logerr(f"Error: Invalid WIF") + def ec_generate_ipassphrase(self): + + passphrase: str = self.ui.passphraseQLineEdit.text().strip() + owner_salt: str = self.ui.ecOwnerSaltQLineEdit.text().strip() + lot: Optional[int] = str_to_int(self.ui.ecLotQLineEdit.text()) + sequence: Optional[int] = str_to_int(self.ui.ecSequenceQLineEdit.text()) + + bip38: BIP38 = BIP38( + cryptocurrency=self.get_cryptocurrency(), + network=self.get_netowrk() + ) + + try: + intermediate_passphrase: str = bip38.intermediate_code( + passphrase=passphrase, + owner_salt=owner_salt, + lot=lot, + sequence=sequence + ) + self.ui.ecIPassphraseQLineEdit.setText(intermediate_passphrase) + self.log(intermediate_passphrase) + except ValueError as e: + self.logerr(f"Error: Failed to generate intermediate passphrase") + def decrypt(self): encrypted_wif: str = self.ui.decryptWIFQLineEdit.text().strip() passphrase: str = self.ui.passphraseQLineEdit.text().strip() diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui index 46ed4a5..dd10e85 100644 --- a/desktop/ui/bip38.ui +++ b/desktop/ui/bip38.ui @@ -7,7 +7,7 @@ 0 0 804 - 409 + 460 @@ -1591,6 +1591,16 @@ + + + + PointingHandCursor + + + Create Encrypted WIF + + + diff --git a/desktop/ui/ui_bip38.py b/desktop/ui/ui_bip38.py index bfdcb0d..af1e463 100644 --- a/desktop/ui/ui_bip38.py +++ b/desktop/ui/ui_bip38.py @@ -18,7 +18,7 @@ class Ui_MainWindow(object): def setupUi(self, MainWindow): if not MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") - MainWindow.resize(804, 409) + MainWindow.resize(804, 460) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") self.centeralWidgetLayout = QVBoxLayout(self.centralwidget) @@ -59,7 +59,7 @@ def setupUi(self, MainWindow): self.cryptocurrencyLabelContainerQFrameHLayout.addWidget(self.cryptocurrencyQLabel) - self.cryptocurrencyLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.cryptocurrencyLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.cryptocurrencyLabelContainerQFrameHLayout.addItem(self.cryptocurrencyLabelContainerQFrameHSpacer) @@ -92,7 +92,7 @@ def setupUi(self, MainWindow): self.networkLabelContainerQFrameHLayout.addWidget(self.networkQLabel) - self.networkLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.networkLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.networkLabelContainerQFrameHLayout.addItem(self.networkLabelContainerQFrameHSpacer) @@ -124,7 +124,7 @@ def setupUi(self, MainWindow): self.passphraseLabelContainerQFrameHLayout.addWidget(self.passphraseQLabel) - self.passphraseLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.passphraseLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.passphraseLabelContainerQFrameHLayout.addItem(self.passphraseLabelContainerQFrameHSpacer) @@ -157,7 +157,7 @@ def setupUi(self, MainWindow): self.modeLabelContainerQFrameHLayout.addWidget(self.modeQLabel) - self.modeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.modeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.modeLabelContainerQFrameHLayout.addItem(self.modeLabelContainerQFrameHSpacer) @@ -208,7 +208,7 @@ def setupUi(self, MainWindow): self.noECPrivateKeyLabelContainerQFrameHLayout.addWidget(self.noECPrivateKeyQLabel) - self.noECPrivateKeyLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.noECPrivateKeyLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.noECPrivateKeyLabelContainerQFrameHLayout.addItem(self.noECPrivateKeyLabelContainerQFrameHSpacer) @@ -241,7 +241,7 @@ def setupUi(self, MainWindow): self.noECWIFTypeLabelContainerQFrameHLayout.addWidget(self.noECWIFTypeQLabel) - self.noECWIFTypeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.noECWIFTypeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.noECWIFTypeLabelContainerQFrameHLayout.addItem(self.noECWIFTypeLabelContainerQFrameHSpacer) @@ -270,13 +270,13 @@ def setupUi(self, MainWindow): self.noECPrivateKeyButtonHLayout.setSpacing(5) self.noECPrivateKeyButtonHLayout.setObjectName(u"noECPrivateKeyButtonHLayout") self.noECPrivateKeyButtonHLayout.setContentsMargins(0, 0, 0, 0) - self.noECPrivateKeyButtonSpacer = QSpacerItem(20, 40, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.noECPrivateKeyButtonSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) self.noECPrivateKeyButtonHLayout.addItem(self.noECPrivateKeyButtonSpacer) self.noECPrivateKeyConvertQPushButton = QPushButton(self.noECPrivateKeyButtonContainerQFrame) self.noECPrivateKeyConvertQPushButton.setObjectName(u"noECPrivateKeyConvertQPushButton") - self.noECPrivateKeyConvertQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + self.noECPrivateKeyConvertQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.noECPrivateKeyButtonHLayout.addWidget(self.noECPrivateKeyConvertQPushButton) @@ -314,7 +314,7 @@ def setupUi(self, MainWindow): self.noECWIFLabelContainerQFrameHLayout.addWidget(self.noECWIFQLabel) - self.noECWIFLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.noECWIFLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.noECWIFLabelContainerQFrameHLayout.addItem(self.noECWIFLabelContainerQFrameHSpacer) @@ -336,12 +336,12 @@ def setupUi(self, MainWindow): self.noECEncryptQPushButton = QPushButton(self.noECWIFAndEncyptContainerQFrame) self.noECEncryptQPushButton.setObjectName(u"noECEncryptQPushButton") - sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.noECEncryptQPushButton.sizePolicy().hasHeightForWidth()) self.noECEncryptQPushButton.setSizePolicy(sizePolicy) - self.noECEncryptQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + self.noECEncryptQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.noECWIFContainerVLayout.addWidget(self.noECEncryptQPushButton) @@ -386,7 +386,7 @@ def setupUi(self, MainWindow): self.ecOwnerSaltLableContainerQFrameHLayout.addWidget(self.ecOwnerSaltQLabel) - self.ecOwnerSaltLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.ecOwnerSaltLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.ecOwnerSaltLableContainerQFrameHLayout.addItem(self.ecOwnerSaltLabelContainerQFrameHSpacer) @@ -410,7 +410,7 @@ def setupUi(self, MainWindow): self.ecOwnerSaltGenerateQPushButton.setObjectName(u"ecOwnerSaltGenerateQPushButton") sizePolicy.setHeightForWidth(self.ecOwnerSaltGenerateQPushButton.sizePolicy().hasHeightForWidth()) self.ecOwnerSaltGenerateQPushButton.setSizePolicy(sizePolicy) - self.ecOwnerSaltGenerateQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + self.ecOwnerSaltGenerateQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.ecOwnerSaltAndGenerateContainerQFrameHLayout.addWidget(self.ecOwnerSaltGenerateQPushButton) @@ -437,7 +437,7 @@ def setupUi(self, MainWindow): self.ecSeedLabelContainerQFrameHLayout.addWidget(self.ecSeedQLabel) - self.ecSeedLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.ecSeedLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.ecSeedLabelContainerQFrameHLayout.addItem(self.ecSeedLabelContainerQFrameHSpacer) @@ -461,7 +461,7 @@ def setupUi(self, MainWindow): self.ecSeedGenerateQPushButton.setObjectName(u"ecSeedGenerateQPushButton") sizePolicy.setHeightForWidth(self.ecSeedGenerateQPushButton.sizePolicy().hasHeightForWidth()) self.ecSeedGenerateQPushButton.setSizePolicy(sizePolicy) - self.ecSeedGenerateQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + self.ecSeedGenerateQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.ecSeedAndGenerateContainerQFrameHLayout.addWidget(self.ecSeedGenerateQPushButton) @@ -489,7 +489,7 @@ def setupUi(self, MainWindow): self.ecLotLableContainerQFrameHLayout.addWidget(self.ecLotQLabel) - self.ecLotLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.ecLotLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.ecLotLableContainerQFrameHLayout.addItem(self.ecLotLabelContainerQFrameHSpacer) @@ -533,7 +533,7 @@ def setupUi(self, MainWindow): self.ecSequenceLableContainerQFrameHLayout.addWidget(self.ecSequenceQLabel) - self.ecSequenceLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.ecSequenceLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.ecSequenceLableContainerQFrameHLayout.addItem(self.ecSequenceLabelContainerQFrameHSpacer) @@ -588,7 +588,7 @@ def setupUi(self, MainWindow): self.ecIPassphraseLableContainerQFrameHLayout.addWidget(self.ecIPassphraseQLabel) - self.ecIPassphraseLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.ecIPassphraseLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.ecIPassphraseLableContainerQFrameHLayout.addItem(self.ecIPassphraseLabelContainerQFrameHSpacer) @@ -612,7 +612,7 @@ def setupUi(self, MainWindow): self.ecIPassphraseGenerateQPushButton.setObjectName(u"ecIPassphraseGenerateQPushButton") sizePolicy.setHeightForWidth(self.ecIPassphraseGenerateQPushButton.sizePolicy().hasHeightForWidth()) self.ecIPassphraseGenerateQPushButton.setSizePolicy(sizePolicy) - self.ecIPassphraseGenerateQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + self.ecIPassphraseGenerateQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.ecIntermediatePassphraseAndGenerateHLayout.addWidget(self.ecIPassphraseGenerateQPushButton) @@ -639,7 +639,7 @@ def setupUi(self, MainWindow): self.ecCodeLableContainerQFrameHLayout.addWidget(self.ecConfirmCodeQLabel) - self.ecConfirmCodeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.ecConfirmCodeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.ecCodeLableContainerQFrameHLayout.addItem(self.ecConfirmCodeLabelContainerQFrameHSpacer) @@ -663,7 +663,7 @@ def setupUi(self, MainWindow): self.ecConfirmCodeVerifyQPushButton.setObjectName(u"ecConfirmCodeVerifyQPushButton") sizePolicy.setHeightForWidth(self.ecConfirmCodeVerifyQPushButton.sizePolicy().hasHeightForWidth()) self.ecConfirmCodeVerifyQPushButton.setSizePolicy(sizePolicy) - self.ecConfirmCodeVerifyQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + self.ecConfirmCodeVerifyQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.ecConfirmCodeAndVerifyContainerQFrameHLayout.addWidget(self.ecConfirmCodeVerifyQPushButton) @@ -705,7 +705,7 @@ def setupUi(self, MainWindow): self.decryptWIFLabelContainerQFrameHLayout.addWidget(self.decryptWIFQLabel) - self.decryptWIFLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.decryptWIFLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.decryptWIFLabelContainerQFrameHLayout.addItem(self.decryptWIFLabelContainerQFrameHSpacer) @@ -725,11 +725,17 @@ def setupUi(self, MainWindow): self.decryptWIFHLayout.addWidget(self.decryptWIFQLineEdit) + self.createEncryptedWIFQPushButton = QPushButton(self.decryptWIFAndButtonContainerQFrame) + self.createEncryptedWIFQPushButton.setObjectName(u"createEncryptedWIFQPushButton") + self.createEncryptedWIFQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) + + self.decryptWIFHLayout.addWidget(self.createEncryptedWIFQPushButton) + self.decryptWIFQPushButton = QPushButton(self.decryptWIFAndButtonContainerQFrame) self.decryptWIFQPushButton.setObjectName(u"decryptWIFQPushButton") sizePolicy.setHeightForWidth(self.decryptWIFQPushButton.sizePolicy().hasHeightForWidth()) self.decryptWIFQPushButton.setSizePolicy(sizePolicy) - self.decryptWIFQPushButton.setCursor(QCursor(Qt.PointingHandCursor)) + self.decryptWIFQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.decryptWIFHLayout.addWidget(self.decryptWIFQPushButton) @@ -796,6 +802,7 @@ def retranslateUi(self, MainWindow): self.ecConfirmCodeQLabel.setText(QCoreApplication.translate("MainWindow", u"Confirm Code", None)) self.ecConfirmCodeVerifyQPushButton.setText(QCoreApplication.translate("MainWindow", u"Verify", None)) self.decryptWIFQLabel.setText(QCoreApplication.translate("MainWindow", u"Encrypted WIF", None)) + self.createEncryptedWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Create Encrypted WIF", None)) self.decryptWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Decrypt", None)) self.outputQGroupBox.setTitle(QCoreApplication.translate("MainWindow", u"Output", None)) self.outputQTextEdit.setPlaceholderText("") From 128ac6cdc260da9483c282365dd6d34dc01fea2b Mon Sep 17 00:00:00 2001 From: axiom Date: Thu, 22 Aug 2024 11:03:01 +0300 Subject: [PATCH 09/56] Update: confirmation and create encrypted WIF --- desktop/main.py | 105 +++++++++++++++++++++++++++++++++------ desktop/ui/bip38.ui | 17 ++++++- desktop/ui/css/theme.css | 4 ++ desktop/ui/ui_bip38.py | 11 +++- 4 files changed, 119 insertions(+), 18 deletions(-) diff --git a/desktop/main.py b/desktop/main.py index 11b5e57..b46d5e3 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -12,6 +12,7 @@ Optional, Union ) +from PySide6.QtWidgets import QWidget from PySide6.QtGui import ( QTextCharFormat, QTextCursor, QColor, QTextFormat, QTextOption @@ -38,7 +39,7 @@ class BIP38Application: # (re.compile(r'\".*?\"(?=\s*:)'), QColor(0, 191, 165)), # keys (re.compile(r'\".*?\"'), QColor(0, 191, 165)), # string (re.compile(r'\b\d+\b'), QColor(125, 211, 252)), # numbers - (re.compile(r'\btrue\b|\bfalse\b|\bnull\b'), QColor(16, 182, 212)), # booleans/null + (re.compile(r'\btrue\b|\bfalse\b|\bnull\b'), QColor(16, 182, 212)), # boolean/null (re.compile(r'[{}[\],:]'), QColor(255, 255, 255)) # punctuation ] @@ -63,7 +64,10 @@ def __init__(self) -> None: "EC-Multiply": self.ui.ecQWidget, } - self.wif_types = ["wif", "wif-compressed"] + self.wif_types = { + "wif": "uncompressed", + "wif-compressed": "compressed" + } self.__init_ui() @@ -85,7 +89,7 @@ def __init_ui(self) -> None: ) self.ui.modeQComboBox.currentTextChanged.connect(self.change_mode) - self.ui.noECWIFTypeQComboBox.addItems(self.wif_types) + self.ui.noECWIFTypeQComboBox.addItems(self.wif_types.keys()) self.ui.noECWIFTypeQComboBox.setCurrentIndex(0) @@ -102,6 +106,8 @@ def __init_ui(self) -> None: self.ui.ecSequenceQLineEdit.editingFinished.connect( lambda: self.enforce_int_range(self.ui.ecSequenceQLineEdit, 0, 4095) ) + self.ui.createEncryptedWIFTypeQComboBox.addItems(self.wif_types.keys()) + self.ui.createEncryptedWIFTypeQComboBox.setCurrentIndex(0) # button bindings self.ui.noECPrivateKeyConvertQPushButton.clicked.connect(self.noec_convert_private_key) @@ -119,11 +125,12 @@ def __init_ui(self) -> None: ) self.ui.ecIPassphraseGenerateQPushButton.clicked.connect(self.ec_generate_ipassphrase) - + self.ui.ecConfirmCodeVerifyQPushButton.clicked.connect(self.ec_confirm_code) + self.ui.createEncryptedWIFQPushButton.clicked.connect(self.create_encrypted_wif) self.ui.decryptWIFQPushButton.clicked.connect(self.decrypt) - ## setting defualt values + ## setting default values # will update network combo too self.ui.cryptocurrencyQComboBox.setCurrentText("Bitcoin") @@ -153,7 +160,9 @@ def change_cryptocurrency(self, cryptocurrency: str) -> None: self.ui.networkQComboBox.setCurrentIndex(0) def change_mode(self, mode: str) -> None: - self.ui.createEncryptedWIFQPushButton.setVisible("EC-Multiply" == mode) + is_on_ec = "EC-Multiply" == mode + self.ui.createEncryptedWIFTypeQComboBox.setVisible(is_on_ec) + self.ui.createEncryptedWIFQPushButton.setVisible(is_on_ec) self.ui.modeQStackedWidget.setCurrentWidget(self.modes[mode]) def noec_convert_private_key(self): @@ -169,11 +178,15 @@ def noec_convert_private_key(self): ) self.ui.noECWIFQLineEdit.setText(wif) except ValueError as e: - self.logerr(f"Error: Invalid Private Key") + self.set_required(self.ui.noECPrivateKeyQLineEdit) + self.logerr(f"Error: {e}") def noec_encrypt(self): wif: str = self.ui.noECWIFQLineEdit.text().strip() - passphrase: str = self.ui.passphraseQLineEdit.text().strip() + + # validate=True will show error if passphrase is not set + if not (passphrase := self.get_passphrase(validate=True)): + return None bip38: BIP38 = BIP38( cryptocurrency=self.get_cryptocurrency(), @@ -188,11 +201,13 @@ def noec_encrypt(self): self.ui.decryptWIFQLineEdit.setText(encrypted_wif) self.log(encrypted_wif) except ValueError as e: - self.logerr(f"Error: Invalid WIF") + self.set_required(self.ui.noECWIFQLineEdit) + self.logerr(f"Error: {e}") def ec_generate_ipassphrase(self): + if not (passphrase := self.get_passphrase(validate=True)): + return None - passphrase: str = self.ui.passphraseQLineEdit.text().strip() owner_salt: str = self.ui.ecOwnerSaltQLineEdit.text().strip() lot: Optional[int] = str_to_int(self.ui.ecLotQLineEdit.text()) sequence: Optional[int] = str_to_int(self.ui.ecSequenceQLineEdit.text()) @@ -212,11 +227,58 @@ def ec_generate_ipassphrase(self): self.ui.ecIPassphraseQLineEdit.setText(intermediate_passphrase) self.log(intermediate_passphrase) except ValueError as e: - self.logerr(f"Error: Failed to generate intermediate passphrase") + self.logerr(f"Error: {e}") + + def ec_confirm_code(self): + if not (passphrase := self.get_passphrase(validate=True)): + return None + + confirmation_code: str = self.ui.ecConfirmCodeQLineEdit.text().strip() + encrypted_wif: str = self.ui.decryptWIFQLineEdit.text().strip() + + bip38: BIP38 = BIP38( + cryptocurrency=self.get_cryptocurrency(), + network=self.get_netowrk() + ) + + try: + confirmation_code=bip38.confirm_code( + passphrase=passphrase, + confirmation_code=confirmation_code, + detail=True + ) + self.log(confirmation_code) + except ValueError as e: + self.logerr(f"Error: {e}") + + + def create_encrypted_wif(self): + intermediate_passphrase: str = self.ui.ecIPassphraseQLineEdit.text().strip() + seed: str = self.ui.ecSeedQLineEdit.text().strip() + wif_type: str = self.ui.createEncryptedWIFTypeQComboBox.currentText() + wif_type = self.wif_types[wif_type] + + bip38: BIP38 = BIP38( + cryptocurrency=self.get_cryptocurrency(), + network=self.get_netowrk() + ) + + try: + encrypted_wif: str = bip38.create_new_encrypted_wif( + intermediate_passphrase=intermediate_passphrase, + public_key_type=wif_type, + seed=seed, + ) + self.ui.decryptWIFQLineEdit.setText(encrypted_wif["encrypted_wif"]) + self.log(encrypted_wif) + except ValueError as e: + self.logerr(f"Error: {e}") def decrypt(self): encrypted_wif: str = self.ui.decryptWIFQLineEdit.text().strip() - passphrase: str = self.ui.passphraseQLineEdit.text().strip() + + if not (passphrase := self.get_passphrase(validate=True)): + return None bip38: BIP38 = BIP38( cryptocurrency=self.get_cryptocurrency(), @@ -231,7 +293,8 @@ def decrypt(self): ) self.log(decrypted_wif) except ValueError as e: - self.logerr(f"Error: Invalid Encrypted WIF") + self.set_required(self.ui.decryptWIFQLineEdit) + self.logerr(f"Error: {e}") def get_cryptocurrency(self): cryptocurrency_name: str = self.ui.cryptocurrencyQComboBox.currentText() @@ -241,6 +304,14 @@ def get_cryptocurrency(self): def get_netowrk(self): return self.ui.networkQComboBox.currentText().lower() + def get_passphrase(self, validate): + passphrase: str = self.ui.passphraseQLineEdit.text().strip() + if validate and not passphrase: + self.set_required(self.ui.passphraseQLineEdit) + self.logerr("Error: Passphrase Required") + + return passphrase + def log(self, data: Optional[Union[str, dict]], end="\n") -> None: if isinstance(data, dict): data = json.dumps(data, indent=4) @@ -282,4 +353,10 @@ def logerr(self, err: str , end: str="\n") -> None: cursor.insertText(err + end, cformat) self.ui.outputQTextEdit.setTextCursor(cursor) - self.ui.outputQTextEdit.ensureCursorVisible() \ No newline at end of file + self.ui.outputQTextEdit.ensureCursorVisible() + + def set_required(self, widget, value=True): + widget.setProperty("required", value) + widget.style().unpolish(widget) + widget.style().polish(widget) + widget.update() \ No newline at end of file diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui index dd10e85..af26bfb 100644 --- a/desktop/ui/bip38.ui +++ b/desktop/ui/bip38.ui @@ -374,7 +374,7 @@ - 1 + 0 @@ -1591,13 +1591,26 @@ + + + + + 145 + 0 + + + + (Select) + + + PointingHandCursor - Create Encrypted WIF + Create diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index 035d5c1..e055152 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -170,6 +170,10 @@ QLineEdit::disabled { background-color: rgba(25, 30, 36, 0.5); } +QLineEdit[required="true"] { + border: 1px solid rgba(255, 96, 96, 0.8); +} + QTextEdit { background-color: transparent; border-color: rgb(25, 30, 36); diff --git a/desktop/ui/ui_bip38.py b/desktop/ui/ui_bip38.py index af1e463..57a2d4b 100644 --- a/desktop/ui/ui_bip38.py +++ b/desktop/ui/ui_bip38.py @@ -725,6 +725,12 @@ def setupUi(self, MainWindow): self.decryptWIFHLayout.addWidget(self.decryptWIFQLineEdit) + self.createEncryptedWIFTypeQComboBox = QComboBox(self.decryptWIFAndButtonContainerQFrame) + self.createEncryptedWIFTypeQComboBox.setObjectName(u"createEncryptedWIFTypeQComboBox") + self.createEncryptedWIFTypeQComboBox.setMinimumSize(QSize(145, 0)) + + self.decryptWIFHLayout.addWidget(self.createEncryptedWIFTypeQComboBox) + self.createEncryptedWIFQPushButton = QPushButton(self.decryptWIFAndButtonContainerQFrame) self.createEncryptedWIFQPushButton.setObjectName(u"createEncryptedWIFQPushButton") self.createEncryptedWIFQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) @@ -770,7 +776,7 @@ def setupUi(self, MainWindow): self.retranslateUi(MainWindow) - self.modeQStackedWidget.setCurrentIndex(1) + self.modeQStackedWidget.setCurrentIndex(0) QMetaObject.connectSlotsByName(MainWindow) @@ -802,7 +808,8 @@ def retranslateUi(self, MainWindow): self.ecConfirmCodeQLabel.setText(QCoreApplication.translate("MainWindow", u"Confirm Code", None)) self.ecConfirmCodeVerifyQPushButton.setText(QCoreApplication.translate("MainWindow", u"Verify", None)) self.decryptWIFQLabel.setText(QCoreApplication.translate("MainWindow", u"Encrypted WIF", None)) - self.createEncryptedWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Create Encrypted WIF", None)) + self.createEncryptedWIFTypeQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) + self.createEncryptedWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Create", None)) self.decryptWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Decrypt", None)) self.outputQGroupBox.setTitle(QCoreApplication.translate("MainWindow", u"Output", None)) self.outputQTextEdit.setPlaceholderText("") From bf71f2a3095eba3314b89a7c5468ba01a9f05aa0 Mon Sep 17 00:00:00 2001 From: axiom Date: Sat, 24 Aug 2024 11:11:46 +0300 Subject: [PATCH 10/56] Update: validation improvements --- desktop/main.py | 301 +++++++++++++++++++++++++++++++----------------- 1 file changed, 197 insertions(+), 104 deletions(-) diff --git a/desktop/main.py b/desktop/main.py index b46d5e3..4b5a0be 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -8,14 +8,16 @@ import os import json import inspect +import functools from typing import ( Optional, Union ) +from PySide6.QtCore import QRegularExpression from PySide6.QtWidgets import QWidget from PySide6.QtGui import ( QTextCharFormat, QTextCursor, QColor, - QTextFormat, QTextOption + QTextFormat, QTextOption, QRegularExpressionValidator ) from bip38 import ( @@ -69,6 +71,62 @@ def __init__(self) -> None: "wif-compressed": "compressed" } + self.inputs = { + "Passphrase": { + "input": self.ui.passphraseQLineEdit, + "optional": False, # cant be empty + "min_length": 1 + }, + "Private Key": { + "input": self.ui.noECPrivateKeyQLineEdit, + "validator": self.regex_validator("^[0-9A-Fa-f]{1,64}$"), # hex only + "optional": False, + "min_length": 64 + }, + "WIF": { + "input": self.ui.noECWIFQLineEdit, + "optional": False, + "min_length": 1 + }, + "Owner Salt": { + "input": self.ui.ecOwnerSaltQLineEdit, + "validator": self.regex_validator("^[0-9A-Fa-f]{1,16}$"), # hex only + "optional": True, + "min_length": 16 + }, + "Seed": { + "input": self.ui.ecSeedQLineEdit, + "validator": self.regex_validator("^[0-9A-Fa-f]{1,48}$"), # hex only + "optional": True, + "min_length": 48 + }, + "Lot": { + "input": self.ui.ecLotQLineEdit, + "optional": True, + "min_length": 6 + }, + "Sequence": { + "input": self.ui.ecSequenceQLineEdit, + "optional": True, + "min_length": 1 + }, + "Intermediate Passphrase": { + "input": self.ui.ecIPassphraseQLineEdit, + "optional": False, + "min_length": 1 + }, + "Confirmation Code": { + "input": self.ui.ecConfirmCodeQLineEdit, + "optional": False, + "min_length": 1 + }, + "Encrypted WIF": { + "input": self.ui.decryptWIFQLineEdit, + "optional": False, + "min_length": 1 + } + } + self.__init_ui() def __init_ui(self) -> None: @@ -92,6 +150,17 @@ def __init_ui(self) -> None: self.ui.noECWIFTypeQComboBox.addItems(self.wif_types.keys()) self.ui.noECWIFTypeQComboBox.setCurrentIndex(0) + self.ui.createEncryptedWIFTypeQComboBox.addItems(self.wif_types.keys()) + self.ui.createEncryptedWIFTypeQComboBox.setCurrentIndex(0) + + # validation stuff + + for key, item in self.inputs.items(): + qt_input = item["input"] + + if "validator" in item: + qt_input.setValidator(item["validator"]) + qt_input.textChanged.connect(functools.partial(self.validate_input, key)) self.ui.ecLotQLineEdit.textEdited.connect( lambda: self.validate_int(self.ui.ecLotQLineEdit) @@ -106,8 +175,6 @@ def __init_ui(self) -> None: self.ui.ecSequenceQLineEdit.editingFinished.connect( lambda: self.enforce_int_range(self.ui.ecSequenceQLineEdit, 0, 4095) ) - self.ui.createEncryptedWIFTypeQComboBox.addItems(self.wif_types.keys()) - self.ui.createEncryptedWIFTypeQComboBox.setCurrentIndex(0) # button bindings self.ui.noECPrivateKeyConvertQPushButton.clicked.connect(self.noec_convert_private_key) @@ -136,20 +203,6 @@ def __init_ui(self) -> None: self.ui.cryptocurrencyQComboBox.setCurrentText("Bitcoin") self.ui.modeQComboBox.setCurrentIndex(0) - def validate_int(self, line_edit): - text = line_edit.text() - if not text.isdigit(): - line_edit.setText(''.join(filter(str.isdigit, text))) - - def enforce_int_range(self, line_edit, min_value, max_value): - text = line_edit.text() - validator = line_edit.validator() - - if text.isdigit(): - value = int(text) - value = max(min_value, min(value, max_value)) # clamp - line_edit.setText(str(value)) - def change_cryptocurrency(self, cryptocurrency: str) -> None: cryptocurrency_class: ICryptocurrency = self.cryptocurrencies[cryptocurrency] @@ -164,61 +217,69 @@ def change_mode(self, mode: str) -> None: self.ui.createEncryptedWIFTypeQComboBox.setVisible(is_on_ec) self.ui.createEncryptedWIFQPushButton.setVisible(is_on_ec) self.ui.modeQStackedWidget.setCurrentWidget(self.modes[mode]) + self.clean_all_required() + + def cryptocurrency(self): + cryptocurrency_name: str = self.ui.cryptocurrencyQComboBox.currentText() + cryptocurrency: ICryptocurrency = self.cryptocurrencies[cryptocurrency_name] + return cryptocurrency + + def netowrk(self): + return self.ui.networkQComboBox.currentText().lower() + + + def bip38(self): + return BIP38( + cryptocurrency=self.cryptocurrency(), + network=self.netowrk() + ) - def noec_convert_private_key(self): - private_key: str = self.ui.noECPrivateKeyQLineEdit.text().strip() - wif_type: str = self.ui.noECWIFTypeQComboBox.currentText() - + def noec_convert_private_key(self): try: + private_key, = self.validate_and_get("Private Key") + wif: str = private_key_to_wif( private_key=private_key, - cryptocurrency=self.get_cryptocurrency(), - network=self.get_netowrk(), - wif_type=wif_type + cryptocurrency=self.cryptocurrency(), + network=self.netowrk(), + wif_type=self.ui.noECWIFTypeQComboBox.currentText() ) self.ui.noECWIFQLineEdit.setText(wif) - except ValueError as e: - self.set_required(self.ui.noECPrivateKeyQLineEdit) + except (ValueError, BIP38Application.ValidationError) as e: self.logerr(f"Error: {e}") def noec_encrypt(self): - wif: str = self.ui.noECWIFQLineEdit.text().strip() - - # validate=True will show error if passphrase is not set - if not (passphrase := self.get_passphrase(validate=True)): - return None - - bip38: BIP38 = BIP38( - cryptocurrency=self.get_cryptocurrency(), - network=self.get_netowrk() - ) - try: - encrypted_wif: str = bip38.encrypt( + wif, passphrase = self.validate_and_get("WIF", "Passphrase") + + encrypted_wif: str = self.bip38().encrypt( wif=wif, passphrase=passphrase ) self.ui.decryptWIFQLineEdit.setText(encrypted_wif) self.log(encrypted_wif) except ValueError as e: - self.set_required(self.ui.noECWIFQLineEdit) + self.set_required(self.ui.noECWIFQLineEdit, True) self.logerr(f"Error: {e}") + except BIP38Application.ValidationError as ve: + self.logerr(f"Error: {ve}") def ec_generate_ipassphrase(self): - if not (passphrase := self.get_passphrase(validate=True)): - return None + try: + + passphrase, owner_salt, lot, sequence = self.validate_and_get( + "Passphrase", "Owner Salt", "Lot", "Sequence" + ) - owner_salt: str = self.ui.ecOwnerSaltQLineEdit.text().strip() - lot: Optional[int] = str_to_int(self.ui.ecLotQLineEdit.text()) - sequence: Optional[int] = str_to_int(self.ui.ecSequenceQLineEdit.text()) + lot: Optional[int] = str_to_int(lot) + sequence: Optional[int] = str_to_int(sequence) - bip38: BIP38 = BIP38( - cryptocurrency=self.get_cryptocurrency(), - network=self.get_netowrk() - ) + if (lot and not sequence) or (not lot and sequence): + self.set_required(self.ui.ecLotQLineEdit, True) + self.set_required(self.ui.ecSequenceQLineEdit, True) + raise BIP38Application.ValidationError("'Lot' and 'Sequence' must both be set or both left blank.") - try: - intermediate_passphrase: str = bip38.intermediate_code( + intermediate_passphrase: str = self.bip38().intermediate_code( passphrase=passphrase, owner_salt=owner_salt, lot=lot, @@ -226,45 +287,39 @@ def ec_generate_ipassphrase(self): ) self.ui.ecIPassphraseQLineEdit.setText(intermediate_passphrase) self.log(intermediate_passphrase) - except ValueError as e: + except ValueError as e: self.logerr(f"Error: {e}") + except BIP38Application.ValidationError as ve: + self.logerr(f"Error: {ve}") def ec_confirm_code(self): - if not (passphrase := self.get_passphrase(validate=True)): - return None - - confirmation_code: str = self.ui.ecConfirmCodeQLineEdit.text().strip() - encrypted_wif: str = self.ui.decryptWIFQLineEdit.text().strip() - - bip38: BIP38 = BIP38( - cryptocurrency=self.get_cryptocurrency(), - network=self.get_netowrk() - ) - try: - confirmation_code=bip38.confirm_code( + passphrase, confirmation_code, encrypted_wif = self.validate_and_get( + "Passphrase", "Confirmation Code", "Encrypted WIF" + ) + + confirmation_code = self.bip38().confirm_code( passphrase=passphrase, confirmation_code=confirmation_code, detail=True ) self.log(confirmation_code) except ValueError as e: + self.set_required(self.ui.ecConfirmCodeQLineEdit, True) self.logerr(f"Error: {e}") - + except BIP38Application.ValidationError as ve: + self.logerr(f"Error: {ve}") def create_encrypted_wif(self): - intermediate_passphrase: str = self.ui.ecIPassphraseQLineEdit.text().strip() - seed: str = self.ui.ecSeedQLineEdit.text().strip() - wif_type: str = self.ui.createEncryptedWIFTypeQComboBox.currentText() - wif_type = self.wif_types[wif_type] - - bip38: BIP38 = BIP38( - cryptocurrency=self.get_cryptocurrency(), - network=self.get_netowrk() - ) - try: - encrypted_wif: str = bip38.create_new_encrypted_wif( + seed, intermediate_passphrase = self.validate_and_get( + "Seed", "Intermediate Passphrase" + ) + + wif_type: str = self.ui.createEncryptedWIFTypeQComboBox.currentText() + wif_type = self.wif_types[wif_type] + + encrypted_wif: str = self.bip38().create_new_encrypted_wif( intermediate_passphrase=intermediate_passphrase, public_key_type=wif_type, seed=seed, @@ -272,45 +327,26 @@ def create_encrypted_wif(self): self.ui.decryptWIFQLineEdit.setText(encrypted_wif["encrypted_wif"]) self.log(encrypted_wif) except ValueError as e: + self.set_required(self.ui.ecIPassphraseQLineEdit, True) self.logerr(f"Error: {e}") + except BIP38Application.ValidationError as ve: + self.logerr(f"Error: {ve}") - def decrypt(self): - encrypted_wif: str = self.ui.decryptWIFQLineEdit.text().strip() - - if not (passphrase := self.get_passphrase(validate=True)): - return None - - bip38: BIP38 = BIP38( - cryptocurrency=self.get_cryptocurrency(), - network=self.get_netowrk() - ) + def decrypt(self): try: - decrypted_wif: dict = bip38.decrypt( + encrypted_wif, passphrase = self.validate_and_get("Encrypted WIF", "Passphrase") + decrypted_wif: dict = self.bip38().decrypt( encrypted_wif=encrypted_wif, passphrase=passphrase, detail=True ) self.log(decrypted_wif) except ValueError as e: - self.set_required(self.ui.decryptWIFQLineEdit) + self.set_required(self.ui.decryptWIFQLineEdit, True) self.logerr(f"Error: {e}") - - def get_cryptocurrency(self): - cryptocurrency_name: str = self.ui.cryptocurrencyQComboBox.currentText() - cryptocurrency: ICryptocurrency = self.cryptocurrencies[cryptocurrency_name] - return cryptocurrency - - def get_netowrk(self): - return self.ui.networkQComboBox.currentText().lower() - - def get_passphrase(self, validate): - passphrase: str = self.ui.passphraseQLineEdit.text().strip() - if validate and not passphrase: - self.set_required(self.ui.passphraseQLineEdit) - self.logerr("Error: Passphrase Required") - - return passphrase + except BIP38Application.ValidationError as ve: + self.logerr(f"Error: {ve}") def log(self, data: Optional[Union[str, dict]], end="\n") -> None: if isinstance(data, dict): @@ -355,8 +391,65 @@ def logerr(self, err: str , end: str="\n") -> None: self.ui.outputQTextEdit.setTextCursor(cursor) self.ui.outputQTextEdit.ensureCursorVisible() + ## validation related functions + + class ValidationError(Exception): + def __init__(self, message): + super().__init__(message) + + def validate_and_get(self, *args): + self.clean_all_required() # forget old validations + + all_data = () + valid_inputs = 0 + + for input_key in args: + input_data = self.inputs[input_key] + text = input_data["input"].text() + + all_data += (text,) + valid_inputs += self.validate_input(input_key, text) + + if len(args) != valid_inputs: + raise BIP38Application.ValidationError("Please Fill All Required Fields!") + + return all_data + + def validate_input(self, input_key, text): + input_data = self.inputs[input_key] + + qt_input = input_data["input"] + optional = input_data["optional"] + min_length = input_data["min_length"] + + is_valid = len(text) >= min_length or (optional and len(text) == 0) + self.set_required(qt_input, not is_valid) + + return is_valid + def set_required(self, widget, value=True): widget.setProperty("required", value) widget.style().unpolish(widget) widget.style().polish(widget) - widget.update() \ No newline at end of file + widget.update() + + def clean_all_required(self): + for key, item in self.inputs.items(): + self.set_required(item["input"], False) + + def validate_int(self, line_edit): + text = line_edit.text() + if not text.isdigit(): + line_edit.setText(''.join(filter(str.isdigit, text))) + + def enforce_int_range(self, line_edit, min_value, max_value): + text = line_edit.text() + validator = line_edit.validator() + + if text.isdigit(): + value = int(text) + value = max(min_value, min(value, max_value)) # clamp + line_edit.setText(str(value)) + + def regex_validator(self, regex): + return QRegularExpressionValidator(QRegularExpression(regex)) \ No newline at end of file From 9e52e55246a4d97e6b6bd6b70ca0d03bc59557c6 Mon Sep 17 00:00:00 2001 From: axiom Date: Sat, 24 Aug 2024 18:31:57 +0300 Subject: [PATCH 11/56] Update: intermediate passphrase validation --- desktop/main.py | 22 +++++++++++++--------- desktop/ui/bip38.ui | 9 ++++++++- desktop/ui/ui_bip38.py | 2 ++ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/desktop/main.py b/desktop/main.py index 4b5a0be..c2e255c 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -85,19 +85,20 @@ def __init__(self) -> None: }, "WIF": { "input": self.ui.noECWIFQLineEdit, + "validator": self.regex_validator("^[0-9A-Za-z]{1,52}$"), # alpha num only "optional": False, - "min_length": 1 + "min_length": 51 }, "Owner Salt": { "input": self.ui.ecOwnerSaltQLineEdit, "validator": self.regex_validator("^[0-9A-Fa-f]{1,16}$"), # hex only - "optional": True, + "optional": False, "min_length": 16 }, "Seed": { "input": self.ui.ecSeedQLineEdit, "validator": self.regex_validator("^[0-9A-Fa-f]{1,48}$"), # hex only - "optional": True, + "optional": False, "min_length": 48 }, "Lot": { @@ -112,18 +113,21 @@ def __init__(self) -> None: }, "Intermediate Passphrase": { "input": self.ui.ecIPassphraseQLineEdit, + "validator": self.regex_validator("^passphrase[0-9A-Za-z]{1,62}$"), # alpha num only with passphrase prefix "optional": False, - "min_length": 1 + "min_length": 72 }, "Confirmation Code": { "input": self.ui.ecConfirmCodeQLineEdit, + "validator": self.regex_validator("^cfrm[0-9A-Za-z]{1,71}$"), # alpha num only with passphrase cfrm "optional": False, - "min_length": 1 + "min_length": 75 }, "Encrypted WIF": { "input": self.ui.decryptWIFQLineEdit, + "validator": self.regex_validator("^[0-9A-Za-z]{1,58}$"), # alpha num only "optional": False, - "min_length": 1 + "min_length": 58 } } @@ -274,7 +278,7 @@ def ec_generate_ipassphrase(self): lot: Optional[int] = str_to_int(lot) sequence: Optional[int] = str_to_int(sequence) - if (lot and not sequence) or (not lot and sequence): + if (lot and sequence is None) or (lot is None and sequence): self.set_required(self.ui.ecLotQLineEdit, True) self.set_required(self.ui.ecSequenceQLineEdit, True) raise BIP38Application.ValidationError("'Lot' and 'Sequence' must both be set or both left blank.") @@ -294,8 +298,8 @@ def ec_generate_ipassphrase(self): def ec_confirm_code(self): try: - passphrase, confirmation_code, encrypted_wif = self.validate_and_get( - "Passphrase", "Confirmation Code", "Encrypted WIF" + passphrase, confirmation_code = self.validate_and_get( + "Passphrase", "Confirmation Code" ) confirmation_code = self.bip38().confirm_code( diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui index af26bfb..dca9530 100644 --- a/desktop/ui/bip38.ui +++ b/desktop/ui/bip38.ui @@ -1118,7 +1118,11 @@ 0 - + + + 100000 + + @@ -1223,6 +1227,9 @@ 0 + + 0 + diff --git a/desktop/ui/ui_bip38.py b/desktop/ui/ui_bip38.py index 57a2d4b..4ab8a32 100644 --- a/desktop/ui/ui_bip38.py +++ b/desktop/ui/ui_bip38.py @@ -802,7 +802,9 @@ def retranslateUi(self, MainWindow): self.ecSeedQLabel.setText(QCoreApplication.translate("MainWindow", u"Seed", None)) self.ecSeedGenerateQPushButton.setText(QCoreApplication.translate("MainWindow", u"Generate", None)) self.ecLotQLabel.setText(QCoreApplication.translate("MainWindow", u"Lot", None)) + self.ecLotQLineEdit.setText(QCoreApplication.translate("MainWindow", u"100000", None)) self.ecSequenceQLabel.setText(QCoreApplication.translate("MainWindow", u"Sequence", None)) + self.ecSequenceQLineEdit.setText(QCoreApplication.translate("MainWindow", u"0", None)) self.ecIPassphraseQLabel.setText(QCoreApplication.translate("MainWindow", u"Intermediate Passphrase", None)) self.ecIPassphraseGenerateQPushButton.setText(QCoreApplication.translate("MainWindow", u"Generate", None)) self.ecConfirmCodeQLabel.setText(QCoreApplication.translate("MainWindow", u"Confirm Code", None)) From 91430c3c3cf834d982597e5a0a6c84a2fd7dddd0 Mon Sep 17 00:00:00 2001 From: meherett Date: Sat, 24 Aug 2024 18:57:48 +0300 Subject: [PATCH 12/56] Update: all BIP39 exception massages --- bip38/const.py | 4 ++++ bip38/exceptions.py | 23 +++++++++++++++++------ bip38/secp256k1/point.py | 3 ++- bip38/secp256k1/private_key.py | 3 ++- bip38/secp256k1/public_key.py | 8 ++++---- bip38/wif.py | 28 ++++++++++++++-------------- 6 files changed, 43 insertions(+), 26 deletions(-) diff --git a/bip38/const.py b/bip38/const.py index 18743b0..92dc793 100644 --- a/bip38/const.py +++ b/bip38/const.py @@ -40,6 +40,10 @@ UNCOMPRESSED_PUBLIC_KEY_PREFIX: int = 0x04 # Checksum byte length CHECKSUM_BYTE_LENGTH: int = 4 +# Wallet Important Format (WIF) types +WIF_TYPES = ["wif", "wif-compressed"] +# Public Key types +PUBLIC_KEY_TYPES = ["uncompressed", "compressed"] # List of compression, lot_and_sequence, non_ec, ec, & illegal flags FLAGS: Dict[str, List[int]] = { "compression": [ diff --git a/bip38/exceptions.py b/bip38/exceptions.py index 43b23c1..fa76517 100644 --- a/bip38/exceptions.py +++ b/bip38/exceptions.py @@ -12,12 +12,8 @@ class Error(Exception): def __init__( - self, - message: str, - detail: Optional[str] = None, - expected: Any = None, - got: Any = None - ): + self, message: str, detail: Optional[str] = None, expected: Any = None, got: Any = None + ) -> None: self._message, self._detail, self._expected, self._got = ( message, detail, None, f"'{got}'" ) @@ -42,10 +38,25 @@ def __str__(self): return f"{self._message}" +class CryptocurrencyError(Error): + pass + + +class NetworkError(Error): + pass + + +class Secp256k1Error(Error): + pass + class AddressError(Error): pass +class WIFError(Error): + pass + + class PassphraseError(Error): pass diff --git a/bip38/secp256k1/point.py b/bip38/secp256k1/point.py index 94071a8..1f69c71 100644 --- a/bip38/secp256k1/point.py +++ b/bip38/secp256k1/point.py @@ -12,6 +12,7 @@ from ecdsa import keys from ..const import COORDINATE_POINT_LENGTH +from ..exceptions import Secp256k1Error from ..utils import ( bytes_to_integer, integer_to_bytes ) @@ -49,7 +50,7 @@ def from_bytes(cls, point: bytes) -> "Point": ) ) except keys.MalformedPointError as ex: - raise ValueError("Invalid point key bytes") from ex + raise Secp256k1Error("Invalid point key bytes") from ex except AttributeError: return cls.from_coordinates( bytes_to_integer(point[:COORDINATE_POINT_LENGTH]), diff --git a/bip38/secp256k1/private_key.py b/bip38/secp256k1/private_key.py index d0ac656..51f973e 100644 --- a/bip38/secp256k1/private_key.py +++ b/bip38/secp256k1/private_key.py @@ -11,6 +11,7 @@ ) from ..const import PRIVATE_KEY_LENGTH +from ..exceptions import Secp256k1Error from .public_key import PublicKey @@ -47,7 +48,7 @@ def from_bytes(cls, private_key: bytes) -> "PrivateKey": ) ) except keys.MalformedPointError as ex: - raise ValueError("Invalid private key bytes") from ex + raise Secp256k1Error("Invalid private key bytes") from ex @staticmethod def length() -> int: diff --git a/bip38/secp256k1/public_key.py b/bip38/secp256k1/public_key.py index e557825..b67cc19 100644 --- a/bip38/secp256k1/public_key.py +++ b/bip38/secp256k1/public_key.py @@ -12,9 +12,9 @@ ) from ..const import ( - COMPRESSED_PUBLIC_KEY_LENGTH, - UNCOMPRESSED_PUBLIC_KEY_LENGTH + COMPRESSED_PUBLIC_KEY_LENGTH, UNCOMPRESSED_PUBLIC_KEY_LENGTH ) +from ..exceptions import Secp256k1Error from .point import Point @@ -51,7 +51,7 @@ def from_bytes(cls, public_key: bytes) -> "PublicKey": ) ) except keys.MalformedPointError as ex: - raise ValueError("Invalid public key bytes") from ex + raise Secp256k1Error("Invalid public key bytes") from ex @classmethod def from_point(cls, point: Point) -> "PublicKey": @@ -75,7 +75,7 @@ def from_point(cls, point: Point) -> "PublicKey": ) ) except keys.MalformedPointError as ex: - raise ValueError("Invalid public key point") from ex + raise Secp256k1Error("Invalid public key point") from ex @staticmethod def compressed_length() -> int: diff --git a/bip38/wif.py b/bip38/wif.py index 2995573..9874f84 100644 --- a/bip38/wif.py +++ b/bip38/wif.py @@ -5,7 +5,7 @@ # file COPYING or https://opensource.org/license/mit from typing import ( - Union, Tuple, Type, Optional + Union, Tuple, Type ) from .libs.base58 import ( @@ -14,8 +14,13 @@ from .cryptocurrencies import ( ICryptocurrency, Bitcoin ) -from .const import COMPRESSED_PRIVATE_KEY_PREFIX +from .const import ( + COMPRESSED_PRIVATE_KEY_PREFIX, WIF_TYPES +) from .crypto import get_checksum +from .exceptions import ( + WIFError, Secp256k1Error +) from .utils import ( get_bytes, integer_to_bytes, bytes_to_string ) @@ -37,7 +42,7 @@ def encode_wif( """ if len(get_bytes(private_key)) != 32: - raise ValueError(f"Invalid private key length (expected 64, got {len(private_key)!r})") + raise Secp256k1Error("Invalid private key length", expected=64, got=len(private_key)) wif_payload: bytes = ( integer_to_bytes(wif_prefix) + get_bytes(private_key) @@ -68,21 +73,20 @@ def decode_wif( raw: bytes = decode(wif) if not raw.startswith(integer_to_bytes(wif_prefix)): - raise ValueError(f"Invalid wallet important format") + raise WIFError(f"Invalid Wallet Important Format (WIF)") prefix_length: int = len(integer_to_bytes(wif_prefix)) prefix_got: bytes = raw[:prefix_length] if integer_to_bytes(wif_prefix) != prefix_got: - raise ValueError(f"Invalid WIF prefix (expected {prefix_length!r}, got {prefix_got!r})") + raise WIFError("Invalid WIF prefix", expected=prefix_length, got=prefix_got) raw_without_prefix: bytes = raw[prefix_length:] - checksum: bytes = raw_without_prefix[-1 * 4:] private_key: bytes = raw_without_prefix[:-1 * 4] wif_type: str = "wif" if len(private_key) not in [33, 32]: - raise ValueError(f"Invalid wallet important format") + raise WIFError(f"Invalid Wallet Important Format (WIF)") elif len(private_key) == 33: private_key = private_key[:-len(integer_to_bytes(COMPRESSED_PRIVATE_KEY_PREFIX))] wif_type = "wif-compressed" @@ -112,16 +116,12 @@ def private_key_to_wif( :rtype: str """ - # Getting uncompressed and compressed + if wif_type not in WIF_TYPES: + raise WIFError("Wrong WIF type", expected=WIF_TYPES, got=wif_type) wif, wif_compressed = encode_wif( private_key=private_key, wif_prefix=cryptocurrency.NETWORKS[network]["wif_prefix"] ) - if wif_type == "wif": - return wif - elif wif_type == "wif-compressed": - return wif_compressed - else: - raise ValueError("Invalid WIF type, choose only 'wif' or 'wif-compressed' types") + return wif if wif_type == "wif" else wif_compressed def wif_to_private_key( From 30e87842123a5bcb0ae4c839b8673fd4f99cb41b Mon Sep 17 00:00:00 2001 From: meherett Date: Sat, 24 Aug 2024 19:28:51 +0300 Subject: [PATCH 13/56] Change: public_key_type into wif_type arg --- README.md | 20 ++++++++--------- docs/index.rst | 22 +++++++++---------- ...c-multiply, compression, lot-&-sequence.py | 6 ++--- ...ultiply, compression, no-lot-&-sequence.py | 6 ++--- ...ultiply, no-compression, lot-&-sequence.py | 6 ++--- ...iply, no-compression, no-lot-&-sequence.py | 6 ++--- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index bbca156..34faefa 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Bitcoin Improvement Proposal - 0038 / BIP38 -[![Build Status](https://app.travis-ci.com/meherett/python-bip38.svg?branch=master)](https://app.travis-ci.com/meherett/python-bip38) +[![Build Status](https://img.shields.io/github/actions/workflow/status/meherett/python-bip38/build.yml)](https://github.com/meherett/python-bip38/actions/workflows/build.yml) [![PyPI Version](https://img.shields.io/pypi/v/bip38.svg?color=blue)](https://pypi.org/project/bip38) [![Documentation Status](https://readthedocs.org/projects/bip38/badge/?version=master)](https://bip38.readthedocs.io) [![PyPI License](https://img.shields.io/pypi/l/bip38?color=black)](https://pypi.org/project/bip38) @@ -141,21 +141,21 @@ bip38: BIP38 = BIP38( # List of owner salt, seed, public key type, lot, and sequence kwargs KWARGS: List[dict] = [ # Random owner salt & seed, No compression, No lot & sequence - {"owner_salt": os.urandom(8), "seed": os.urandom(24), "public_key_type": "uncompressed", "lot": None, "sequence": None}, + {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif", "lot": None, "sequence": None}, # Random owner salt & seed, No compression, With lot & sequence - {"owner_salt": os.urandom(8), "seed": os.urandom(24), "public_key_type": "uncompressed", "lot": 863741, "sequence": 1}, + {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif", "lot": 863741, "sequence": 1}, # Random owner salt & seed, Compression, No lot & sequence - {"owner_salt": os.urandom(8), "seed": os.urandom(24), "public_key_type": "compressed", "lot": None, "sequence": None}, + {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif-compressed", "lot": None, "sequence": None}, # Random owner salt & seed, Compression, With lot & sequence - {"owner_salt": os.urandom(8), "seed": os.urandom(24), "public_key_type": "compressed", "lot": 863741, "sequence": 1}, + {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif-compressed", "lot": 863741, "sequence": 1}, # With owner salt & seed, No compression, No lot & sequence - {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "public_key_type": "uncompressed", "lot": None, "sequence": None}, + {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif", "lot": None, "sequence": None}, # With owner salt & seed, No compression, With lot & sequence - {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "public_key_type": "uncompressed", "lot": 567885, "sequence": 1}, + {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif", "lot": 567885, "sequence": 1}, # With owner salt & seed, Compression, No lot & sequence - {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "public_key_type": "compressed", "lot": None, "sequence": None}, + {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif-compressed", "lot": None, "sequence": None}, # With owner salt & seed, Compression, With lot & sequence - {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "public_key_type": "compressed", "lot": 369861, "sequence": 1}, + {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif-compressed", "lot": 369861, "sequence": 1}, ] for kwarg in KWARGS: @@ -166,7 +166,7 @@ for kwarg in KWARGS: print("Intermediate Passphrase:", intermediate_passphrase) encrypted_wif: dict = bip38.create_new_encrypted_wif( - intermediate_passphrase=intermediate_passphrase, public_key_type=kwarg["public_key_type"], seed=kwarg["seed"], + intermediate_passphrase=intermediate_passphrase, wif_type=kwarg["wif_type"], seed=kwarg["seed"], ) print("Encrypted WIF:", json.dumps(encrypted_wif, indent=4)) diff --git a/docs/index.rst b/docs/index.rst index e3a5994..b7d66be 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -4,8 +4,8 @@ Bitcoin Improvement Proposal - 0038 / BIP38 |Build Status| |PyPI Version| |Documentation Status| |PyPI License| |PyPI Python Version| |Coverage Status| -.. |Build Status| image:: https://travis-ci.org/meherett/python-bip38.svg?branch=master - :target: https://travis-ci.org/meherett/python-bip38?branch=master +.. |Build Status| image:: https://img.shields.io/github/actions/workflow/status/meherett/python-bip38/build.yml + :target: https://github.com/meherett/python-bip38/actions/workflows/build.yml .. |PyPI Version| image:: https://img.shields.io/pypi/v/bip38.svg?color=blue :target: https://pypi.org/project/bip38 @@ -172,21 +172,21 @@ EC multiply: # List of owner salt, seed, public key type, lot, and sequence kwargs KWARGS: List[dict] = [ # Random owner salt & seed, No compression, No lot & sequence - {"owner_salt": os.urandom(8), "seed": os.urandom(24), "public_key_type": "uncompressed", "lot": None, "sequence": None}, + {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif", "lot": None, "sequence": None}, # Random owner salt & seed, No compression, With lot & sequence - {"owner_salt": os.urandom(8), "seed": os.urandom(24), "public_key_type": "uncompressed", "lot": 863741, "sequence": 1}, + {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif", "lot": 863741, "sequence": 1}, # Random owner salt & seed, Compression, No lot & sequence - {"owner_salt": os.urandom(8), "seed": os.urandom(24), "public_key_type": "compressed", "lot": None, "sequence": None}, + {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif-compressed", "lot": None, "sequence": None}, # Random owner salt & seed, Compression, With lot & sequence - {"owner_salt": os.urandom(8), "seed": os.urandom(24), "public_key_type": "compressed", "lot": 863741, "sequence": 1}, + {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif-compressed", "lot": 863741, "sequence": 1}, # With owner salt & seed, No compression, No lot & sequence - {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "public_key_type": "uncompressed", "lot": None, "sequence": None}, + {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif", "lot": None, "sequence": None}, # With owner salt & seed, No compression, With lot & sequence - {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "public_key_type": "uncompressed", "lot": 567885, "sequence": 1}, + {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif", "lot": 567885, "sequence": 1}, # With owner salt & seed, Compression, No lot & sequence - {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "public_key_type": "compressed", "lot": None, "sequence": None}, + {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif-compressed", "lot": None, "sequence": None}, # With owner salt & seed, Compression, With lot & sequence - {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "public_key_type": "compressed", "lot": 369861, "sequence": 1}, + {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif-compressed", "lot": 369861, "sequence": 1}, ] for kwarg in KWARGS: @@ -197,7 +197,7 @@ EC multiply: print("Intermediate Passphrase:", intermediate_passphrase) encrypted_wif: dict = bip38.create_new_encrypted_wif( - intermediate_passphrase=intermediate_passphrase, public_key_type=kwarg["public_key_type"], seed=kwarg["seed"], + intermediate_passphrase=intermediate_passphrase, wif_type=kwarg["wif_type"], seed=kwarg["seed"], ) print("Encrypted WIF:", json.dumps(encrypted_wif, indent=4)) diff --git a/examples/ec-multiply, compression, lot-&-sequence.py b/examples/ec-multiply, compression, lot-&-sequence.py index 4e11142..b1d0749 100644 --- a/examples/ec-multiply, compression, lot-&-sequence.py +++ b/examples/ec-multiply, compression, lot-&-sequence.py @@ -17,8 +17,8 @@ OWNER_SALT: Union[str, bytes] = os.urandom(8) # Example: "75ed1cdeb254cb38" # Pick a random seed or use your own SEED: Union[str, bytes] = os.urandom(24) # Example: "99241d58245c883896f80843d2846672d7312e6195ca1a6c" -# Specify the public key type -PUBLIC_KEY_TYPE: Literal["uncompressed", "compressed"] = "compressed" +# Specify the WIF type +WIF_TYPE: Literal["wif", "wif-compressed"] = "wif-compressed" # Define the network type NETWORK: str = "mainnet" # Specify the lot number (100000 <= lot <= 999999), or set to None @@ -39,7 +39,7 @@ print("Intermediate Passphrase:", intermediate_passphrase) # Create a new encrypted WIF (Wallet Import Format) using the intermediate passphrase encrypted_wif: dict = bip38.create_new_encrypted_wif( - intermediate_passphrase=intermediate_passphrase, public_key_type=PUBLIC_KEY_TYPE, seed=SEED + intermediate_passphrase=intermediate_passphrase, wif_type=WIF_TYPE, seed=SEED ) print("Encrypted WIF:", json.dumps(encrypted_wif, indent=4)) # Confirm the encrypted WIF using the passphrase and confirmation code diff --git a/examples/ec-multiply, compression, no-lot-&-sequence.py b/examples/ec-multiply, compression, no-lot-&-sequence.py index 84bcefb..6aec728 100644 --- a/examples/ec-multiply, compression, no-lot-&-sequence.py +++ b/examples/ec-multiply, compression, no-lot-&-sequence.py @@ -17,8 +17,8 @@ OWNER_SALT: Union[str, bytes] = os.urandom(8) # Example: "75ed1cdeb254cb38" # Pick a random seed or use your own SEED: Union[str, bytes] = os.urandom(24) # Example: "99241d58245c883896f80843d2846672d7312e6195ca1a6c" -# Specify the public key type -PUBLIC_KEY_TYPE: Literal["uncompressed", "compressed"] = "compressed" +# Specify the WIF type +WIF_TYPE: Literal["wif", "wif-compressed"] = "wif-compressed" # Define the network type NETWORK: str = "mainnet" # Specify the lot number (100000 <= lot <= 999999), or set to None @@ -39,7 +39,7 @@ print("Intermediate Passphrase:", intermediate_passphrase) # Create a new encrypted WIF (Wallet Import Format) using the intermediate passphrase encrypted_wif: dict = bip38.create_new_encrypted_wif( - intermediate_passphrase=intermediate_passphrase, public_key_type=PUBLIC_KEY_TYPE, seed=SEED + intermediate_passphrase=intermediate_passphrase, wif_type=WIF_TYPE, seed=SEED ) print("Encrypted WIF:", json.dumps(encrypted_wif, indent=4)) # Confirm the encrypted WIF using the passphrase and confirmation code diff --git a/examples/ec-multiply, no-compression, lot-&-sequence.py b/examples/ec-multiply, no-compression, lot-&-sequence.py index bf55f42..b1d0749 100644 --- a/examples/ec-multiply, no-compression, lot-&-sequence.py +++ b/examples/ec-multiply, no-compression, lot-&-sequence.py @@ -17,8 +17,8 @@ OWNER_SALT: Union[str, bytes] = os.urandom(8) # Example: "75ed1cdeb254cb38" # Pick a random seed or use your own SEED: Union[str, bytes] = os.urandom(24) # Example: "99241d58245c883896f80843d2846672d7312e6195ca1a6c" -# Specify the public key type -PUBLIC_KEY_TYPE: Literal["uncompressed", "compressed"] = "uncompressed" +# Specify the WIF type +WIF_TYPE: Literal["wif", "wif-compressed"] = "wif-compressed" # Define the network type NETWORK: str = "mainnet" # Specify the lot number (100000 <= lot <= 999999), or set to None @@ -39,7 +39,7 @@ print("Intermediate Passphrase:", intermediate_passphrase) # Create a new encrypted WIF (Wallet Import Format) using the intermediate passphrase encrypted_wif: dict = bip38.create_new_encrypted_wif( - intermediate_passphrase=intermediate_passphrase, public_key_type=PUBLIC_KEY_TYPE, seed=SEED + intermediate_passphrase=intermediate_passphrase, wif_type=WIF_TYPE, seed=SEED ) print("Encrypted WIF:", json.dumps(encrypted_wif, indent=4)) # Confirm the encrypted WIF using the passphrase and confirmation code diff --git a/examples/ec-multiply, no-compression, no-lot-&-sequence.py b/examples/ec-multiply, no-compression, no-lot-&-sequence.py index e3229fb..6aec728 100644 --- a/examples/ec-multiply, no-compression, no-lot-&-sequence.py +++ b/examples/ec-multiply, no-compression, no-lot-&-sequence.py @@ -17,8 +17,8 @@ OWNER_SALT: Union[str, bytes] = os.urandom(8) # Example: "75ed1cdeb254cb38" # Pick a random seed or use your own SEED: Union[str, bytes] = os.urandom(24) # Example: "99241d58245c883896f80843d2846672d7312e6195ca1a6c" -# Specify the public key type -PUBLIC_KEY_TYPE: Literal["uncompressed", "compressed"] = "uncompressed" +# Specify the WIF type +WIF_TYPE: Literal["wif", "wif-compressed"] = "wif-compressed" # Define the network type NETWORK: str = "mainnet" # Specify the lot number (100000 <= lot <= 999999), or set to None @@ -39,7 +39,7 @@ print("Intermediate Passphrase:", intermediate_passphrase) # Create a new encrypted WIF (Wallet Import Format) using the intermediate passphrase encrypted_wif: dict = bip38.create_new_encrypted_wif( - intermediate_passphrase=intermediate_passphrase, public_key_type=PUBLIC_KEY_TYPE, seed=SEED + intermediate_passphrase=intermediate_passphrase, wif_type=WIF_TYPE, seed=SEED ) print("Encrypted WIF:", json.dumps(encrypted_wif, indent=4)) # Confirm the encrypted WIF using the passphrase and confirmation code From b66bb1abff52ac595677051a7f5a8af533f309f1 Mon Sep 17 00:00:00 2001 From: meherett Date: Sat, 24 Aug 2024 19:31:51 +0300 Subject: [PATCH 14/56] Update: Tox configuration for testing --- .travis.yml | 15 --------------- tox.ini | 42 ++++++++++++++---------------------------- 2 files changed, 14 insertions(+), 43 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3eeacc2..0000000 --- a/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: python -dist: bionic -before_install: - - python -m pip install --upgrade pip -install: - - pip install -e .[tests,docs] tox-travis -matrix: - include: - - name: "3.9" - python: 3.9 - - name: "3.10" - python: 3.10 - - name: "3.11" - python: 3.11 -script: tox diff --git a/tox.ini b/tox.ini index 0c83767..ade7570 100644 --- a/tox.ini +++ b/tox.ini @@ -1,29 +1,15 @@ -[tox] -envlist = python39,python310,python311 - -[travis] -python = - 3.9: python39 - 3.10: python310 - 3.11: python311 - -[testenv:python39] -install_command = - python -m pip install --upgrade pip {opts} {packages} - pip install -e . {opts} {packages} -extras = tests,docs -commands = python -m pytest +# Tox configuration for testing across multiple Python versions with coverage reporting -[testenv:python310] -install_command = - python -m pip install --upgrade pip {opts} {packages} - pip install -e . {opts} {packages} -extras = tests,docs -commands = python -m pytest - -[testenv:python311] -install_command = - python -m pip install --upgrade pip {opts} {packages} - pip install -e . {opts} {packages} -extras = tests,docs -commands = python -m pytest +[tox] +envlist = python39,python310,python311,python312 +skipsdist = True + +[testenv] +commands_pre = python -m pip install --upgrade pip +install_command = pip install -e .[tests] +allowlist_externals = + coverage + pytest +commands = + coverage run -m pytest + coverage report From 0251c7906af22dddc3c7c4fbddf70d7031e99f78 Mon Sep 17 00:00:00 2001 From: meherett Date: Sat, 24 Aug 2024 19:41:44 +0300 Subject: [PATCH 15/56] Update: all BIP38 test funcs & value.json --- tests/data/values.json | 4 +-- tests/test_bip38.py | 60 ++++++++++++++++++++++++++++++++++++++-- tests/test_exceptions.py | 26 +++++++++++++++++ 3 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 tests/test_exceptions.py diff --git a/tests/data/values.json b/tests/data/values.json index 3aa7682..9492127 100644 --- a/tests/data/values.json +++ b/tests/data/values.json @@ -12,8 +12,8 @@ {"wif": "cURAYbG6FtvUasdBsooEmmY9MqUfhJ8tdybQWV7iA4BAwunCT2Fu", "passphrase": "TestingOneTwoThree", "network": "testnet", "encrypted_wif": "6PYVB5nHnumbUua1UmsAMPHWHa76Ci48MY79aKYnpKmwxeGqHU2XpXtKvo"} ], "create_new_encrypted_wif": [ - {"intermediate_passphrase": "passphraserDFxboKK9cTkBQMb73vdzgsXB5L6cCMFCzTVoMTpMWYD8SJXv3jcKyHbRWBcza", "seed": "9b6cad86daddae99ac3b76c1e47e61bc7f4665d02e10c290", "encrypted_wif": "6PnQDk5XngQugiy1Fi2kzzgKAQrxZrtQDGNFiQTMamjiJcjBT4LhXdnhNf", "confirmation_code": "cfrm38VUF9PjRxQojZERDySt9Q7Z9FSdhQkMP5RFsouS4y3Emf2YD2CXXMCypQvv94dJujaPTfq", "public_key": "0348ca8b4e7c0c75ecfd4b437535d186a12f3027be0c29d2125e9c0dec48677caa", "public_key_type": "compressed", "address": "16uZsrjjENCVsXwJqw2kMWGwWbDKQ12a1h"}, - {"intermediate_passphrase": "passphrasedYVZ6EdRqSmcHHsYWmJ7wzWcWYuDQmf9EGH9Pnrv67eHy4qswaAGGc8Et3eeGp", "seed": "9b6cad86daddae99ac3b76c1e47e61bc7f4665d02e10c290", "encrypted_wif": "6PgRAPfrPWjPXfC6x9XB139RHzUP8GFcVen5Ju3qJDhRP69Q4Vd8Wbct6B", "confirmation_code": "cfrm38V8kEzECGczWJmEoGuYfkoamcmVij3tHUhD6DEEquSRXp61HzhnT8jwQwBBZiKs9Jg4LXZ", "public_key": "04597967956e7f4c0e13ed7cd98baa9d7697a7f685d4347168e4a011c5fe6ba628e06ef89587c17afb55044336e44648dfa944ca85a4af0a7b28c29d4eefd0da92", "public_key_type": "uncompressed", "address": "1KRg2YJxuHiNcqfp9gVpkgRFhcvALy1zgk"} + {"intermediate_passphrase": "passphraserDFxboKK9cTkBQMb73vdzgsXB5L6cCMFCzTVoMTpMWYD8SJXv3jcKyHbRWBcza", "seed": "9b6cad86daddae99ac3b76c1e47e61bc7f4665d02e10c290", "encrypted_wif": "6PnQDk5XngQugiy1Fi2kzzgKAQrxZrtQDGNFiQTMamjiJcjBT4LhXdnhNf", "confirmation_code": "cfrm38VUF9PjRxQojZERDySt9Q7Z9FSdhQkMP5RFsouS4y3Emf2YD2CXXMCypQvv94dJujaPTfq", "public_key": "0348ca8b4e7c0c75ecfd4b437535d186a12f3027be0c29d2125e9c0dec48677caa", "wif_type": "wif-compressed", "public_key_type": "compressed", "address": "16uZsrjjENCVsXwJqw2kMWGwWbDKQ12a1h"}, + {"intermediate_passphrase": "passphrasedYVZ6EdRqSmcHHsYWmJ7wzWcWYuDQmf9EGH9Pnrv67eHy4qswaAGGc8Et3eeGp", "seed": "9b6cad86daddae99ac3b76c1e47e61bc7f4665d02e10c290", "encrypted_wif": "6PgRAPfrPWjPXfC6x9XB139RHzUP8GFcVen5Ju3qJDhRP69Q4Vd8Wbct6B", "confirmation_code": "cfrm38V8kEzECGczWJmEoGuYfkoamcmVij3tHUhD6DEEquSRXp61HzhnT8jwQwBBZiKs9Jg4LXZ", "public_key": "04597967956e7f4c0e13ed7cd98baa9d7697a7f685d4347168e4a011c5fe6ba628e06ef89587c17afb55044336e44648dfa944ca85a4af0a7b28c29d4eefd0da92", "wif_type": "wif", "public_key_type": "uncompressed", "address": "1KRg2YJxuHiNcqfp9gVpkgRFhcvALy1zgk"} ], "confirm_code": [ {"passphrase": "MOLON LABE", "confirmation_code": "cfrm38VUF9PjRxQojZERDySt9Q7Z9FSdhQkMP5RFsouS4y3Emf2YD2CXXMCypQvv94dJujaPTfq", "public_key": "0348ca8b4e7c0c75ecfd4b437535d186a12f3027be0c29d2125e9c0dec48677caa", "public_key_type": "compressed", "address": "16uZsrjjENCVsXwJqw2kMWGwWbDKQ12a1h", "lot": null, "sequence": null}, diff --git a/tests/test_bip38.py b/tests/test_bip38.py index 9f7aaaa..0284dcc 100644 --- a/tests/test_bip38.py +++ b/tests/test_bip38.py @@ -4,8 +4,13 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://opensource.org/license/mit +import pytest + from bip38.bip38 import BIP38 from bip38.cryptocurrencies import Bitcoin +from bip38.exceptions import ( + Error, NetworkError, PassphraseError +) def test_intermediate_code(_): @@ -38,9 +43,15 @@ def test_bip38_encrypt(_): ) assert isinstance(encrypted_wif, str) - assert encrypted_wif == _["bip38"]["encrypt"][index]["encrypted_wif"] + with pytest.raises(NetworkError): + bip38.encrypt( + wif=_["bip38"]["encrypt"][index]["wif"], + passphrase=_["bip38"]["encrypt"][index]["passphrase"], + network="FAKE_NETWORK" + ) + def test_create_new_encrypted_wif(_): @@ -50,7 +61,7 @@ def test_create_new_encrypted_wif(_): ) encrypted_wif: dict = bip38.create_new_encrypted_wif( intermediate_passphrase=_["bip38"]["create_new_encrypted_wif"][index]["intermediate_passphrase"], - public_key_type=_["bip38"]["create_new_encrypted_wif"][index]["public_key_type"], + wif_type=_["bip38"]["create_new_encrypted_wif"][index]["wif_type"], seed=_["bip38"]["create_new_encrypted_wif"][index]["seed"] ) @@ -62,6 +73,21 @@ def test_create_new_encrypted_wif(_): assert encrypted_wif["public_key_type"] == _["bip38"]["create_new_encrypted_wif"][index]["public_key_type"] assert encrypted_wif["address"] == _["bip38"]["create_new_encrypted_wif"][index]["address"] + with pytest.raises(PassphraseError): + bip38.create_new_encrypted_wif( + intermediate_passphrase="FAKE_PASSPHRASE", + wif_type=_["bip38"]["create_new_encrypted_wif"][index]["wif_type"], + seed=_["bip38"]["create_new_encrypted_wif"][index]["seed"] + ) + + with pytest.raises(NetworkError): + bip38.create_new_encrypted_wif( + intermediate_passphrase=_["bip38"]["create_new_encrypted_wif"][index]["intermediate_passphrase"], + wif_type=_["bip38"]["create_new_encrypted_wif"][index]["wif_type"], + seed=_["bip38"]["create_new_encrypted_wif"][index]["seed"], + network="FAKE_NETWORK" + ) + def test_confirm_code(_): @@ -93,6 +119,28 @@ def test_confirm_code(_): assert confirmed["lot"] == _["bip38"]["confirm_code"][index]["lot"] assert confirmed["sequence"] == _["bip38"]["confirm_code"][index]["sequence"] + with pytest.raises(NetworkError): + bip38.confirm_code( + passphrase=_["bip38"]["confirm_code"][index]["passphrase"], + confirmation_code=_["bip38"]["confirm_code"][index]["confirmation_code"], + detail=False, + network="FAKE_NETWORK" + ) + + with pytest.raises(Error): + bip38.confirm_code( + passphrase=_["bip38"]["confirm_code"][index]["passphrase"], + confirmation_code="FAKE_CONFIRMATION_CODE", + detail=False + ) + + with pytest.raises(PassphraseError): + bip38.confirm_code( + passphrase="FAKE_PASSPHRASE", + confirmation_code=_["bip38"]["confirm_code"][index]["confirmation_code"], + detail=False + ) + def test_bip38_decrypt(_): @@ -127,3 +175,11 @@ def test_bip38_decrypt(_): assert decrypted["address"] == _["bip38"]["decrypt"][index]["address"] assert decrypted["lot"] == _["bip38"]["decrypt"][index]["lot"] assert decrypted["sequence"] == _["bip38"]["decrypt"][index]["sequence"] + + with pytest.raises(NetworkError): + bip38.decrypt( + encrypted_wif=_["bip38"]["decrypt"][index]["encrypted_wif"], + passphrase=_["bip38"]["decrypt"][index]["passphrase"], + detail=True, + network="FAKE_NETWORK" + ) diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py new file mode 100644 index 0000000..52b6b2a --- /dev/null +++ b/tests/test_exceptions.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 + +# Copyright © 2023-2024, Meheret Tesfaye Batu +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit + +import pytest + +from bip38.exceptions import Error + + +def test_exception(): + class TestError(Error): + pass + + with pytest.raises(TestError, match="Error"): + raise TestError(message="Error") + + with pytest.raises(TestError, match="more_detail"): + raise TestError(message="Error", detail="more_detail") + + with pytest.raises(TestError, match="value_expect"): + raise TestError(message="Error", expected="value_expect") + + with pytest.raises(TestError, match="value_got"): + raise TestError(message="Error", expected="value_expect", got="value_got") From ad92077c6f26cea3612aed71a3a98c53d42487d1 Mon Sep 17 00:00:00 2001 From: meherett Date: Sat, 24 Aug 2024 19:44:01 +0300 Subject: [PATCH 16/56] Fix: lot and sequence logic & update exceptions --- bip38/bip38.py | 147 +++++++++++++++++++++++++++++++------------------ 1 file changed, 93 insertions(+), 54 deletions(-) diff --git a/bip38/bip38.py b/bip38/bip38.py index 7558023..ebae6a3 100644 --- a/bip38/bip38.py +++ b/bip38/bip38.py @@ -5,7 +5,7 @@ # file COPYING or https://opensource.org/license/mit from typing import ( - Type, Union, Optional, Literal + Type, Union, Optional, Literal, List ) from pyaes import AESModeOfOperationECB @@ -39,10 +39,11 @@ MAGIC_NO_LOT_AND_SEQUENCE_COMPRESSED_FLAG, EC_MULTIPLIED_PRIVATE_KEY_PREFIX, CONFIRMATION_CODE_PREFIX, + WIF_TYPES, FLAGS ) from .exceptions import ( - Error, PassphraseError + Error, CryptocurrencyError, NetworkError, Secp256k1Error, WIFError, PassphraseError ) from .utils import ( integer_to_bytes, bytes_to_integer, bytes_to_string, get_bytes @@ -62,17 +63,25 @@ class BIP38: :type network: str """ - network: str cryptocurrency: Type[ICryptocurrency] + networks: List[str] + network: str alphabet: str def __init__( self, cryptocurrency: Type[ICryptocurrency], network: str = "mainnet" ) -> None: - self.network = network - self.cryptocurrency = cryptocurrency - self.alphabet = ( + if not issubclass(cryptocurrency, ICryptocurrency): + raise CryptocurrencyError( + "Invalid cryptocurrency sub-class", expected=Type[ICryptocurrency], got=type(cryptocurrency) + ) + self.cryptocurrency, self.networks = ( + cryptocurrency, list(cryptocurrency.NETWORKS.keys()) + ) + if network not in self.networks: + raise NetworkError("Wrong network type", expected=self.networks, got=type(network)) + self.network, self.alphabet = network, ( self.cryptocurrency.ALPHABET if self.cryptocurrency.ALPHABET else Bitcoin.ALPHABET @@ -112,19 +121,18 @@ def intermediate_code( owner_salt: bytes = get_bytes(owner_salt) if owner_salt else os.urandom(8) if len(owner_salt) not in [4, 8]: - raise Error(f"Invalid owner salt length (expected: 8 or 16, got: {len(bytes_to_string(owner_salt))})") - if len(owner_salt) == 4 and (not lot or not sequence): - raise Error( - f"Invalid owner salt length for non lot/sequence (expected: 16, got: {len(bytes_to_string(owner_salt))})") - if (lot and not sequence) or (not lot and sequence): - raise Error(f"Both lot & sequence are required, got: (lot {lot}) (sequence {sequence})") + raise Error("Invalid owner salt length", expected=[8, 16], got=len(bytes_to_string(owner_salt))) + if len(owner_salt) == 4 and (lot is None or sequence is None): + raise Error("Invalid owner salt length for non lot/sequence", expected=16, got=len(bytes_to_string(owner_salt))) + if (lot and sequence is None) or (lot is None and sequence): + raise Error("Both lot & sequence are required", detail=f"got: (lot {lot}) & (sequence {sequence})") if lot and sequence: lot, sequence = int(lot), int(sequence) if not 100000 <= lot <= 999999: - raise Error(f"Invalid lot, (expected: 100000 <= lot <= 999999, got: {lot})") + raise Error("Invalid lot", expected="100000 <= lot <= 999999", got=lot) if not 0 <= sequence <= 4095: - raise Error(f"Invalid lot, (expected: 0 <= sequence <= 4095, got: {sequence})") + raise Error("Invalid sequence", expected="0 <= sequence <= 4095", got=sequence) pre_factor: bytes = scrypt.hash(unicodedata.normalize("NFC", passphrase), owner_salt[:4], 16384, 8, 8, 32) owner_entropy: bytes = owner_salt[:4] + integer_to_bytes((lot * 4096 + sequence), 4) @@ -172,6 +180,8 @@ def encrypt(self, wif: str, passphrase: str, network: Optional[str] = None) -> s network: str = ( network if network else self.network ) + if network not in self.networks: + raise NetworkError("Wrong network type", expected=self.networks, got=type(network)) wif_type: str = get_wif_type( wif=wif, cryptocurrency=self.cryptocurrency, network=network ) @@ -181,14 +191,12 @@ def encrypt(self, wif: str, passphrase: str, network: Optional[str] = None) -> s wif=wif, cryptocurrency=self.cryptocurrency, network=network ))) public_key_type: str = "uncompressed" - elif wif_type == "wif-compressed": + else: flag: bytes = integer_to_bytes(NO_EC_MULTIPLIED_WIF_COMPRESSED_FLAG) private_key: PrivateKey = PrivateKey.from_bytes(get_bytes(wif_to_private_key( wif=wif, cryptocurrency=self.cryptocurrency, network=network ))) public_key_type: str = "compressed" - else: - raise Error("Wrong WIF (Wallet Important Format) type") address: str = P2PKHAddress.encode( public_key=private_key.public_key(), @@ -219,7 +227,7 @@ def encrypt(self, wif: str, passphrase: str, network: Optional[str] = None) -> s def create_new_encrypted_wif( self, intermediate_passphrase: str, - public_key_type: str = "uncompressed", + wif_type: str = "wif", seed: Optional[Union[str, bytes]] = None, network: Optional[str] = None ) -> dict: @@ -228,8 +236,8 @@ def create_new_encrypted_wif( :param intermediate_passphrase: The intermediate passphrase. :type intermediate_passphrase: str - :param public_key_type: The type of public key (default: "uncompressed"). - :type public_key_type: str + :param wif_type: The WIF type, either 'wif' or 'wif-compressed' (default is 'wif'). + :type wif_type: str :param seed: Optional seed (default: random 24 bytes). :type seed: Optional[str, bytes] :param network: Optional network for encryption. Defaults to the class's network if not provided. @@ -241,41 +249,52 @@ def create_new_encrypted_wif( >>> from bip38 import BIP38 >>> from bip38.cryptocurrencies import Bitcoin >>> bip38: BIP38 = BIP38(cryptocurrency=Bitcoin, network="testnet") - >>> bip38.create_new_encrypted_wif(intermediate_passphrase="passphraseb7ruSN4At4Rb8hPTNcAVezfsjonvUs4Qo3xSp1fBFsFPvVGSbpP2WTJMhw3mVZ", public_key_type="uncompressed") + >>> bip38.create_new_encrypted_wif(intermediate_passphrase="passphraseb7ruSN4At4Rb8hPTNcAVezfsjonvUs4Qo3xSp1fBFsFPvVGSbpP2WTJMhw3mVZ", wif_type="wif") {'encrypted_wif': '6PgMqfwt1nqJeUkCTRVf4TV6FJoqA8GFCGaj6RsTW1t3XgQNUDfKW9u9Px', 'confirmation_code': 'cfrm38V8ZR17HkU8Xdu8RunWf8CZauXphNQa5HFJd4cxEYckXHS6tfo9M73yL3FPmWv1xqBQsgG', 'public_key': '04fdfbd938b4bb220c11fc1c22e87c5306d105130dd05d7ece4013aa1d2382f3a2a8673fd7b4b2f55c48cd0ebda7d88089783b3394210a0853159803b5eb99097e', 'seed': '0a89d39d0af0f0d7abc655baa0e399f8ddcd372bb9aaebce', 'public_key_type': 'uncompressed', 'address': 'myRfjUS74ab2ZbEbQuiWNzPHb5fSYuFvm4'} - >>> bip38.create_new_encrypted_wif(intermediate_passphrase="passphraseb7ruSN4At4Rb8hPTNcAVezfsjonvUs4Qo3xSp1fBFsFPvVGSbpP2WTJMhw3mVZ", public_key_type="compressed", seed="99241d58245c883896f80843d2846672d7312e6195ca1a6c") + >>> bip38.create_new_encrypted_wif(intermediate_passphrase="passphraseb7ruSN4At4Rb8hPTNcAVezfsjonvUs4Qo3xSp1fBFsFPvVGSbpP2WTJMhw3mVZ", wif_type="wif-compressed", seed="99241d58245c883896f80843d2846672d7312e6195ca1a6c") {'encrypted_wif': '6PoH364JVeoBPsJBveXCwfWpX2H82N5qiAervtynak7r7dzZF2TBFxZAXE', 'confirmation_code': 'cfrm38VX6jSx7C3nbxWCVEdGna7JMpm57zHdbuofbpCA9EiN57aEt4s5fh9k19b5cTmyZ5jMkE2', 'public_key': '02100bb0440ff4106a1743750813271e66a7017431e92921e520319f537c7357c1', 'seed': '99241d58245c883896f80843d2846672d7312e6195ca1a6c', 'public_key_type': 'compressed', 'address': 'mjurfzLk2ryxCyfm4nMk5qarvNRhbNCtK8'} """ + network: str = ( + network if network else self.network + ) + if network not in self.networks: + raise NetworkError("Wrong network type", expected=self.networks, got=type(network)) seed_b: bytes = get_bytes(seed) if seed else os.urandom(24) - intermediate_decode: bytes = check_decode(intermediate_passphrase) + try: + intermediate_decode: bytes = check_decode(intermediate_passphrase) + except ValueError: + raise PassphraseError("Invalid intermediate passphrase") if len(intermediate_decode) != 49: - raise PassphraseError(f"Invalid intermediate passphrase length (expected: 49, got: {len(intermediate_decode)})") + raise PassphraseError("Invalid intermediate passphrase length", expected=49, got=len(intermediate_decode)) magic: bytes = intermediate_decode[:8] owner_entropy: bytes = intermediate_decode[8:16] pass_point: bytes = intermediate_decode[16:] + if wif_type == "wif": + public_key_type = "uncompressed" + elif wif_type == "wif-compressed": + public_key_type = "compressed" + else: + raise WIFError("Invalid wif type", expected=WIF_TYPES, got=wif_type) + if magic == integer_to_bytes(MAGIC_LOT_AND_SEQUENCE): if public_key_type == "uncompressed": flag: bytes = integer_to_bytes(MAGIC_LOT_AND_SEQUENCE_UNCOMPRESSED_FLAG) - elif public_key_type == "compressed": - flag: bytes = integer_to_bytes(MAGIC_LOT_AND_SEQUENCE_COMPRESSED_FLAG) else: - raise Error( - f"Invalid public key type (expected: 'uncompressed' or 'compressed', got: {public_key_type})") + flag: bytes = integer_to_bytes(MAGIC_LOT_AND_SEQUENCE_COMPRESSED_FLAG) elif magic == integer_to_bytes(MAGIC_NO_LOT_AND_SEQUENCE): if public_key_type == "uncompressed": flag: bytes = integer_to_bytes(MAGIC_NO_LOT_AND_SEQUENCE_UNCOMPRESSED_FLAG) - elif public_key_type == "compressed": - flag: bytes = integer_to_bytes(MAGIC_NO_LOT_AND_SEQUENCE_COMPRESSED_FLAG) else: - raise Error( - f"Invalid public key type (expected: 'uncompressed' or 'compressed', got: {public_key_type})") + flag: bytes = integer_to_bytes(MAGIC_NO_LOT_AND_SEQUENCE_COMPRESSED_FLAG) else: raise Error( - f"Invalid magic (expected: {bytes_to_string(integer_to_bytes(MAGIC_LOT_AND_SEQUENCE))}/" - f"{bytes_to_string(integer_to_bytes(MAGIC_NO_LOT_AND_SEQUENCE))}, got: {bytes_to_string(magic)})" + "Invalid magic", expected=[ + bytes_to_string(integer_to_bytes(MAGIC_LOT_AND_SEQUENCE)), + bytes_to_string(integer_to_bytes(MAGIC_NO_LOT_AND_SEQUENCE)) + ], got=bytes_to_string(magic) ) factor_b: bytes = double_sha256(seed_b) @@ -287,7 +306,7 @@ def create_new_encrypted_wif( ) address: str = P2PKHAddress.encode( public_key=public_key, - address_prefix=self.cryptocurrency.NETWORKS[network if network else self.network]["address_prefix"], + address_prefix=self.cryptocurrency.NETWORKS[network]["address_prefix"], public_key_type=public_key_type ) address_hash: bytes = get_checksum(get_bytes(address, unhexlify=False)) @@ -364,14 +383,22 @@ def confirm_code( {'public_key': '02100bb0440ff4106a1743750813271e66a7017431e92921e520319f537c7357c1', 'public_key_type': 'compressed', 'address': '15PuNwFmDqYhRsC9MDPNFvNY4Npzibm67c', 'lot': 199999, 'sequence': 1} """ - confirmation_code_decode: bytes = check_decode(confirmation_code) + network: str = ( + network if network else self.network + ) + if network not in self.networks: + raise NetworkError("Wrong network type", expected=self.networks, got=type(network)) + try: + confirmation_code_decode: bytes = check_decode(confirmation_code) + except ValueError: + raise Error("Invalid confirmation code") if len(confirmation_code_decode) != 51: - raise Error(f"Invalid confirmation code length (expected: 102, got: {len(confirmation_code_decode)})") + raise Error("Invalid confirmation code length", expected=102, got=len(confirmation_code_decode)) prefix_length: int = len(integer_to_bytes(CONFIRMATION_CODE_PREFIX)) prefix_got: bytes = confirmation_code_decode[:prefix_length] if integer_to_bytes(CONFIRMATION_CODE_PREFIX) != prefix_got: - raise Error(f"Invalid confirmation code prefix (expected: {prefix_length}, got: {prefix_got})") + raise Error("Invalid confirmation code prefix", expected=prefix_length, got=prefix_got) flag: bytes = confirmation_code_decode[5:6] address_hash: bytes = confirmation_code_decode[6:10] @@ -409,16 +436,20 @@ def confirm_code( point_b: bytes = ( point_b_prefix + point_b_half_1 + point_b_half_2 ) - public_key: PublicKey = PublicKey.from_point( - PublicKey.from_bytes(point_b).point() * bytes_to_integer(pass_factor) - ) - public_key_type: str = "uncompressed" - if bytes_to_integer(flag) in FLAGS["compression"]: - public_key_type: str = "compressed" + + try: + public_key: PublicKey = PublicKey.from_point( + PublicKey.from_bytes(point_b).point() * bytes_to_integer(pass_factor) + ) + public_key_type: str = "uncompressed" + if bytes_to_integer(flag) in FLAGS["compression"]: + public_key_type: str = "compressed" + except Secp256k1Error: + raise PassphraseError("Incorrect passphrase") address: str = P2PKHAddress.encode( public_key=public_key, - address_prefix=self.cryptocurrency.NETWORKS[network if network else self.network]["address_prefix"], + address_prefix=self.cryptocurrency.NETWORKS[network]["address_prefix"], public_key_type=public_key_type ) if get_checksum(get_bytes(address, unhexlify=False)) == address_hash: @@ -436,7 +467,7 @@ def confirm_code( sequence=sequence ) return address - raise PassphraseError("Incorrect passphrase or password") + raise PassphraseError("Incorrect passphrase") def decrypt( self, encrypted_wif: str, passphrase: str, network: Optional[str] = None, detail: bool = False @@ -472,9 +503,11 @@ def decrypt( network: str = ( network if network else self.network ) + if network not in self.networks: + raise NetworkError("Wrong network type", expected=self.networks, got=type(network)) encrypted_wif_decode: bytes = decode(encrypted_wif) if len(encrypted_wif_decode) != 43: - raise Error(f"Invalid encrypted WIF length (expected: 43, got: {len(encrypted_wif_decode)})") + raise WIFError("Invalid encrypted WIF length", expected=43, got=len(encrypted_wif_decode)) prefix: bytes = encrypted_wif_decode[:2] flag: bytes = encrypted_wif_decode[2:3] @@ -490,11 +523,15 @@ def decrypt( public_key_type: str = "compressed" else: raise Error( - f"Invalid flag (expected: {bytes_to_string(integer_to_bytes(NO_EC_MULTIPLIED_WIF_FLAG))} or " - f"{bytes_to_string(integer_to_bytes(NO_EC_MULTIPLIED_WIF_COMPRESSED_FLAG))}, got: {bytes_to_string(flag)})" + "Invalid flag", expected=[ + bytes_to_string(integer_to_bytes(NO_EC_MULTIPLIED_WIF_FLAG)), + bytes_to_string(integer_to_bytes(NO_EC_MULTIPLIED_WIF_COMPRESSED_FLAG)) + ], got=bytes_to_string(flag) ) - key: bytes = scrypt.hash(unicodedata.normalize("NFC", passphrase), address_hash, 16384, 8, 8) + key: bytes = scrypt.hash( + unicodedata.normalize("NFC", passphrase), address_hash, 16384, 8, 8 + ) derived_half_1, derived_half_2 = key[0:32], key[32:64] encrypted_half_1: bytes = encrypted_wif_decode[7:23] encrypted_half_2: bytes = encrypted_wif_decode[23:39] @@ -516,7 +553,7 @@ def decrypt( public_key_type=public_key_type ) if get_checksum(get_bytes(address, unhexlify=False)) != address_hash: - raise PassphraseError("Incorrect passphrase or password") + raise PassphraseError("Incorrect passphrase") wif: str = private_key_to_wif( private_key=private_key, wif_type=wif_type, cryptocurrency=self.cryptocurrency, network=network @@ -612,9 +649,11 @@ def decrypt( sequence=sequence ) return wif - raise PassphraseError("Incorrect passphrase or password") + raise PassphraseError("Incorrect passphrase") else: raise Error( - f"Invalid prefix (expected: {bytes_to_string(integer_to_bytes(NO_EC_MULTIPLIED_PRIVATE_KEY_PREFIX))} or " - f"{bytes_to_string(integer_to_bytes(EC_MULTIPLIED_PRIVATE_KEY_PREFIX))}, got: {bytes_to_string(prefix)})" + "Invalid prefix", expected=[ + bytes_to_string(integer_to_bytes(NO_EC_MULTIPLIED_PRIVATE_KEY_PREFIX)), + bytes_to_string(integer_to_bytes(EC_MULTIPLIED_PRIVATE_KEY_PREFIX)) + ], got=bytes_to_string(prefix) ) From e47ccb436ee4c4785b0223d17c18f07f663f4bf7 Mon Sep 17 00:00:00 2001 From: meherett Date: Sat, 24 Aug 2024 19:48:47 +0300 Subject: [PATCH 17/56] Bump: Python-BIP38 into v1.2.0 package --- bip38/info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip38/info.py b/bip38/info.py index e8f3f52..0b64a4f 100644 --- a/bip38/info.py +++ b/bip38/info.py @@ -7,7 +7,7 @@ from typing import List __name__: str = "bip38" -__version__: str = "v1.1.0" +__version__: str = "v1.2.0" __license__: str = "MIT" __author__: str = "Meheret Tesfaye Batu" __email__: str = "meherett.batu@gmail.com" From d668e741bae4e6eb7faa8cc33e6e776a1b5f098a Mon Sep 17 00:00:00 2001 From: axiom Date: Mon, 26 Aug 2024 08:42:22 +0300 Subject: [PATCH 18/56] Update: catch more exceptions --- desktop/main.py | 50 ++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/desktop/main.py b/desktop/main.py index c2e255c..c0c8cc5 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -23,6 +23,9 @@ from bip38 import ( cryptocurrencies, BIP38 ) +from bip38.exceptions import ( + Error, PassphraseError, WIFError +) from bip38.cryptocurrencies import ICryptocurrency from bip38.wif import private_key_to_wif @@ -66,10 +69,7 @@ def __init__(self) -> None: "EC-Multiply": self.ui.ecQWidget, } - self.wif_types = { - "wif": "uncompressed", - "wif-compressed": "compressed" - } + self.wif_types = ["wif", "wif-compressed"] self.inputs = { "Passphrase": { @@ -151,10 +151,10 @@ def __init_ui(self) -> None: ) self.ui.modeQComboBox.currentTextChanged.connect(self.change_mode) - self.ui.noECWIFTypeQComboBox.addItems(self.wif_types.keys()) + self.ui.noECWIFTypeQComboBox.addItems(self.wif_types) self.ui.noECWIFTypeQComboBox.setCurrentIndex(0) - self.ui.createEncryptedWIFTypeQComboBox.addItems(self.wif_types.keys()) + self.ui.createEncryptedWIFTypeQComboBox.addItems(self.wif_types) self.ui.createEncryptedWIFTypeQComboBox.setCurrentIndex(0) # validation stuff @@ -249,7 +249,7 @@ def noec_convert_private_key(self): wif_type=self.ui.noECWIFTypeQComboBox.currentText() ) self.ui.noECWIFQLineEdit.setText(wif) - except (ValueError, BIP38Application.ValidationError) as e: + except (Error, BIP38Application.ValidationError) as e: self.logerr(f"Error: {e}") def noec_encrypt(self): @@ -262,11 +262,11 @@ def noec_encrypt(self): ) self.ui.decryptWIFQLineEdit.setText(encrypted_wif) self.log(encrypted_wif) - except ValueError as e: + except WIFError as we: self.set_required(self.ui.noECWIFQLineEdit, True) + self.logerr(f"Error: {we}") + except (Error, BIP38Application.ValidationError) as e: self.logerr(f"Error: {e}") - except BIP38Application.ValidationError as ve: - self.logerr(f"Error: {ve}") def ec_generate_ipassphrase(self): try: @@ -291,10 +291,8 @@ def ec_generate_ipassphrase(self): ) self.ui.ecIPassphraseQLineEdit.setText(intermediate_passphrase) self.log(intermediate_passphrase) - except ValueError as e: + except (Error, BIP38Application.ValidationError) as e: self.logerr(f"Error: {e}") - except BIP38Application.ValidationError as ve: - self.logerr(f"Error: {ve}") def ec_confirm_code(self): try: @@ -308,7 +306,11 @@ def ec_confirm_code(self): detail=True ) self.log(confirmation_code) - except ValueError as e: + + except PassphraseError as pe: + self.set_required(self.ui.passphraseQLineEdit, True) + self.logerr(f"Error: {pe}") + except Error as e: self.set_required(self.ui.ecConfirmCodeQLineEdit, True) self.logerr(f"Error: {e}") except BIP38Application.ValidationError as ve: @@ -321,21 +323,20 @@ def create_encrypted_wif(self): ) wif_type: str = self.ui.createEncryptedWIFTypeQComboBox.currentText() - wif_type = self.wif_types[wif_type] encrypted_wif: str = self.bip38().create_new_encrypted_wif( intermediate_passphrase=intermediate_passphrase, - public_key_type=wif_type, + wif_type=wif_type, seed=seed, ) self.ui.decryptWIFQLineEdit.setText(encrypted_wif["encrypted_wif"]) self.log(encrypted_wif) - except ValueError as e: + + except PassphraseError as pe: self.set_required(self.ui.ecIPassphraseQLineEdit, True) + self.logerr(f"Error: {pe}") + except (Error, BIP38Application.ValidationError) as e: self.logerr(f"Error: {e}") - except BIP38Application.ValidationError as ve: - self.logerr(f"Error: {ve}") - def decrypt(self): try: @@ -346,11 +347,14 @@ def decrypt(self): detail=True ) self.log(decrypted_wif) - except ValueError as e: + except WIFError as we: self.set_required(self.ui.decryptWIFQLineEdit, True) + self.logerr(f"Error: {we}") + except PassphraseError as pe: + self.set_required(self.ui.passphraseQLineEdit, True) + self.logerr(f"Error: {pe}") + except (Error, BIP38Application.ValidationError) as e: self.logerr(f"Error: {e}") - except BIP38Application.ValidationError as ve: - self.logerr(f"Error: {ve}") def log(self, data: Optional[Union[str, dict]], end="\n") -> None: if isinstance(data, dict): From 79cf5c89ca311640f756b1d67e226726736927b1 Mon Sep 17 00:00:00 2001 From: meherett Date: Tue, 27 Aug 2024 11:53:30 +0300 Subject: [PATCH 19/56] Update: label for WIF Type --- desktop/main.py | 4 +- desktop/ui/bip38.ui | 163 +++++++++++++++++++++++++++++++++-------- desktop/ui/ui_bip38.py | 96 +++++++++++++++++------- 3 files changed, 206 insertions(+), 57 deletions(-) diff --git a/desktop/main.py b/desktop/main.py index c0c8cc5..9ec68bb 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -218,7 +218,7 @@ def change_cryptocurrency(self, cryptocurrency: str) -> None: def change_mode(self, mode: str) -> None: is_on_ec = "EC-Multiply" == mode - self.ui.createEncryptedWIFTypeQComboBox.setVisible(is_on_ec) + self.ui.decryptWIFTypeContainerQFrame.setVisible(is_on_ec) self.ui.createEncryptedWIFQPushButton.setVisible(is_on_ec) self.ui.modeQStackedWidget.setCurrentWidget(self.modes[mode]) self.clean_all_required() @@ -460,4 +460,4 @@ def enforce_int_range(self, line_edit, min_value, max_value): line_edit.setText(str(value)) def regex_validator(self, regex): - return QRegularExpressionValidator(QRegularExpression(regex)) \ No newline at end of file + return QRegularExpressionValidator(QRegularExpression(regex)) diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui index dca9530..2c0d7af 100644 --- a/desktop/ui/bip38.ui +++ b/desktop/ui/bip38.ui @@ -19,16 +19,16 @@ 0 - 10 + 15 - 10 + 15 - 10 + 15 - 10 + 15 @@ -374,7 +374,7 @@ - 0 + 1 @@ -1490,13 +1490,7 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - + 15 @@ -1514,6 +1508,12 @@ + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + 5 @@ -1572,14 +1572,35 @@ - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + 15 @@ -1596,21 +1617,105 @@ 0 - + + + WIF Type + + - - + + + Qt::Orientation::Horizontal + + - 145 - 0 + 40 + 20 - - (Select) - - + + + + + + + + + 145 + 0 + + + + (Select) + + + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Orientation::Vertical + + + + 20 + 49 + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + diff --git a/desktop/ui/ui_bip38.py b/desktop/ui/ui_bip38.py index 4ab8a32..7ff81f6 100644 --- a/desktop/ui/ui_bip38.py +++ b/desktop/ui/ui_bip38.py @@ -24,7 +24,7 @@ def setupUi(self, MainWindow): self.centeralWidgetLayout = QVBoxLayout(self.centralwidget) self.centeralWidgetLayout.setSpacing(0) self.centeralWidgetLayout.setObjectName(u"centeralWidgetLayout") - self.centeralWidgetLayout.setContentsMargins(10, 10, 10, 10) + self.centeralWidgetLayout.setContentsMargins(15, 15, 15, 15) self.bip38ContainerQFrame = QFrame(self.centralwidget) self.bip38ContainerQFrame.setObjectName(u"bip38ContainerQFrame") self.bip38ContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) @@ -682,14 +682,14 @@ def setupUi(self, MainWindow): self.decryptWIFAndButtonsContainerQFrame = QFrame(self.bip38ContainerQFrame) self.decryptWIFAndButtonsContainerQFrame.setObjectName(u"decryptWIFAndButtonsContainerQFrame") - self.decryptWIFAndButtonsContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) - self.decryptWIFAndButtonsContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) - self.decryptWIFfHorizontalLayout = QHBoxLayout(self.decryptWIFAndButtonsContainerQFrame) - self.decryptWIFfHorizontalLayout.setSpacing(15) - self.decryptWIFfHorizontalLayout.setObjectName(u"decryptWIFfHorizontalLayout") - self.decryptWIFfHorizontalLayout.setContentsMargins(0, 0, 0, 0) + self.decryptWIFAndButtonsQFrameHLayout = QHBoxLayout(self.decryptWIFAndButtonsContainerQFrame) + self.decryptWIFAndButtonsQFrameHLayout.setSpacing(15) + self.decryptWIFAndButtonsQFrameHLayout.setObjectName(u"decryptWIFAndButtonsQFrameHLayout") + self.decryptWIFAndButtonsQFrameHLayout.setContentsMargins(0, 0, 0, 0) self.decryptWIFContainerQFrame = QFrame(self.decryptWIFAndButtonsContainerQFrame) self.decryptWIFContainerQFrame.setObjectName(u"decryptWIFContainerQFrame") + self.decryptWIFContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.decryptWIFContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.decryptWIFContainerQFrameVLayout = QVBoxLayout(self.decryptWIFContainerQFrame) self.decryptWIFContainerQFrameVLayout.setSpacing(5) self.decryptWIFContainerQFrameVLayout.setObjectName(u"decryptWIFContainerQFrameVLayout") @@ -712,44 +712,87 @@ def setupUi(self, MainWindow): self.decryptWIFContainerQFrameVLayout.addWidget(self.decryptWIFLableContainerQFrame) - self.decryptWIFAndButtonContainerQFrame = QFrame(self.decryptWIFContainerQFrame) - self.decryptWIFAndButtonContainerQFrame.setObjectName(u"decryptWIFAndButtonContainerQFrame") - self.decryptWIFAndButtonContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) - self.decryptWIFAndButtonContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) - self.decryptWIFHLayout = QHBoxLayout(self.decryptWIFAndButtonContainerQFrame) - self.decryptWIFHLayout.setSpacing(15) - self.decryptWIFHLayout.setObjectName(u"decryptWIFHLayout") - self.decryptWIFHLayout.setContentsMargins(0, 0, 0, 0) - self.decryptWIFQLineEdit = QLineEdit(self.decryptWIFAndButtonContainerQFrame) + self.decryptWIFQLineEdit = QLineEdit(self.decryptWIFContainerQFrame) self.decryptWIFQLineEdit.setObjectName(u"decryptWIFQLineEdit") - self.decryptWIFHLayout.addWidget(self.decryptWIFQLineEdit) + self.decryptWIFContainerQFrameVLayout.addWidget(self.decryptWIFQLineEdit) - self.createEncryptedWIFTypeQComboBox = QComboBox(self.decryptWIFAndButtonContainerQFrame) + + self.decryptWIFAndButtonsQFrameHLayout.addWidget(self.decryptWIFContainerQFrame) + + self.decryptWIFTypeContainerQFrame = QFrame(self.decryptWIFAndButtonsContainerQFrame) + self.decryptWIFTypeContainerQFrame.setObjectName(u"decryptWIFTypeContainerQFrame") + self.decryptWIFTypeContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.decryptWIFTypeContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.decryptWIFTypeContainerQFrameVLayout = QVBoxLayout(self.decryptWIFTypeContainerQFrame) + self.decryptWIFTypeContainerQFrameVLayout.setObjectName(u"decryptWIFTypeContainerQFrameVLayout") + self.decryptWIFTypeContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.wifTypeLableContainerQFrame = QFrame(self.decryptWIFTypeContainerQFrame) + self.wifTypeLableContainerQFrame.setObjectName(u"wifTypeLableContainerQFrame") + self.wifTypeLabelContainerQFrameHLayout2 = QHBoxLayout(self.wifTypeLableContainerQFrame) + self.wifTypeLabelContainerQFrameHLayout2.setSpacing(15) + self.wifTypeLabelContainerQFrameHLayout2.setObjectName(u"wifTypeLabelContainerQFrameHLayout2") + self.wifTypeLabelContainerQFrameHLayout2.setContentsMargins(0, 0, 0, 0) + self.wifTypeQLabel = QLabel(self.wifTypeLableContainerQFrame) + self.wifTypeQLabel.setObjectName(u"wifTypeQLabel") + + self.wifTypeLabelContainerQFrameHLayout2.addWidget(self.wifTypeQLabel) + + self.wifTypeLabelContainerQFrameHSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.wifTypeLabelContainerQFrameHLayout2.addItem(self.wifTypeLabelContainerQFrameHSpacer) + + + self.decryptWIFTypeContainerQFrameVLayout.addWidget(self.wifTypeLableContainerQFrame) + + self.createEncryptedWIFTypeQComboBox = QComboBox(self.decryptWIFTypeContainerQFrame) self.createEncryptedWIFTypeQComboBox.setObjectName(u"createEncryptedWIFTypeQComboBox") self.createEncryptedWIFTypeQComboBox.setMinimumSize(QSize(145, 0)) - self.decryptWIFHLayout.addWidget(self.createEncryptedWIFTypeQComboBox) + self.decryptWIFTypeContainerQFrameVLayout.addWidget(self.createEncryptedWIFTypeQComboBox) + + + self.decryptWIFAndButtonsQFrameHLayout.addWidget(self.decryptWIFTypeContainerQFrame) + + self.decryptWIFButtonsContainerQFrame = QFrame(self.decryptWIFAndButtonsContainerQFrame) + self.decryptWIFButtonsContainerQFrame.setObjectName(u"decryptWIFButtonsContainerQFrame") + self.decryptWIFButtonsContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.decryptWIFButtonsContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.decryptWIFButtonsContainerQFrameVLayout = QVBoxLayout(self.decryptWIFButtonsContainerQFrame) + self.decryptWIFButtonsContainerQFrameVLayout.setSpacing(5) + self.decryptWIFButtonsContainerQFrameVLayout.setObjectName(u"decryptWIFButtonsContainerQFrameVLayout") + self.decryptWIFButtonsContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) + self.verticalSpacer = QSpacerItem(20, 49, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.decryptWIFButtonsContainerQFrameVLayout.addItem(self.verticalSpacer) - self.createEncryptedWIFQPushButton = QPushButton(self.decryptWIFAndButtonContainerQFrame) + self.decryptWIFButtonsQFrame = QFrame(self.decryptWIFButtonsContainerQFrame) + self.decryptWIFButtonsQFrame.setObjectName(u"decryptWIFButtonsQFrame") + self.decryptWIFButtonsQFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.decryptWIFButtonsQFrame.setFrameShadow(QFrame.Shadow.Raised) + self.decryptWIFButtonsQFrameHLayout = QHBoxLayout(self.decryptWIFButtonsQFrame) + self.decryptWIFButtonsQFrameHLayout.setSpacing(15) + self.decryptWIFButtonsQFrameHLayout.setObjectName(u"decryptWIFButtonsQFrameHLayout") + self.decryptWIFButtonsQFrameHLayout.setContentsMargins(0, 0, 0, 0) + self.createEncryptedWIFQPushButton = QPushButton(self.decryptWIFButtonsQFrame) self.createEncryptedWIFQPushButton.setObjectName(u"createEncryptedWIFQPushButton") self.createEncryptedWIFQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) - self.decryptWIFHLayout.addWidget(self.createEncryptedWIFQPushButton) + self.decryptWIFButtonsQFrameHLayout.addWidget(self.createEncryptedWIFQPushButton) - self.decryptWIFQPushButton = QPushButton(self.decryptWIFAndButtonContainerQFrame) + self.decryptWIFQPushButton = QPushButton(self.decryptWIFButtonsQFrame) self.decryptWIFQPushButton.setObjectName(u"decryptWIFQPushButton") sizePolicy.setHeightForWidth(self.decryptWIFQPushButton.sizePolicy().hasHeightForWidth()) self.decryptWIFQPushButton.setSizePolicy(sizePolicy) self.decryptWIFQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) - self.decryptWIFHLayout.addWidget(self.decryptWIFQPushButton) + self.decryptWIFButtonsQFrameHLayout.addWidget(self.decryptWIFQPushButton) - self.decryptWIFContainerQFrameVLayout.addWidget(self.decryptWIFAndButtonContainerQFrame) + self.decryptWIFButtonsContainerQFrameVLayout.addWidget(self.decryptWIFButtonsQFrame) - self.decryptWIFfHorizontalLayout.addWidget(self.decryptWIFContainerQFrame) + self.decryptWIFAndButtonsQFrameHLayout.addWidget(self.decryptWIFButtonsContainerQFrame) self.verticalLayout.addWidget(self.decryptWIFAndButtonsContainerQFrame) @@ -776,7 +819,7 @@ def setupUi(self, MainWindow): self.retranslateUi(MainWindow) - self.modeQStackedWidget.setCurrentIndex(0) + self.modeQStackedWidget.setCurrentIndex(1) QMetaObject.connectSlotsByName(MainWindow) @@ -810,6 +853,7 @@ def retranslateUi(self, MainWindow): self.ecConfirmCodeQLabel.setText(QCoreApplication.translate("MainWindow", u"Confirm Code", None)) self.ecConfirmCodeVerifyQPushButton.setText(QCoreApplication.translate("MainWindow", u"Verify", None)) self.decryptWIFQLabel.setText(QCoreApplication.translate("MainWindow", u"Encrypted WIF", None)) + self.wifTypeQLabel.setText(QCoreApplication.translate("MainWindow", u"WIF Type", None)) self.createEncryptedWIFTypeQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) self.createEncryptedWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Create", None)) self.decryptWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Decrypt", None)) From bf49326139e3f1c4900e58b5707ab5c08a75bded Mon Sep 17 00:00:00 2001 From: axiom Date: Fri, 30 Aug 2024 10:12:40 +0300 Subject: [PATCH 20/56] Update: no longer removing combo shadow --- desktop/core.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/desktop/core.py b/desktop/core.py index 3cc61ea..6f8397d 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -66,10 +66,6 @@ def initialize(self) -> None: self.theme_watcher.fileChanged.connect(lambda: self.load_stylesheet(css_path)) self.load_stylesheet(css_path) - # Remove Combo shadow - for combo in self.findChildren(QComboBox): - combo.findChild(QFrame).setWindowFlags(Qt.Popup | Qt.NoDropShadowWindowHint) - def load_stylesheet(self, path: str) -> None: """ Load and apply a stylesheet from the specified path. From be7e251de9ac9fe5c2996ab5864358aee80117af Mon Sep 17 00:00:00 2001 From: axiom Date: Tue, 3 Sep 2024 09:22:10 +0300 Subject: [PATCH 21/56] Update: changed font --- desktop/core.py | 4 ++++ desktop/ui/css/theme.css | 9 ++++++--- desktop/ui/font/HD Wallet-Regular.ttf | Bin 0 -> 15316 bytes 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 desktop/ui/font/HD Wallet-Regular.ttf diff --git a/desktop/core.py b/desktop/core.py index 6f8397d..0ecbb04 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -13,6 +13,9 @@ from PySide6.QtCore import ( Qt, QFileSystemWatcher ) +from PySide6.QtGui import ( + QFontDatabase +) from desktop.utils import resolve_path from desktop.ui.ui_bip38 import Ui_MainWindow @@ -64,6 +67,7 @@ def initialize(self) -> None: css_path = resolve_path("desktop/ui/css/theme.css") self.theme_watcher = QFileSystemWatcher([css_path]) self.theme_watcher.fileChanged.connect(lambda: self.load_stylesheet(css_path)) + QFontDatabase.addApplicationFont(resolve_path("desktop/ui/font/HD Wallet-Regular.ttf")) self.load_stylesheet(css_path) def load_stylesheet(self, path: str) -> None: diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index e055152..0daf8a5 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -13,7 +13,8 @@ QFrame{ } QLabel { - font: 11pt "Segoe UI"; + font: 10pt "HDWallet"; + letter-spacing: 1px; color: rgb(255, 255, 255); } @@ -23,7 +24,8 @@ QGroupBox { border: 1px solid rgba(0, 191, 165, 0.8); border-radius: 3px; margin-top: 8px; - font: 11pt "Segoe UI"; + font: 10pt "HDWallet"; + letter-spacing: 1px; } QGroupBox::title { @@ -188,7 +190,8 @@ QTextEdit { } QPushButton { - font: 10pt "Segoe UI"; + font: 10pt "HDWallet"; + letter-spacing: 1px; font-weight: lighter; letter-spacing: 1px; background-color: rgb(25, 30, 36); diff --git a/desktop/ui/font/HD Wallet-Regular.ttf b/desktop/ui/font/HD Wallet-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..55eb2322f281f13367b1f1398059a817de5ea98d GIT binary patch literal 15316 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 literal 0 HcmV?d00001 From dfe9932ed668aede8b637962033476e8d802566d Mon Sep 17 00:00:00 2001 From: axiom Date: Wed, 16 Oct 2024 10:45:42 +0300 Subject: [PATCH 22/56] Update: new font --- desktop/core.py | 2 +- desktop/ui/css/theme.css | 1 + desktop/ui/font/HD Wallet-Regular.ttf | Bin 15316 -> 0 bytes desktop/ui/font/HDWallet.ttf | Bin 0 -> 16576 bytes 4 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 desktop/ui/font/HD Wallet-Regular.ttf create mode 100644 desktop/ui/font/HDWallet.ttf diff --git a/desktop/core.py b/desktop/core.py index 0ecbb04..01ca7c6 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -67,7 +67,7 @@ def initialize(self) -> None: css_path = resolve_path("desktop/ui/css/theme.css") self.theme_watcher = QFileSystemWatcher([css_path]) self.theme_watcher.fileChanged.connect(lambda: self.load_stylesheet(css_path)) - QFontDatabase.addApplicationFont(resolve_path("desktop/ui/font/HD Wallet-Regular.ttf")) + QFontDatabase.addApplicationFont(resolve_path("desktop/ui/font/HDWallet.ttf")) self.load_stylesheet(css_path) def load_stylesheet(self, path: str) -> None: diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index 0daf8a5..c5475c6 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -16,6 +16,7 @@ QLabel { font: 10pt "HDWallet"; letter-spacing: 1px; color: rgb(255, 255, 255); + text-transform: uppercase; } diff --git a/desktop/ui/font/HD Wallet-Regular.ttf b/desktop/ui/font/HD Wallet-Regular.ttf deleted file mode 100644 index 55eb2322f281f13367b1f1398059a817de5ea98d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15316 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 diff --git a/desktop/ui/font/HDWallet.ttf b/desktop/ui/font/HDWallet.ttf new file mode 100644 index 0000000000000000000000000000000000000000..567b77644b745e63ded68bc9477f97a59296732c GIT binary patch literal 16576 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 X=Nn-E3*g&aUPR!U3s86dG Date: Wed, 16 Oct 2024 17:03:08 +0300 Subject: [PATCH 23/56] Add: app icon and build script --- build.py | 75 +++++++++++++++++++++ desktop/core.py | 7 +- desktop/info.py | 7 ++ desktop/ui/images/icon/icon.ico | Bin 0 -> 87959 bytes desktop/ui/images/png/cil-arrow-bottom.png | Bin 1821 -> 0 bytes desktop/ui/images/png/cil-arrow-top.png | Bin 1824 -> 0 bytes 6 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 build.py create mode 100644 desktop/info.py create mode 100644 desktop/ui/images/icon/icon.ico delete mode 100644 desktop/ui/images/png/cil-arrow-bottom.png delete mode 100644 desktop/ui/images/png/cil-arrow-top.png diff --git a/build.py b/build.py new file mode 100644 index 0000000..81b4241 --- /dev/null +++ b/build.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 + +# Copyright © 2024, Eyoel Tadesse +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit + +from cx_Freeze import setup, Executable + +from desktop.info import __version__ as version + +app_name = "BIP38" +icon_path = "desktop/ui/images/icon/icon.ico" + +msi_shortcut_table = [ + ( + "DesktopShortcut", # Shortcut + "DesktopFolder", # Directory_ + app_name, # Name that will be show on the link + "TARGETDIR", # Component_ + f"[TARGETDIR]{app_name}.exe", # Target exe to exexute + None, # Arguments + None, # Description + None, # Hotkey + None, # Icon + None, # IconIndex + None, # ShowCmd + 'TARGETDIR' # WkDir + ) +] + +msi_directory_table = [ + ("ProgramMenuFolder", "TARGETDIR", "."), + ("BIP38Menu", "ProgramMenuFolder", "BIP38~1|BIP38") +] + +msi_data = { + "Shortcut": msi_shortcut_table, + "Directory": msi_directory_table +} + +bdist_msi_opt = { + "add_to_path": False, + "data": msi_data, + "initial_target_dir": f"[ProgramFiles64Folder]\\{app_name}", + "install_icon": icon_path, + "upgrade_code": "{E4A369F6-FC76-3013-A420-3BB9B370711C}" +} + +build_exe_opt = { + "packages": ["_scrypt"], + "excludes": ["tkinter"], + "include_msvcr": True +} + +executables = [ + Executable( + "launch.py", + base="gui", + icon=icon_path, + target_name=app_name, + shortcut_name=app_name, + shortcut_dir="BIP38Menu", + copyright=f"Copyright (C) 2024 {app_name}" + ) +] + +setup( + name=app_name, + version=version, + executables=executables, + options={ + "build_exe": build_exe_opt, + "bdist_msi": bdist_msi_opt + } +) \ No newline at end of file diff --git a/desktop/core.py b/desktop/core.py index 01ca7c6..425b677 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -14,7 +14,7 @@ Qt, QFileSystemWatcher ) from PySide6.QtGui import ( - QFontDatabase + QFontDatabase, QIcon ) from desktop.utils import resolve_path @@ -63,7 +63,10 @@ def initialize(self) -> None: self.detached_window = None - self.setWindowTitle("BIP38") + self.setWindowTitle("Bitcoin Improvement Proposal - 0038") + self.bip38_icon = QIcon(resolve_path("desktop/ui/images/icon/icon.ico")) + self.setWindowIcon(self.bip38_icon) + css_path = resolve_path("desktop/ui/css/theme.css") self.theme_watcher = QFileSystemWatcher([css_path]) self.theme_watcher.fileChanged.connect(lambda: self.load_stylesheet(css_path)) diff --git a/desktop/info.py b/desktop/info.py new file mode 100644 index 0000000..8f8983f --- /dev/null +++ b/desktop/info.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 + +# Copyright © 2024, Eyoel Tadesse +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit + +__version__: str = "v0.1.0b1" \ No newline at end of file diff --git a/desktop/ui/images/icon/icon.ico b/desktop/ui/images/icon/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b1172a53a5740b0343d24e1c4c6ef67c5477fed1 GIT binary patch literal 87959 zcmeHQ2|Sfc8-FdK72S%Gh?JB_w@YQaT~bsM>2}K!DH0*NNtQM#MN~>D)os&46qRf( zt|%!j$`X=@h-6>po9A@jK2GEu*}e1o&6(xQ^33ypW`AdfAXtcg1P>2^O<}^6ogj1x zf)Ez|>b`*eqp+W}^nY$Kf>=GAAY5F&y2ZIzh#|9Z1gs$b%3%cY+aD~1ICkTx*ypQ1 zHV6WzGj!lrO>_VMXD+tpVT~Bn5EkNqQo}k0YewUe;UEsgecy(-WE$V%4jw!hX=`gE zLqkKF*3i&E{rmT)X|RL8fq?;%k&z+eHZj@R*^#xiH7Y47LAABDsIsyWty{N_roj$= z_4V~AJv|*sOG`J2OVZE5!GUJZoQYPhT#1T{i_y`eM`;@DdU|?j@7}$rrltnXpFh9Z z_>c}OD=Qi|ZXC+Z&HWZ1?4w4FqNVYp_!B2iM8UzqC^0b+efjbQty;ATnV6WM($Z37 zYHEs3ojQdwGc%F6xOlVqga6g5SHH!FxQ*kVK7IO!@qd>7pWz=f_(@4geOLbGB=8}fj>8Y^)BgLMPejHcDr zaF7S&MbZHL0Gc`@Z<1!n3-ToKuETcnzs@ot&yJL}HkX5qjSWG&1!i-ag@xt2w84+j zu&wcW!h{LP&(9A91_q+bmoGQbSFT(^YuB!&wSQzf&=!Ip{MR@<#CLahMP$B23W${jIUFF|EID zE?wwH<>lpR8tknpCnqPS@&~>Eo?2R3XvdBnXzSLk$ji&?8&9gLs?hA&vuPUapkRyw zVIVBTNl8ihMwY9qE7SSYV8ZNu!A3{*RNkAU0q$;c$18B{``3a<0vvbBPQf;YirwVy@tGO zY-|v;d7#1GIRB+fm!go65Hfqzmi&Q6;Q#8?t5Hk*hw&ol=J-E)^k@_xA5Wv9uC9)0 z{x`=Xs{VCu`_q-}Z+rJYj*gBD*FQ%3-<>;mq5%U2&@|Y8)c;<)b`6akJC@=6TN{6v znVHe*CRsLe4!z+E~1?&|pmEp>^F2uT{Xks>9pap1ZtqkzLA=V$U zW;TzG4i7W|Z7r3dJJU|`rlm6U1ln6F1JG`Ob$65*l4g1nXa$;q_H|fyr@Bf{YfEmR z8E7xZx}`AP-M=T(-rafIF7&|~BkXg*+@UoMa}gNdw%z?=KU@ipzL70}}gMUUw25oJlU%!6sQU+Lu zfpr&1n-K-`MVL1>UKaxUkLHr}>B3r=gM$NY4oa5)XG|!=k|j&Nt>@6^NAHF;Cl3z~ znk<3LfSp{2q7U1WySlm>ZQs6~w!ix`w3BhkGBAn*tPu_xG>E3j^}?2DZOK0>DvGwB zPSWtRCX@m8?8CysPo{Zw+;u@3Eti7l}E zYnZ!(20MMnG*q<+ODJm^+erfF0Hn;6Fyx=g*&! zy}f_U^+mfA=be6#tPhqSa;_#v_v~uj_zEB)@W~B1_SKqPJ6

M!z@jr1 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 AwEzGB literal 0 HcmV?d00001 diff --git a/desktop/ui/images/png/cil-arrow-bottom.png b/desktop/ui/images/png/cil-arrow-bottom.png deleted file mode 100644 index fbe49737508ba7498b7f8e0c780e8b8b05feff10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1821 zcmbVNZD`zN9M4KETctRe$j}d_=?8V1tx`-w}A+vxKjL31wmW)B8s0BM0}|QUpi3es-Oc0`sD6<-lTiMK$0iV z^Lu{(-~Z+L=g9ETzMk&ex+#k4$qc5m9 zcT&_1>rO5o=8gMx6IVEB;R51n6_21Ps((+-gXTC2=>jS`Zh~2R|3ij$tORpFHh|%! zP{|pb_R+}nP|lnlH#LjdvzzX(>4czyLP*ytWjD}k38v1glW{c7GjtsijwhI8WRT7q z!*mM!h?Y5pHHDZ;$2Cq+Vn9;vr9~iUJWzQ-Vu7FoMVI4r^J0iK-?H^=`o5+u@|9pp zVd&{RU#(WTs>ETx$P1cAI7D6)S%P4LDK~^Q)(!eL7}6*(ea8zO?9ve;FUk)WDW5Ez!6Kt8fjr|HF4m%ZCM7-w~8M+llJ%!8ICx(eSseL|^N)7wicFJTS z$nM)qX9iM=peYI~azb6MVdxn*2%&4DOgh1k;Bby(>58bCimk<2WFwo%k4bF7j;pK< zZ2$y;a0tXuJ!5(rn-ft9MEe`3!NMlt_*b4JNoHIXG!|MKU^O+Su$o{Y)`SHG7Hkm} zU}1yp0pB495|-OpBUKh*gp#U?T3liUBv>p2F_~3WGtSB=F3WMC+LjWF%D$m%&Q2V4yzwNIskPiQOCY{Ww&z=23*xxDK^33|E-N(%=pUK`dKX>Pa zt_5W|y*6f^dS&dM{Ormji=Uo*;=3bHZF?Gap*MhW@%ZDT%a0v9mKBkFymV%va(g(k z>pb{ore}b9iS2yz)?a_PIJ=TO^zPQ5-&^{L_ZC@h|IvfL9hLfjJp4=d*Gu~8Kedx5 zl-Ex7ez4LxoA^XutA2IXdC+)PD{o(aIMXrr)``{pL#L`@?#tCDUthZUkNNYb4<$$6 zS={mJ$1AY3!sOxT&6 zG|A3o)u9!XRxId?meQ9ZebA~|oSZ(bh=1o~3R_yl=x^q+MPk>4#Ve?#(m*iPGE6cS~uI zwqvMZCTATqIXjloXQy@5pm#h=MXDMhC?OA0)l$)NwQ7`Z@M>i2PjfWYfOykUdc-$K zO{K@F7UIVfwg{js>6Kjr<(<+Evw!%aL##N!s@htFNY5)zrgR^IxV#BzhbEt?)$nso*0+Pj?9B#Qw_Q$b4mL8M9yuVfpiAjd!{OTr=xN>&Ps zSs>@yYF=C&In`*x8Ie=!vw$tZ{B7o%fq`Nw*H`{CU4iS&GM_{z|5 zU-0W=JzJHYZTtGKyZcVPwrQ9?xP}kn_a8rcU?{j)jnu{2`UjKW|MYZ0c0OAEtNzmM zNOkn|MfB7u_{)6x@QKsX$qU$uE{p zJ|VnUo_l@&va+CjHSlO6xp~czvnwO;%kA3bcm5n$TxSm6{^R4a{R)5K)2qJ^-8ysZ zIQva+eqhg`cl&?kdTWR0E^qmE?aK>4I|r7pT-tak@%GJY=WlF)AFA0$Rz?^6|FBeI LEdKfEt8e}T2PacE From 42127fa50f6a41e9ee9d1d999ef8c729791e3ab1 Mon Sep 17 00:00:00 2001 From: axiom Date: Fri, 18 Oct 2024 15:44:53 +0300 Subject: [PATCH 24/56] Update: theme colors --- desktop/main.py | 38 +++++++++++++++++++---------------- desktop/ui/css/theme.css | 43 ++++++++++++++++++++-------------------- 2 files changed, 42 insertions(+), 39 deletions(-) diff --git a/desktop/main.py b/desktop/main.py index 9ec68bb..936abab 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -41,10 +41,10 @@ class BIP38Application: TEXT_COLOR: QColor = QColor(255, 255, 255) ERROR_COLOR: QColor = QColor(255, 96, 96) JSON_PATTERNS = [ - # (re.compile(r'\".*?\"(?=\s*:)'), QColor(0, 191, 165)), # keys - (re.compile(r'\".*?\"'), QColor(0, 191, 165)), # string - (re.compile(r'\b\d+\b'), QColor(125, 211, 252)), # numbers - (re.compile(r'\btrue\b|\bfalse\b|\bnull\b'), QColor(16, 182, 212)), # boolean/null + (re.compile(r'\".*?\"(?=\s*:)'), QColor(101, 97, 156)), # keys + (re.compile(r'\".*?\"'), QColor(255, 255, 255)), # string + (re.compile(r'\b\d+\b'), QColor(125, 211, 252)), # numbers + (re.compile(r'\btrue\b|\bfalse\b|\bnull\b'), QColor(21, 128, 61)), # boolean/null (re.compile(r'[{}[\],:]'), QColor(255, 255, 255)) # punctuation ] @@ -250,7 +250,7 @@ def noec_convert_private_key(self): ) self.ui.noECWIFQLineEdit.setText(wif) except (Error, BIP38Application.ValidationError) as e: - self.logerr(f"Error: {e}") + self.logerr(e) def noec_encrypt(self): try: @@ -264,9 +264,9 @@ def noec_encrypt(self): self.log(encrypted_wif) except WIFError as we: self.set_required(self.ui.noECWIFQLineEdit, True) - self.logerr(f"Error: {we}") + self.logerr(we) except (Error, BIP38Application.ValidationError) as e: - self.logerr(f"Error: {e}") + self.logerr(e) def ec_generate_ipassphrase(self): try: @@ -292,7 +292,7 @@ def ec_generate_ipassphrase(self): self.ui.ecIPassphraseQLineEdit.setText(intermediate_passphrase) self.log(intermediate_passphrase) except (Error, BIP38Application.ValidationError) as e: - self.logerr(f"Error: {e}") + self.logerr(e) def ec_confirm_code(self): try: @@ -309,12 +309,12 @@ def ec_confirm_code(self): except PassphraseError as pe: self.set_required(self.ui.passphraseQLineEdit, True) - self.logerr(f"Error: {pe}") + self.logerr(pe) except Error as e: self.set_required(self.ui.ecConfirmCodeQLineEdit, True) - self.logerr(f"Error: {e}") + self.logerr(e) except BIP38Application.ValidationError as ve: - self.logerr(f"Error: {ve}") + self.logerr(ve) def create_encrypted_wif(self): try: @@ -334,9 +334,9 @@ def create_encrypted_wif(self): except PassphraseError as pe: self.set_required(self.ui.ecIPassphraseQLineEdit, True) - self.logerr(f"Error: {pe}") + self.logerr(pe) except (Error, BIP38Application.ValidationError) as e: - self.logerr(f"Error: {e}") + self.logerr(e) def decrypt(self): try: @@ -349,12 +349,12 @@ def decrypt(self): self.log(decrypted_wif) except WIFError as we: self.set_required(self.ui.decryptWIFQLineEdit, True) - self.logerr(f"Error: {we}") + self.logerr(we) except PassphraseError as pe: self.set_required(self.ui.passphraseQLineEdit, True) - self.logerr(f"Error: {pe}") + self.logerr(pe) except (Error, BIP38Application.ValidationError) as e: - self.logerr(f"Error: {e}") + self.logerr(e) def log(self, data: Optional[Union[str, dict]], end="\n") -> None: if isinstance(data, dict): @@ -392,9 +392,13 @@ def logerr(self, err: str , end: str="\n") -> None: cformat = QTextCharFormat() cformat.setForeground(BIP38Application.ERROR_COLOR) + default_format = QTextCharFormat() + default_format.setForeground(BIP38Application.TEXT_COLOR) + cursor = self.ui.outputQTextEdit.textCursor() cursor.movePosition(QTextCursor.End) - cursor.insertText(err + end, cformat) + cursor.insertText("ERROR", cformat) + cursor.insertText(f": {err}{end}", default_format) self.ui.outputQTextEdit.setTextCursor(cursor) self.ui.outputQTextEdit.ensureCursorVisible() diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index c5475c6..24b36ed 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -1,5 +1,5 @@ QMainWindow { - background-color: rgba(16, 21, 27, 0.9);; + background-color: #11111b; } QWidget { @@ -21,8 +21,8 @@ QLabel { QGroupBox { - background-color: rgba(0, 0, 0, 0.2); - border: 1px solid rgba(0, 191, 165, 0.8); + background-color: rgb(0, 0, 0); + border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 3px; margin-top: 8px; font: 10pt "HDWallet"; @@ -49,9 +49,9 @@ QScrollBar:vertical { } QScrollBar::handle:vertical { - background: #00bfa5; + background: #65619c; min-height: 55px; - border-radius: 2px; + border-radius: 4px; } QScrollBar::add-line:vertical { @@ -92,7 +92,7 @@ QScrollBar:horizontal { /* Inputs */ QComboBox { - background-color: rgb(25, 30, 36); + background-color: rgba(28, 28, 37, 1); border-radius: 5px; color: rgb(255, 255, 255); padding: 5px 10px; @@ -101,7 +101,7 @@ QComboBox { QComboBox:disabled{ - background-color: rgba(25, 30, 36, 0.5); + background-color: rgba(32, 36, 43, 0.5); } QComboBox::drop-down { @@ -110,7 +110,7 @@ QComboBox::drop-down { width: 30px; border-left-width: 3px; border-left-style: solid; - background-image: url(:/png/images/png/cil-arrow-bottom.png); + background-image: url(:/png/images/png/cil-arrow-bottom.png); background-position: center; background-repeat: no-repeat; } @@ -128,7 +128,7 @@ QComboBox QAbstractItemView { color: white; border: none; padding: 10px; - background-color: rgba(15, 33, 42, 1); + background-color: rgba(25, 30, 36, 1); outline: none; } @@ -150,23 +150,18 @@ QComboBox QAbstractItemView::item:selected { QLineEdit { font: 9pt "Segoe UI"; letter-spacing: 1px; - background-color: rgb(25, 30, 36); + background-color: rgba(28, 28, 37, 1); border: 1px solid rgba(0, 0, 0, 0.0); border-radius: 5px; color: rgb(255, 255, 255); padding: 4px 7px; height: 25px; - selection-color: #000000; - selection-background-color: #00bfa5; + selection-color: #DDD; + selection-background-color: #65619c; } QLineEdit:hover { - background-color: rgba(25, 30, 36, 100); -} - -QLineEdit:focus { - background-color: rgba(25, 30, 36, 100); - border: 1px solid rgba(0, 191, 165, 0.8); + background-color: rgba(28, 28, 37, 0.7); } QLineEdit::disabled { @@ -174,7 +169,7 @@ QLineEdit::disabled { } QLineEdit[required="true"] { - border: 1px solid rgba(255, 96, 96, 0.8); + border: 1px solid rgba(255, 96, 96, 0.5); } QTextEdit { @@ -184,8 +179,8 @@ QTextEdit { color: rgb(255, 255, 255); padding: 0px 10px; height: 25px; - selection-color: #000000; - selection-background-color: #00bfa5; + selection-color: #DDD; + selection-background-color: #65619c; margin-top: 10px; margin-bottom: 5px; } @@ -195,9 +190,13 @@ QPushButton { letter-spacing: 1px; font-weight: lighter; letter-spacing: 1px; - background-color: rgb(25, 30, 36); + background-color: rgba(28, 28, 37, 1); border-radius: 3px; color: rgb(255, 255, 255); padding: 5px 10px; height: 25px; } + +QPushButton:hover{ + background-color: rgba(28, 28, 37, 0.7); +} \ No newline at end of file From 5d608404c25bfc948de80de2dde9739f0ec510b2 Mon Sep 17 00:00:00 2001 From: axiom Date: Sun, 20 Oct 2024 13:55:42 +0300 Subject: [PATCH 25/56] Update: theme and ui adjustments --- desktop/ui/bip38.ui | 105 ++++++++++++++++++++++----------------- desktop/ui/css/theme.css | 34 ++----------- desktop/ui/ui_bip38.py | 89 +++++++++++++++++++-------------- launch.py | 1 + 4 files changed, 117 insertions(+), 112 deletions(-) diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui index 2c0d7af..4e65f23 100644 --- a/desktop/ui/bip38.ui +++ b/desktop/ui/bip38.ui @@ -6,32 +6,68 @@ 0 0 - 804 - 460 + 900 + 521 + + + 0 + 0 + + + + + 900 + 0 + + + + + 900 + 16777215 + + MainWindow - 0 + 10 - 15 + 0 - 15 + 0 - 15 + 0 - 15 + 0 + + + 0 + 0 + + + + + 0 + 290 + + + + + 16777215 + 290 + + QFrame::Shape::StyledPanel @@ -43,16 +79,16 @@ 10 - 0 + 15 - 0 + 15 - 0 + 15 - 0 + 5 @@ -1586,6 +1622,9 @@ QFrame::Shadow::Raised + + 5 + 0 @@ -1751,43 +1790,19 @@ - - - - Output - - - - 0 - - - 0 - - - 5 - - - 0 - - - 0 - - - - - true - - - - - - - - - + + + + true + + + + + + diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index 24b36ed..c36f110 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -20,32 +20,12 @@ QLabel { } -QGroupBox { - background-color: rgb(0, 0, 0); - border: 1px solid rgba(255, 255, 255, 0.3); - border-radius: 3px; - margin-top: 8px; - font: 10pt "HDWallet"; - letter-spacing: 1px; -} - -QGroupBox::title { - subcontrol-origin: margin; - left: 10px; - padding: 0 3px 0 3px; -} - -QGroupBox:disabled{ - color: rgba(255, 255, 255, 0.5); - background-color: rgba(16, 21, 27, 0.5); -} - /* Scroll bar */ QScrollBar:vertical { border: none; background: rgb(16, 21, 27); width: 8px; - border-radius: 2px; + border-radius: 4px; } QScrollBar::handle:vertical { @@ -87,7 +67,7 @@ QScrollBar:horizontal { border: none; background: rgb(16, 21, 27); width: 8px; - border-radius: 2px; + border-radius: 4px; } /* Inputs */ @@ -128,7 +108,7 @@ QComboBox QAbstractItemView { color: white; border: none; padding: 10px; - background-color: rgba(25, 30, 36, 1); + background-color: rgba(28, 28, 37, 1); outline: none; } @@ -173,16 +153,12 @@ QLineEdit[required="true"] { } QTextEdit { - background-color: transparent; + background-color: black; border-color: rgb(25, 30, 36); - border-radius: 10px; color: rgb(255, 255, 255); - padding: 0px 10px; - height: 25px; + padding: 5; selection-color: #DDD; selection-background-color: #65619c; - margin-top: 10px; - margin-bottom: 5px; } QPushButton { diff --git a/desktop/ui/ui_bip38.py b/desktop/ui/ui_bip38.py index 7ff81f6..d16a043 100644 --- a/desktop/ui/ui_bip38.py +++ b/desktop/ui/ui_bip38.py @@ -1,5 +1,13 @@ # -*- coding: utf-8 -*- +################################################################################ +## Form generated from reading UI file 'bip38yuvTyc.ui' +## +## Created by: Qt User Interface Compiler version 6.7.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, QMetaObject, QObject, QPoint, QRect, QSize, QTime, QUrl, Qt) @@ -7,10 +15,10 @@ QFont, QFontDatabase, QGradient, QIcon, QImage, QKeySequence, QLinearGradient, QPainter, QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QApplication, QComboBox, QFrame, QGroupBox, - QHBoxLayout, QLabel, QLineEdit, QMainWindow, - QPushButton, QSizePolicy, QSpacerItem, QStackedWidget, - QTextEdit, QVBoxLayout, QWidget) +from PySide6.QtWidgets import (QApplication, QComboBox, QFrame, QHBoxLayout, + QLabel, QLineEdit, QMainWindow, QPushButton, + QSizePolicy, QSpacerItem, QStackedWidget, QTextEdit, + QVBoxLayout, QWidget) from .resources_rc import * @@ -18,21 +26,35 @@ class Ui_MainWindow(object): def setupUi(self, MainWindow): if not MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") - MainWindow.resize(804, 460) + MainWindow.resize(900, 521) + sizePolicy = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) + MainWindow.setSizePolicy(sizePolicy) + MainWindow.setMinimumSize(QSize(900, 0)) + MainWindow.setMaximumSize(QSize(900, 16777215)) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") self.centeralWidgetLayout = QVBoxLayout(self.centralwidget) - self.centeralWidgetLayout.setSpacing(0) + self.centeralWidgetLayout.setSpacing(10) self.centeralWidgetLayout.setObjectName(u"centeralWidgetLayout") - self.centeralWidgetLayout.setContentsMargins(15, 15, 15, 15) + self.centeralWidgetLayout.setContentsMargins(0, 0, 0, 0) self.bip38ContainerQFrame = QFrame(self.centralwidget) self.bip38ContainerQFrame.setObjectName(u"bip38ContainerQFrame") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Minimum) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.bip38ContainerQFrame.sizePolicy().hasHeightForWidth()) + self.bip38ContainerQFrame.setSizePolicy(sizePolicy1) + self.bip38ContainerQFrame.setMinimumSize(QSize(0, 290)) + self.bip38ContainerQFrame.setMaximumSize(QSize(16777215, 290)) self.bip38ContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.bip38ContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.verticalLayout = QVBoxLayout(self.bip38ContainerQFrame) self.verticalLayout.setSpacing(10) self.verticalLayout.setObjectName(u"verticalLayout") - self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setContentsMargins(15, 15, 15, 5) self.cryptoAndNetworkContainerQFrame = QFrame(self.bip38ContainerQFrame) self.cryptoAndNetworkContainerQFrame.setObjectName(u"cryptoAndNetworkContainerQFrame") self.cryptoAndNetworkContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) @@ -336,11 +358,11 @@ def setupUi(self, MainWindow): self.noECEncryptQPushButton = QPushButton(self.noECWIFAndEncyptContainerQFrame) self.noECEncryptQPushButton.setObjectName(u"noECEncryptQPushButton") - sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.noECEncryptQPushButton.sizePolicy().hasHeightForWidth()) - self.noECEncryptQPushButton.setSizePolicy(sizePolicy) + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.noECEncryptQPushButton.sizePolicy().hasHeightForWidth()) + self.noECEncryptQPushButton.setSizePolicy(sizePolicy2) self.noECEncryptQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.noECWIFContainerVLayout.addWidget(self.noECEncryptQPushButton) @@ -408,8 +430,8 @@ def setupUi(self, MainWindow): self.ecOwnerSaltGenerateQPushButton = QPushButton(self.ecOwnerSaltAndGenerateContainerQFrame) self.ecOwnerSaltGenerateQPushButton.setObjectName(u"ecOwnerSaltGenerateQPushButton") - sizePolicy.setHeightForWidth(self.ecOwnerSaltGenerateQPushButton.sizePolicy().hasHeightForWidth()) - self.ecOwnerSaltGenerateQPushButton.setSizePolicy(sizePolicy) + sizePolicy2.setHeightForWidth(self.ecOwnerSaltGenerateQPushButton.sizePolicy().hasHeightForWidth()) + self.ecOwnerSaltGenerateQPushButton.setSizePolicy(sizePolicy2) self.ecOwnerSaltGenerateQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.ecOwnerSaltAndGenerateContainerQFrameHLayout.addWidget(self.ecOwnerSaltGenerateQPushButton) @@ -459,8 +481,8 @@ def setupUi(self, MainWindow): self.ecSeedGenerateQPushButton = QPushButton(self.ecSeedAndGenerateContainerQFrame) self.ecSeedGenerateQPushButton.setObjectName(u"ecSeedGenerateQPushButton") - sizePolicy.setHeightForWidth(self.ecSeedGenerateQPushButton.sizePolicy().hasHeightForWidth()) - self.ecSeedGenerateQPushButton.setSizePolicy(sizePolicy) + sizePolicy2.setHeightForWidth(self.ecSeedGenerateQPushButton.sizePolicy().hasHeightForWidth()) + self.ecSeedGenerateQPushButton.setSizePolicy(sizePolicy2) self.ecSeedGenerateQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.ecSeedAndGenerateContainerQFrameHLayout.addWidget(self.ecSeedGenerateQPushButton) @@ -610,8 +632,8 @@ def setupUi(self, MainWindow): self.ecIPassphraseGenerateQPushButton = QPushButton(self.ecIPassphraseAndGenerateContainerQFrameHLayout) self.ecIPassphraseGenerateQPushButton.setObjectName(u"ecIPassphraseGenerateQPushButton") - sizePolicy.setHeightForWidth(self.ecIPassphraseGenerateQPushButton.sizePolicy().hasHeightForWidth()) - self.ecIPassphraseGenerateQPushButton.setSizePolicy(sizePolicy) + sizePolicy2.setHeightForWidth(self.ecIPassphraseGenerateQPushButton.sizePolicy().hasHeightForWidth()) + self.ecIPassphraseGenerateQPushButton.setSizePolicy(sizePolicy2) self.ecIPassphraseGenerateQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.ecIntermediatePassphraseAndGenerateHLayout.addWidget(self.ecIPassphraseGenerateQPushButton) @@ -661,8 +683,8 @@ def setupUi(self, MainWindow): self.ecConfirmCodeVerifyQPushButton = QPushButton(self.ecConfirmCodeAndVerifyContainerQFrame) self.ecConfirmCodeVerifyQPushButton.setObjectName(u"ecConfirmCodeVerifyQPushButton") - sizePolicy.setHeightForWidth(self.ecConfirmCodeVerifyQPushButton.sizePolicy().hasHeightForWidth()) - self.ecConfirmCodeVerifyQPushButton.setSizePolicy(sizePolicy) + sizePolicy2.setHeightForWidth(self.ecConfirmCodeVerifyQPushButton.sizePolicy().hasHeightForWidth()) + self.ecConfirmCodeVerifyQPushButton.setSizePolicy(sizePolicy2) self.ecConfirmCodeVerifyQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.ecConfirmCodeAndVerifyContainerQFrameHLayout.addWidget(self.ecConfirmCodeVerifyQPushButton) @@ -725,6 +747,7 @@ def setupUi(self, MainWindow): self.decryptWIFTypeContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.decryptWIFTypeContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.decryptWIFTypeContainerQFrameVLayout = QVBoxLayout(self.decryptWIFTypeContainerQFrame) + self.decryptWIFTypeContainerQFrameVLayout.setSpacing(5) self.decryptWIFTypeContainerQFrameVLayout.setObjectName(u"decryptWIFTypeContainerQFrameVLayout") self.decryptWIFTypeContainerQFrameVLayout.setContentsMargins(0, 0, 0, 0) self.wifTypeLableContainerQFrame = QFrame(self.decryptWIFTypeContainerQFrame) @@ -782,8 +805,8 @@ def setupUi(self, MainWindow): self.decryptWIFQPushButton = QPushButton(self.decryptWIFButtonsQFrame) self.decryptWIFQPushButton.setObjectName(u"decryptWIFQPushButton") - sizePolicy.setHeightForWidth(self.decryptWIFQPushButton.sizePolicy().hasHeightForWidth()) - self.decryptWIFQPushButton.setSizePolicy(sizePolicy) + sizePolicy2.setHeightForWidth(self.decryptWIFQPushButton.sizePolicy().hasHeightForWidth()) + self.decryptWIFQPushButton.setSizePolicy(sizePolicy2) self.decryptWIFQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) self.decryptWIFButtonsQFrameHLayout.addWidget(self.decryptWIFQPushButton) @@ -797,23 +820,14 @@ def setupUi(self, MainWindow): self.verticalLayout.addWidget(self.decryptWIFAndButtonsContainerQFrame) - self.outputQGroupBox = QGroupBox(self.bip38ContainerQFrame) - self.outputQGroupBox.setObjectName(u"outputQGroupBox") - self.outputGroupBoxVLayout = QVBoxLayout(self.outputQGroupBox) - self.outputGroupBoxVLayout.setSpacing(0) - self.outputGroupBoxVLayout.setObjectName(u"outputGroupBoxVLayout") - self.outputGroupBoxVLayout.setContentsMargins(0, 5, 0, 0) - self.outputQTextEdit = QTextEdit(self.outputQGroupBox) - self.outputQTextEdit.setObjectName(u"outputQTextEdit") - self.outputQTextEdit.setReadOnly(True) - self.outputGroupBoxVLayout.addWidget(self.outputQTextEdit) - - - self.verticalLayout.addWidget(self.outputQGroupBox) + self.centeralWidgetLayout.addWidget(self.bip38ContainerQFrame) + self.outputQTextEdit = QTextEdit(self.centralwidget) + self.outputQTextEdit.setObjectName(u"outputQTextEdit") + self.outputQTextEdit.setReadOnly(True) - self.centeralWidgetLayout.addWidget(self.bip38ContainerQFrame) + self.centeralWidgetLayout.addWidget(self.outputQTextEdit) MainWindow.setCentralWidget(self.centralwidget) @@ -857,7 +871,6 @@ def retranslateUi(self, MainWindow): self.createEncryptedWIFTypeQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) self.createEncryptedWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Create", None)) self.decryptWIFQPushButton.setText(QCoreApplication.translate("MainWindow", u"Decrypt", None)) - self.outputQGroupBox.setTitle(QCoreApplication.translate("MainWindow", u"Output", None)) self.outputQTextEdit.setPlaceholderText("") # retranslateUi diff --git a/launch.py b/launch.py index 193e2f8..da9ec28 100644 --- a/launch.py +++ b/launch.py @@ -13,6 +13,7 @@ def main() -> None: qapp: QApplication = QApplication(sys.argv) + qapp.setStyle("WindowsVista") main_application: BIP38Application = BIP38Application() main_application.app.show() sys.exit(qapp.exec()) From fe40dabd99267aa065ab6864a1b3f733331dcc58 Mon Sep 17 00:00:00 2001 From: axiom Date: Sun, 20 Oct 2024 18:18:59 +0300 Subject: [PATCH 26/56] Update: font --- desktop/ui/font/HDWallet.ttf | Bin 16576 -> 16608 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/desktop/ui/font/HDWallet.ttf b/desktop/ui/font/HDWallet.ttf index 567b77644b745e63ded68bc9477f97a59296732c..ad3d2ab413e5f406d44999070f28197c8ba2954c 100644 GIT binary patch delta 3065 zcmeH}?{AY;6vxkP*B{&3wOdO!+N~XIb6sFAvdKCaE9?g|W(Z1H7&AbJn_`%&a}lXq z*o+}!7|`5>H}XazvN%iz1%ovLi3m$b2qZ?05kgo(qCx_RVtipA&aJ)oIf--sfV6p@ zKIe1K`JVIKd+yWc;uyO<#ts)g^CJLQ+gsb#f(s%5O~Yt=+BdA<_<8;}chH^yFf41| zxTzTyf(>BxO#Hc^4Lqis0Old|&5IBFO2mcr)m?k~KKc8?Asl!gp!Vn2dLyqa`SoIb z{7miM?dWi+Kk`o0@Fv^^U>~4e`bMO`w`fP*Qh=4^n58E=@Yc|p!pVC8tHk)d=wNTO zI5lz<1z$$n0}Ri2{8{kzo^6iCKfq^205JP>GM4^bk#qy3Zkb=QTu0js20`(|5`9d| zDlvj($vMp1HnOv*74ZTwrX|s{41ixVS1`tZH}5VmHFcp|+h#n~_`VeJe8h6TPRBNZ zZJ+~>09c<2^a|j`zya$WqURFWh4t*n_A(;q7Tiq)a|OsHf=&UPD0nJorc6&P^QgoD z;TOORM{}zf$($v47RLWzYnlTmD(zl|x8IyMfalYBEyTwlLJb&dafArA2y8+8qGOa` zCNM)h>v(}+v%qG=EzZvfR@$0#f?&Jwwxjp)`~w6l@0Nmd1glEyu9E~S@2jp3f^&p+ z4r*7q&l4;~5`Ve#a3&H~Pngc1Lqs_+s;lrAiOLr^AF;jYGFcXrz$UVM*#cyv-=m@k z3C}bV<2x5l60GL1CK%w&-c@8stz+CfOt4kxTTwsYixDhuick4oCs^rM79S*Cm?={4 zF6pPbOX>YmynQac?h@KuGMrD9^pG@}TJ?NA!!D=HcD0bnHQg$&rfy7Pm52GG%7nU zOA@SV-B!MpsAgJGpKTR>yS$(HWw7q2IxSkUj!asn1#~~Dr*2O+KYv&;N&++cP7jm` zRG{jv<4^4(mHqb})K&J936RUqrz!{M!ZpDy1k1AdN5SO;%NF3X!6W!2j8!%KyAu5| zueSB~RZq6{KaU`NePu(c^;O&O$+pI~2gZ}NC$PnO>b@fVCnt^n?|1RLA-apzzSKf7 zu`e6KWYXl$Ph4%7WJWhU;%~2fkQi+2XGVOlknT_>*MQ_$CBU1{P?DJo?gCLwL21O|WCA>D5MgEL>cmJqsc2 zCNyXt!wT&;Xw=5}WVn9seyC2Jg$`{Tlh>!d!|{_i9>DPkbfUc(k1n*kQ~U8ft6Gbr z?^!Id9QCSG2cRW&A3D&-h-5vEkKy=&wDl=kGiZg<);L;z^gM_v^%&EM2gdMQ;oT;N Lx9j6QtG7M|^%m-@ delta 3090 zcmeH}?{8C87{{M;d)MBr?Ygd8%UZjRZEW2dAg~FY8)M++j1gE|G%g_MFh)MY=RbpzNZ(6(ayWGMWD5P5F+_(AW?em{162hcM2d@^w$ws7P1 z@vANAD`@b|NaEF$_9Fa-if`g`&EdpIGB_Ro1E4(xpdCw%zI1d)AhQUt?Kbu=rj8_2 z&66J=LczWGybl;&vCV$ecxlMfaTh`c0)SsPWXG0&rw0L+7VJ+sFafZECMbTGd64Dw zv<6y?Wsx&+Gle&eP=muN2PYaCF_^-hf1@eX=!b527#bk3Y?K8ZJsmNexSF2V4z1~i zN>&SRVZ%=@i^N8>a|LY9x`GUc|Cf8zu{?@7?hX5Ry0n>CYeGark?W;# zf*k@o5Epq)5zGW;h%b0{6KogQj`*JEGQmpQEIUuITUfi%dcgY*!OHrc_Zq<}lbP}> z1S{*b?@5A7gmwvP&-*3`mLle76{R>Q=0xRoI+GsZYZAo0P*OS%S7iuRb9k$2FTrXxdx9qkHiWi;+Bbt^1j_;Oq0kEiEA83P zIZ}&-1g#pAcB;md-iHtETS?CorX?ob`A~R22~)_`3S$$=+sI6*Lb)40x>A@E)laOZ zC*!KLmEPagS66eCn_fA}%=pidH%KC?s*cy3Ay{r*?p}MA6oOnErK;?*Yrj~{PF2Ra z+KVKNir!n7C0OO^s~;q)g)+2eTe+XFA0c)HY}u(wt6#T^Oj@A?EIX;Eh9?W3f4c4z zaV+dP%TWeUj;gu_8iq+`_aDLSh9sE)x$JzX@yJT}R#k*+(RR`$Q|Ei4TL_kAz%NAK z!+*vNO>O_p#`?oo+xl$NgKce)H<>I*wZ3W_KG@cHhS2%pmWxO=m|ycely*cVYW)9@#gkBE_|&py%^ul1{*em9V5)S6GmYe z4v3>5|K1icFKw%4X>oitfU(VZPy(oh-H^$DKhIw$@Vbz{Tg2-UbFmAd0ex_^i E9~@}givR!s From e4e11cbc4be9ed20cd60c7fe75a5112c65ab8914 Mon Sep 17 00:00:00 2001 From: axiom Date: Mon, 21 Oct 2024 10:58:05 +0300 Subject: [PATCH 27/56] Update: combobox shadow --- desktop/core.py | 12 +++++++++++- desktop/ui/css/theme.css | 1 + launch.py | 1 - 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/desktop/core.py b/desktop/core.py index 425b677..18fed17 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -6,6 +6,8 @@ from typing import Optional +import json + from PySide6.QtWidgets import ( QMainWindow, QWidget, QStackedWidget, QFrame, QComboBox @@ -19,7 +21,8 @@ from desktop.utils import resolve_path from desktop.ui.ui_bip38 import Ui_MainWindow - +from desktop.info import __version__ as desktop_ver +from bip38.info import __version__ as library_ver class Application(QMainWindow): _instance: Optional['Application'] = None @@ -73,6 +76,13 @@ def initialize(self) -> None: QFontDatabase.addApplicationFont(resolve_path("desktop/ui/font/HDWallet.ttf")) self.load_stylesheet(css_path) + info = { + "library": library_ver, + "desktop": desktop_ver + } + self.ui.outputQTextEdit.setPlaceholderText(json.dumps(info, indent=4)) + + def load_stylesheet(self, path: str) -> None: """ Load and apply a stylesheet from the specified path. diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index c36f110..7a020b6 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -110,6 +110,7 @@ QComboBox QAbstractItemView { padding: 10px; background-color: rgba(28, 28, 37, 1); outline: none; + border-bottom: 2px solid rgba(0, 0, 0, 0.5); } QComboBox QAbstractItemView::item { diff --git a/launch.py b/launch.py index da9ec28..193e2f8 100644 --- a/launch.py +++ b/launch.py @@ -13,7 +13,6 @@ def main() -> None: qapp: QApplication = QApplication(sys.argv) - qapp.setStyle("WindowsVista") main_application: BIP38Application = BIP38Application() main_application.app.show() sys.exit(qapp.exec()) From 906022f18823a248e883c1a4608aaf223fe0ba32 Mon Sep 17 00:00:00 2001 From: axiom Date: Tue, 22 Oct 2024 19:07:40 +0300 Subject: [PATCH 28/56] Update: UI spacing and font --- desktop/ui/bip38.ui | 22 +++++++++++----------- desktop/ui/font/HDWallet.ttf | Bin 16608 -> 16608 bytes desktop/ui/ui_bip38.py | 30 +++++++++++------------------- 3 files changed, 22 insertions(+), 30 deletions(-) diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui index 4e65f23..87540a7 100644 --- a/desktop/ui/bip38.ui +++ b/desktop/ui/bip38.ui @@ -100,7 +100,7 @@ - 15 + 10 0 @@ -439,7 +439,7 @@ - 15 + 10 0 @@ -763,7 +763,7 @@ - 15 + 10 0 @@ -834,7 +834,7 @@ - 15 + 10 0 @@ -917,7 +917,7 @@ - 15 + 10 0 @@ -1025,7 +1025,7 @@ - 15 + 10 0 @@ -1287,7 +1287,7 @@ - 15 + 10 0 @@ -1370,7 +1370,7 @@ - 15 + 10 0 @@ -1478,7 +1478,7 @@ - 15 + 10 0 @@ -1528,7 +1528,7 @@ - 15 + 10 0 @@ -1741,7 +1741,7 @@ - 15 + 10 0 diff --git a/desktop/ui/font/HDWallet.ttf b/desktop/ui/font/HDWallet.ttf index ad3d2ab413e5f406d44999070f28197c8ba2954c..ea686d7859a0bac10b36d356741fc6339ff554d3 100644 GIT binary patch delta 97 zcmaFR$oQa69G+l#?73 delta 97 zcmaFR$oQa7hV8P9L?l|h;VD8az+SZ`Mqn6}y_GC6=Tno)J~8paGJ)=Qhkm`>RN0N~Fa5&!@I diff --git a/desktop/ui/ui_bip38.py b/desktop/ui/ui_bip38.py index d16a043..aa06d3d 100644 --- a/desktop/ui/ui_bip38.py +++ b/desktop/ui/ui_bip38.py @@ -1,13 +1,5 @@ # -*- coding: utf-8 -*- -################################################################################ -## Form generated from reading UI file 'bip38yuvTyc.ui' -## -## Created by: Qt User Interface Compiler version 6.7.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, QMetaObject, QObject, QPoint, QRect, QSize, QTime, QUrl, Qt) @@ -60,7 +52,7 @@ def setupUi(self, MainWindow): self.cryptoAndNetworkContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.cryptoAndNetworkContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.horizontalLayout = QHBoxLayout(self.cryptoAndNetworkContainerQFrame) - self.horizontalLayout.setSpacing(15) + self.horizontalLayout.setSpacing(10) self.horizontalLayout.setObjectName(u"horizontalLayout") self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.cryptocurrencyContainerQFrame = QFrame(self.cryptoAndNetworkContainerQFrame) @@ -210,7 +202,7 @@ def setupUi(self, MainWindow): self.noECPrivateKeyAndWifTypeContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.noECPrivateKeyAndWifTypeContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.noECPrivateKeyAndWifTypeContainerHLayout_2 = QHBoxLayout(self.noECPrivateKeyAndWifTypeContainerQFrame) - self.noECPrivateKeyAndWifTypeContainerHLayout_2.setSpacing(15) + self.noECPrivateKeyAndWifTypeContainerHLayout_2.setSpacing(10) self.noECPrivateKeyAndWifTypeContainerHLayout_2.setObjectName(u"noECPrivateKeyAndWifTypeContainerHLayout_2") self.noECPrivateKeyAndWifTypeContainerHLayout_2.setContentsMargins(0, 0, 0, 0) self.noECPrivateKeyContainerQFrame = QFrame(self.noECPrivateKeyAndWifTypeContainerQFrame) @@ -348,7 +340,7 @@ def setupUi(self, MainWindow): self.noECWIFAndEncyptContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.noECWIFAndEncyptContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.noECWIFContainerVLayout = QHBoxLayout(self.noECWIFAndEncyptContainerQFrame) - self.noECWIFContainerVLayout.setSpacing(15) + self.noECWIFContainerVLayout.setSpacing(10) self.noECWIFContainerVLayout.setObjectName(u"noECWIFContainerVLayout") self.noECWIFContainerVLayout.setContentsMargins(0, 0, 0, 0) self.noECWIFQLineEdit = QLineEdit(self.noECWIFAndEncyptContainerQFrame) @@ -388,7 +380,7 @@ def setupUi(self, MainWindow): self.ecSaltMainContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.ecSaltMainContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.ecOwnerSaltMainContainerHLayout = QHBoxLayout(self.ecSaltMainContainerQFrame) - self.ecOwnerSaltMainContainerHLayout.setSpacing(15) + self.ecOwnerSaltMainContainerHLayout.setSpacing(10) self.ecOwnerSaltMainContainerHLayout.setObjectName(u"ecOwnerSaltMainContainerHLayout") self.ecOwnerSaltMainContainerHLayout.setContentsMargins(0, 0, 0, 0) self.ecOwnerSaltContainerQFrame = QFrame(self.ecSaltMainContainerQFrame) @@ -420,7 +412,7 @@ def setupUi(self, MainWindow): self.ecOwnerSaltAndGenerateContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.ecOwnerSaltAndGenerateContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.ecOwnerSaltAndGenerateContainerQFrameHLayout = QHBoxLayout(self.ecOwnerSaltAndGenerateContainerQFrame) - self.ecOwnerSaltAndGenerateContainerQFrameHLayout.setSpacing(15) + self.ecOwnerSaltAndGenerateContainerQFrameHLayout.setSpacing(10) self.ecOwnerSaltAndGenerateContainerQFrameHLayout.setObjectName(u"ecOwnerSaltAndGenerateContainerQFrameHLayout") self.ecOwnerSaltAndGenerateContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) self.ecOwnerSaltQLineEdit = QLineEdit(self.ecOwnerSaltAndGenerateContainerQFrame) @@ -471,7 +463,7 @@ def setupUi(self, MainWindow): self.ecSeedAndGenerateContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.ecSeedAndGenerateContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.ecSeedAndGenerateContainerQFrameHLayout = QHBoxLayout(self.ecSeedAndGenerateContainerQFrame) - self.ecSeedAndGenerateContainerQFrameHLayout.setSpacing(15) + self.ecSeedAndGenerateContainerQFrameHLayout.setSpacing(10) self.ecSeedAndGenerateContainerQFrameHLayout.setObjectName(u"ecSeedAndGenerateContainerQFrameHLayout") self.ecSeedAndGenerateContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) self.ecSeedQLineEdit = QLineEdit(self.ecSeedAndGenerateContainerQFrame) @@ -590,7 +582,7 @@ def setupUi(self, MainWindow): self.ecIPAndConfirmMainContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.ecIPAndConfirmMainContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.ecIntermidatMainContainerQFrameHLayout = QHBoxLayout(self.ecIPAndConfirmMainContainerQFrame) - self.ecIntermidatMainContainerQFrameHLayout.setSpacing(15) + self.ecIntermidatMainContainerQFrameHLayout.setSpacing(10) self.ecIntermidatMainContainerQFrameHLayout.setObjectName(u"ecIntermidatMainContainerQFrameHLayout") self.ecIntermidatMainContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) self.ecIPassphraseContainerQFrame = QFrame(self.ecIPAndConfirmMainContainerQFrame) @@ -622,7 +614,7 @@ def setupUi(self, MainWindow): self.ecIPassphraseAndGenerateContainerQFrameHLayout.setFrameShape(QFrame.Shape.StyledPanel) self.ecIPassphraseAndGenerateContainerQFrameHLayout.setFrameShadow(QFrame.Shadow.Raised) self.ecIntermediatePassphraseAndGenerateHLayout = QHBoxLayout(self.ecIPassphraseAndGenerateContainerQFrameHLayout) - self.ecIntermediatePassphraseAndGenerateHLayout.setSpacing(15) + self.ecIntermediatePassphraseAndGenerateHLayout.setSpacing(10) self.ecIntermediatePassphraseAndGenerateHLayout.setObjectName(u"ecIntermediatePassphraseAndGenerateHLayout") self.ecIntermediatePassphraseAndGenerateHLayout.setContentsMargins(0, 0, 0, 0) self.ecIPassphraseQLineEdit = QLineEdit(self.ecIPassphraseAndGenerateContainerQFrameHLayout) @@ -673,7 +665,7 @@ def setupUi(self, MainWindow): self.ecConfirmCodeAndVerifyContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.ecConfirmCodeAndVerifyContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.ecConfirmCodeAndVerifyContainerQFrameHLayout = QHBoxLayout(self.ecConfirmCodeAndVerifyContainerQFrame) - self.ecConfirmCodeAndVerifyContainerQFrameHLayout.setSpacing(15) + self.ecConfirmCodeAndVerifyContainerQFrameHLayout.setSpacing(10) self.ecConfirmCodeAndVerifyContainerQFrameHLayout.setObjectName(u"ecConfirmCodeAndVerifyContainerQFrameHLayout") self.ecConfirmCodeAndVerifyContainerQFrameHLayout.setContentsMargins(0, 0, 0, 0) self.ecConfirmCodeQLineEdit = QLineEdit(self.ecConfirmCodeAndVerifyContainerQFrame) @@ -705,7 +697,7 @@ def setupUi(self, MainWindow): self.decryptWIFAndButtonsContainerQFrame = QFrame(self.bip38ContainerQFrame) self.decryptWIFAndButtonsContainerQFrame.setObjectName(u"decryptWIFAndButtonsContainerQFrame") self.decryptWIFAndButtonsQFrameHLayout = QHBoxLayout(self.decryptWIFAndButtonsContainerQFrame) - self.decryptWIFAndButtonsQFrameHLayout.setSpacing(15) + self.decryptWIFAndButtonsQFrameHLayout.setSpacing(10) self.decryptWIFAndButtonsQFrameHLayout.setObjectName(u"decryptWIFAndButtonsQFrameHLayout") self.decryptWIFAndButtonsQFrameHLayout.setContentsMargins(0, 0, 0, 0) self.decryptWIFContainerQFrame = QFrame(self.decryptWIFAndButtonsContainerQFrame) @@ -794,7 +786,7 @@ def setupUi(self, MainWindow): self.decryptWIFButtonsQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.decryptWIFButtonsQFrame.setFrameShadow(QFrame.Shadow.Raised) self.decryptWIFButtonsQFrameHLayout = QHBoxLayout(self.decryptWIFButtonsQFrame) - self.decryptWIFButtonsQFrameHLayout.setSpacing(15) + self.decryptWIFButtonsQFrameHLayout.setSpacing(10) self.decryptWIFButtonsQFrameHLayout.setObjectName(u"decryptWIFButtonsQFrameHLayout") self.decryptWIFButtonsQFrameHLayout.setContentsMargins(0, 0, 0, 0) self.createEncryptedWIFQPushButton = QPushButton(self.decryptWIFButtonsQFrame) From 390a44a595da5f9b151e78afa1311a3f9ba38e81 Mon Sep 17 00:00:00 2001 From: axiom Date: Tue, 22 Oct 2024 19:31:03 +0300 Subject: [PATCH 29/56] Update: app icon --- desktop/ui/images/icon/icon.ico | Bin 87959 -> 89071 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/desktop/ui/images/icon/icon.ico b/desktop/ui/images/icon/icon.ico index b1172a53a5740b0343d24e1c4c6ef67c5477fed1..9b665d66fc5868960e8c538300b59a206c9b9d9c 100644 GIT binary patch literal 89071 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

CXS0d8!5rw%}Q+Jf#| z9>c@aY)k-UAKc(wPbvF^jzRwe?x|KDJ^IJJ2t5^Bdim-u9RO?t(H-xt;ScY6BK|P` zR2Jzw_=BEwhYpbVckG-vz2&_%f3!LP__T>o-AL4v^q8H2KjpmeHu6mmuY@0nzb}@5 zLMJFXfbIrdqd${!PtlHf*65BL`UviwqrUrvkXdVHN8=A^0}u4_3;uQ@qP|b9HC_q# zzK%c97Km|iQSOj}`!eVwLCQTiAr@A2x7i(uKg0!T!(C2rcMg3#3*ky4B0t?rL}1;L z*&pzy=)m_r0n`Wd5Zv(t^JCl1ExQeWNE>(nUg+f+){x;&Cwj-3{RMxbJ)qYFd5`B8 z=yv>p2jGQXzF}Pf){ja2|Ew=c;{RvzqgP*hsy`Bc5`VJ(@4q@gmjC{XJ+w(A{v`fn z{oj9efGq$07kje)@88&y_>=gP^?(1?0TTbdg+HvJw1s%s*(qx;L2X?B+4771KkyFL z^;%koqjdv+u>R8(^Z&bH|4$#<|3y2e4By%4jFYC^t!_SX5>7AKX-uZ|OfIWQYYo)4=??c~twZ>yh?oQg%DBmN|^4!~>|HHoXzp*-GzX*4pHXX@vRI|Om zgbbk$fOp^r{I-NcYi=&O2DlV&>))1qEBB*t2Tg6t-XD7FD<}u>{Ul|-DxGx@n@ zeXl}dPq*A?{c?LPs2;1|L`Slakndj`L-uLr)@B6I+-m*nMb^Y>&B7wi?( zM0?AKxO#edrkB62Ece9TscGZJx2f+0xIq}oci(jOEkQ2;w+(Yl@rj~h2sd^#HsHtC z8q8|bH>ALGn6*7VOHQH1c8Xp(_f&tg(MJ42-}wa zAfW>=j+`kgk9(nWJ=&8`TXoGA`>6Et-IM(p$jW^iv$dga{TYag(`b)uTEn^}cc@GESlQvz$IG<2 z{)aFSmfpTPf&C^EGh7vYuM6$AjDR5S(T?*^;2aP*cLc^HJsr#T^4DcLfa;lTW|sJb z(V}$qr2seZ3t`%#pWqkHyHY~m=|TSi(H2v-t!;8Z(GNI9_ZWgmgWLM2PC+8DDy;ZX-hx{Hlww#ud#D#k{7L-D z`oI6`09pR~FZN{p-@maZ@h9;o>;L|(10?<={$&5Z|LOo){`)WXWdE=4VGrx?P^Rf6 zSSKRSf9xB20GN~Kzy7@T3v0o!{!gC&-12$Qhtkj^OK8ar8y}y90ZWF^PZow-?=o zJ%K-Y|5NwrKzCvf_{08U=xe|}Z7Lx;(_)m0DVuag1#s2O<2?N+TGYk*e}4B>*!Lx z#s5_qf_Lz}KKO+&e}dhgh6U{5K1w-s9}diQ(aN;9Ja;GdP>$iQB?nC{Tom0e^egNM zd4eDC3t=E^chvS@}7!+cViFV%or*tQoi+SslET5+#n2m69#cWT%D~05I=nPJs+J9 z2H$$oQ&;^i58d@1WCv#UYsar zV!%0ga28^F^tHRNZYf=;JKA@IIU1Cg!mLDjK5GTa#+X;E{M(4!n zNy~JYzP5x(SGqyH31{g+J=WC(_v`U-bbNmq;)J+6BR_C1WLM%trqz7zhm;2?4^jt6 z9Uygp)B#clNF5+`fYbp}2S^}h5hSY&x(``^y#5}0+g`MoWG^c@hDA|m$>bd3x^)*$n4!=BJ3!~?N^ z0QQp9AR=|3b7cTBCid+RFtppmasU6qGT`X<-y?>h$0q7$KOAqMe%8YATIy$E951JS zX2StygPojQiYL+~PAqJ>lBLb>~b!&J$e@qhYT$bIlp#J7^ zua~n+QkO`7DpU1#!-KM`r{Dn%3_cmzjY`!9D(B)2->iw4J>O}!1=qPmU1(u8A7@sdky61=hA7;eMn}{$yJ6qtT_RKMkELZH}72Cg;Te_{WGh%pTFj;i@ z^IbvPO4U%9P$tJ*TV}UW*s#Pq0T<#}N+(eqozpq8<^XfdIgz5}8Q41qA<=+yC4w7r zd67^3ywVT%rpmGUZ?+Xb>n0Geoat~r_uw0X)AQy-nrpU)>*npp-Z4gs3Kpx&DSs8m z)SgOaoU`%RBF~E0WM0M}aCWopP2SvX+LJ=xJ)Y2@^ZN6e0b~B%s*~==(8Pw|nK?!@ z;STnRL21lxRW)XTr8OhAZuwL+4dvEqt<=*piQ%Eub1)r&n6>p_ z8_g=sxhH*3FTd!$YMs6O=}}zQYVvCKq?IuH7GBI85wy1A-ks}zn=o0dpToG}h~;=! zJYV=u;Ue~ilGoz`hG<{1bXdDK%tY+dPQz;EMTIZpyyA7$CL~>oh`NxF;ALlS=q!_+ z9e>cf#K%w|QG1fWiDyHdWtbWz>z0;|05z{U%0Za#*(sG)~uD_d8cI% zZ(~0}>x!r8&A7c!Mhuzmv9Lh!VN|1kSy@g9f0N7+<9$t~3UAJFj=y%>^i*NUHtjqn ztV~w~vGmAqg#YUg(p6p$D)v6HoT<$Bw$eGb_$^Uxs=3PJkxA*?dRT=zV@26 z@LsZ(z;zQr4$MV`@rd!BfToc;q6%iKpFCYUD&6d1kwTNWQ%-}cVPdu9#uV$kJ4Y=1 z*Ldwr$gwx8xUg)`b2W!3?b`#e!^T!ejjh~d8B;gjT@;dWNdLmFh~t(rmoymX->#KA zSnqElnLC&2CjAsA1fnBBXNf(Rk~6>Gy*U&}hr zqP*j?@SBWx3qyodpD08mdhgZ$oA;eo@>ku+OaIQj&h2EYCXJQP8gTyh*0tA0G9aG( z6LL~y)XnqmDl`ohR#@|HubWmplNeXYqO*P*m&WQ$*7{Uon3efH2}|0|!ufi;_IdSb ze$|soZjBmptI(&>Pf*C~&`fSE(TMj49UEdZUJq7hygUUlvpII;MV2*-v80bI7H>Xt zGBHVx-8=O3$9yXWN7mar4i&$77x=eHBVQBu7M-J&PDaDGt~qyJakh+I@sKqx5J)+F z6pz59>6a`;!y{gN&gEr|(ap*K_gbQ8sJ?TpttjWxvW>yFcS*|_&51K-xfkZo#63Xa z{=@8|d(U=^Sy~|Y=G@<#{q&@f4n*sv?|QE( zaN_y>0La;PRh|IJxTJ^si<``BRyY^Uma-5Vb^2H~x4W3g7g4r>7$-xhlPVXsST`?3 zRAl{bhQ)IS=m@Z3QjDU8%-Choa;53o2Mg9=*rMVwoD8dWF`j+@f@Pz8sz;NYlv9vr zTK)5RbNtTPSzpa|e895qe%%EvaiN)>zPSNA2Xh3cDx^MOoB!&trOe~<{4sKm^)*~- z#+Gle2`xrBvR}SDbg^SZaq0w zV&SanT_iWjt9HAR`<|C$2io!1HxB-2Xdzu?xmPznvn=M-#9*)Bb-t17>>t0yluwvW zlusS-HFA@UF?KmW&0RMwQ&1~=5$mA1#F*=Kqnsrx@BK-|`P-VcnTHj_s;AoI>O4Hk z|IFa}SnSoi4>N`j@odPjm?<6h@5Y8KmRD&$HS7Lac|>klrR2paH=aZ@mb0cENj6ul zC}N+ulD#a}SZbDN&fB`!Wd7inXLOTRGzAx@YYB`N*t%l!QS-Nsg9D>=#1xEdou*Yx zEC|-kzHqyIJ!83!YptAh?UtO%!$wiOnQ!w|Or0f!X4xFEi7Ts(`%pEGeN5b=SL!Zi!m1I)m%nM;jA(n<6XoinclU)E0lfa6WA7bz7I>vcxhq<+=uqP<`&k7jGl8 z|9QnTZDsoCjFSwjPbuxWcPmUY>{8g7#RsqC)H1}_;*&%5@9!=?TcyFpRpwgtGG@<= zfqpCGaz%$EDWz!T)fHW}-L9Y!nUGu?Y&$o0ufp}$H&)xnn0k1#@IiL%Vm3VE zi&z3*{l==Q*O6v3HXJcKb@o7%*lyJs?(T6hX|J=hXZjUQ+VnNpI@BU%pOUz56qN;$h2dk$p~>vg#;*Lm^*B)*V8&#V>=?Pd*!e(d*bnW%nV+ zcg^$i4%F~N=yEqUN-8AHSaCo%I$^oT<(wy1>pd#OIX_XrxaZ{>lb5umSbZSF z)FUh}O6MGXJODMdOD_#c<=L(vpyd`4#4Wpf#-eo|M#G+c81z=fH@Wiub3uiMJbg^f zHPF@sb!ZyCrtgo8FHD>9;`P{l(Q{wex#V%?pRJMH&F6ThQt-(2>pKby$9|~dLv{MX z%2HLs6#p63{6J^S$=|v4$7Q4{JZsQfXbvpkr1?F0&-HgvwtXurL z=62*dWy5jL(j#K<`&Y^Zw7kOfuLiyTz#13-MF{oCqH>-THSJY*Pt1D#HkUW5DKDuC z6AhIW4L#!~x7i7$`>{^ve8i5AZ^d2~ed1htY1=2Qe@;F>6;OX9-Ed8%IZ~iaZxs3Y zJ-=SK?NhfYDluJ7$M)0kTW=Ik)p_P7gj+hRx)rdZg7fLUYPFH3$?4@Tcz*bHYh2Z} z!u^F*?5+nwF=;V17g4JmYi93RcusCdad-$@Qdq-F4HT=bIZvXFsC8vE>$!v8uXk0v zvrV;}InjIj%;<1~G4{vMk=d47PQ_lZ6*&aWg-FHf|i!KU691%H}l+A9nb< z`ZSG52m8-WMVrjl^D`7PV!5Rw-(6%uWr^)V!nu1(eZw+i_l3Q^t*2U_Y3t#ubIda` zd7OEi&%J`DJnGl1_9<)*&fuGwX7cwFroVSJM#_q5t7&dw;0iyk5udU1`9W4}&58k{ zp;A8aDFv%9$f%n8lvr&GiWc6bUzt~EsO31d;5pY-#cHMFPAfisSsCFpR#sM1JW}7= zmt&;k)CFJJOirG@uxn^pD1#Fdc8EW~!hBa`B^DIKUR|a6%yOpMv-DToxTa5hV0`?E z;|iw>7F|`V9(96b&r4A62q}Y_buq%#fB}x8J2l&L)3(^cTZWA6JypdT(xBNb0z`QU9Je$Dtvn9 zdZcW$!sZv()Yo}d#hgC#@KUMhm@2Qm#|p<{iu=VPZSIH*8HLVRG|%FO(Iv|vrUN+r zXQ%6md@kU2%4w>oR-NEJMCiDw?9Q|Yr5{%6874f~ui}daFICIxPG8c9ymr_8ZPfY8 zm!D=NE2J8)d^%Cg?yi?Wzyif-=E})$GN##|)__^Oll)hled*|lHsxl+=et3MlV zIP&XL^m-<1d!Wj%Jy(G+IY+i~MoL9{|qktCz*N^D@BDyoy6>^}$8tUP>4eD}PB znleApz4yJo3aWE%D_zR&|Du6EZo&uj7q=r?C6Ue4`N0L2c(4634^DV;yRMYNUP*-y zjnvwFDNO(Gp|8r{@_ez$^osJef0y=rVU(|UVOsRXFvhboQEqPrEOrWAbKGv-91ad6 zDS8H<&ALeK8ooY>O}?C87_1hhF^DU@%#>F=b43D|&E$>3HMXo{P!I9sf-vY@Iv=|= zapf=}w;CCiO=6Xm0-^$29W-tTN2Bh?nT>Mx?0oLe6S#R$SHHr^PhTT!sjs4^)Pkv~ zZjdye1>K?p?sAQKe3REr)e~E_eDJbq3?BC=gVFd|z_4P z9k#i^rp2CjGT-PQl?F5dEm6@bPA)LN?p2m)Ii{>J%rf@=iz_*jLPn}pFF%GPzf?mV zM3=_YxGbsIu^97)v=rf^#um{0d1|=28l}fSK7mI2;ilvG4{FsjoHR`|4D}6B*lZd5 z@1g7Xz1UZYN9K+nxU}|&BU9d&a(*;;v=YR%q@{BlwQ>t$FKHY|FuZm?c~gbo^y8n- zn#2{lqrxJ~ea*8Z>Z&(hqs;f0kzYpXi;6o7Lfo>{Ka{a)$xF-T6yM8|EHHDLU%g~O z?6ElaeKVtl73E!qg!?74JdinERV9F0?7L5+&uPaw3UXoY(5#~Nd%Jc0_Nl9`6-FG* zv_u2k=wjcSp(!f|tuVRr*Y?5Z4n#SYzH~x^ktJy6V7{KuKo{5AVZpkG0(YBVb*pfl zacsS0%98CzjID~&PH7#RJFmE4>&%T)?X6z&$)}=v{_Zp9sPk7fM%|g+RJ>{A*2t)f z-lHv(Z$0r2R(SehA#|}+Ry2wge)%UR>i&H7c&>0^2mgfo_W!b3XDo9oV>3^kyhuXj ziNbts!Ovya)EZEKF>WP(V5@hcbJ@l(_Q#Y{jbp>Et}2N-Vfx&&qB4pjNJ9PV+AEog zRg1Sft4xl$ny_Bskn7i3c}#g9%DJDrS|xr~-Mu6A+~ttO;*Y$1!QRJDMPui^zK3^6OEaBSbsQD?02cn!BUZ(Hge?7j+_SHFY zi&uI1PoEWCV=SJ0_)4+y?HlZ9H#pqf?rH9OJll)3qOb0eShlNA}m(0q|-jZi~QMasHZyI2XXlA^t#?glY~ z7)LJoZ(7UJovUyP_X$k-nx|l0(N~^5dlj=jg^o{Q4|qLz@w#ifx0eRyL?3>4dcy(H z^W)nz5!Yf}INB~Dd+2D<bh#W+&GdHN@jr4G<&A*2Ei;84SNpP*TkDyo?Y}6Xc*MoJ0ojRXy zZ3xAxtuEy2VSs7tG3zica9)XrY!-GKj-g~2^EL&3O-Ku2#J2h0VYnQVA80)Q(qvkk zp2B{e6=oKg?<8y%t{#qgjA0xZfpao&_ zh8>P$5?y|FLWA&y^!z{{;GaYI(wf>M0~s)sUuGF$-^FtR&NT z*IwWkne!?)BR`M}O=D>4oDd$qwe*3HhJbIm2zFS8A(Sht#$d8~KFUG;0G;aO@O)-= zCg518c49-`DomSu6vvBA*4FofDkIO{AXCon;<8ydFBkK~OQe^GkIq6% P5}3hsL!C2I?biPv<=-$h literal 87959 zcmeHQ2|Sfc8-FdK72S%Gh?JB_w@YQaT~bsM>2}K!DH0*NNtQM#MN~>D)os&46qRf( zt|%!j$`X=@h-6>po9A@jK2GEu*}e1o&6(xQ^33ypW`AdfAXtcg1P>2^O<}^6ogj1x zf)Ez|>b`*eqp+W}^nY$Kf>=GAAY5F&y2ZIzh#|9Z1gs$b%3%cY+aD~1ICkTx*ypQ1 zHV6WzGj!lrO>_VMXD+tpVT~Bn5EkNqQo}k0YewUe;UEsgecy(-WE$V%4jw!hX=`gE zLqkKF*3i&E{rmT)X|RL8fq?;%k&z+eHZj@R*^#xiH7Y47LAABDsIsyWty{N_roj$= z_4V~AJv|*sOG`J2OVZE5!GUJZoQYPhT#1T{i_y`eM`;@DdU|?j@7}$rrltnXpFh9Z z_>c}OD=Qi|ZXC+Z&HWZ1?4w4FqNVYp_!B2iM8UzqC^0b+efjbQty;ATnV6WM($Z37 zYHEs3ojQdwGc%F6xOlVqga6g5SHH!FxQ*kVK7IO!@qd>7pWz=f_(@4geOLbGB=8}fj>8Y^)BgLMPejHcDr zaF7S&MbZHL0Gc`@Z<1!n3-ToKuETcnzs@ot&yJL}HkX5qjSWG&1!i-ag@xt2w84+j zu&wcW!h{LP&(9A91_q+bmoGQbSFT(^YuB!&wSQzf&=!Ip{MR@<#CLahMP$B23W${jIUFF|EID zE?wwH<>lpR8tknpCnqPS@&~>Eo?2R3XvdBnXzSLk$ji&?8&9gLs?hA&vuPUapkRyw zVIVBTNl8ihMwY9qE7SSYV8ZNu!A3{*RNkAU0q$;c$18B{``3a<0vvbBPQf;YirwVy@tGO zY-|v;d7#1GIRB+fm!go65Hfqzmi&Q6;Q#8?t5Hk*hw&ol=J-E)^k@_xA5Wv9uC9)0 z{x`=Xs{VCu`_q-}Z+rJYj*gBD*FQ%3-<>;mq5%U2&@|Y8)c;<)b`6akJC@=6TN{6v znVHe*CRsLe4!z+E~1?&|pmEp>^F2uT{Xks>9pap1ZtqkzLA=V$U zW;TzG4i7W|Z7r3dJJU|`rlm6U1ln6F1JG`Ob$65*l4g1nXa$;q_H|fyr@Bf{YfEmR z8E7xZx}`AP-M=T(-rafIF7&|~BkXg*+@UoMa}gNdw%z?=KU@ipzL70}}gMUUw25oJlU%!6sQU+Lu zfpr&1n-K-`MVL1>UKaxUkLHr}>B3r=gM$NY4oa5)XG|!=k|j&Nt>@6^NAHF;Cl3z~ znk<3LfSp{2q7U1WySlm>ZQs6~w!ix`w3BhkGBAn*tPu_xG>E3j^}?2DZOK0>DvGwB zPSWtRCX@m8?8CysPo{Zw+;u@3Eti7l}E zYnZ!(20MMnG*q<+ODJm^+erfF0Hn;6Fyx=g*&! zy}f_U^+mfA=be6#tPhqSa;_#v_v~uj_zEB)@W~B1_SKqPJ6

M!z@jr1 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 AwEzGB From 8d22102015f398c48e352ef6fbaab8f7224524ef Mon Sep 17 00:00:00 2001 From: axiom Date: Tue, 22 Oct 2024 19:33:05 +0300 Subject: [PATCH 30/56] Bump: bip38-desktop v0.1.0b2 --- desktop/info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/info.py b/desktop/info.py index 8f8983f..729027b 100644 --- a/desktop/info.py +++ b/desktop/info.py @@ -4,4 +4,4 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://opensource.org/license/mit -__version__: str = "v0.1.0b1" \ No newline at end of file +__version__: str = "v0.1.0b2" \ No newline at end of file From 1ac79c83e3c9efcba73eb78887d7f21ba7d936e1 Mon Sep 17 00:00:00 2001 From: axiom Date: Thu, 24 Oct 2024 15:42:15 +0300 Subject: [PATCH 31/56] Update: ui adjustments --- desktop/core.py | 21 ++++++-- desktop/main.py | 51 ++++++++++++++++--- desktop/ui/bip38.ui | 76 ++++++++++++++++++++++++++--- desktop/ui/css/theme.css | 54 +++++++++++++++++++- desktop/ui/images/svg/full-logo.svg | 1 + desktop/ui/images/svg/icon.svg | 1 + desktop/ui/images/svg/logo.svg | 1 + desktop/ui/ui_bip38.py | 44 ++++++++++++++--- desktop/utils.py | 24 ++++++++- launch.py | 9 ++++ 10 files changed, 252 insertions(+), 30 deletions(-) create mode 100644 desktop/ui/images/svg/full-logo.svg create mode 100644 desktop/ui/images/svg/icon.svg create mode 100644 desktop/ui/images/svg/logo.svg diff --git a/desktop/core.py b/desktop/core.py index 18fed17..6068310 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -13,13 +13,15 @@ QFrame, QComboBox ) from PySide6.QtCore import ( - Qt, QFileSystemWatcher + Qt, QFileSystemWatcher, Signal ) from PySide6.QtGui import ( QFontDatabase, QIcon ) -from desktop.utils import resolve_path +from desktop.utils import ( + resolve_path, put_svg +) from desktop.ui.ui_bip38 import Ui_MainWindow from desktop.info import __version__ as desktop_ver from bip38.info import __version__ as library_ver @@ -28,6 +30,7 @@ class Application(QMainWindow): _instance: Optional['Application'] = None ui: Ui_MainWindow = None theme_watcher: QFileSystemWatcher = None + resized: Signal = Signal(object) def __new__(cls, *args, **kwargs) -> 'Application': """ @@ -69,6 +72,13 @@ def initialize(self) -> None: self.setWindowTitle("Bitcoin Improvement Proposal - 0038") self.bip38_icon = QIcon(resolve_path("desktop/ui/images/icon/icon.ico")) self.setWindowIcon(self.bip38_icon) + + put_svg( + self.ui.bip38LogoHLayout, + resolve_path("desktop/ui/images/svg/full-logo.svg"), + 120, + 63.47 + ) css_path = resolve_path("desktop/ui/css/theme.css") self.theme_watcher = QFileSystemWatcher([css_path]) @@ -82,7 +92,6 @@ def initialize(self) -> None: } self.ui.outputQTextEdit.setPlaceholderText(json.dumps(info, indent=4)) - def load_stylesheet(self, path: str) -> None: """ Load and apply a stylesheet from the specified path. @@ -94,4 +103,8 @@ def load_stylesheet(self, path: str) -> None: stylesheet = style_file.read() self.setStyleSheet(stylesheet) except Exception as e: - print(f"Failed to load stylesheet: {e}") \ No newline at end of file + print(f"Failed to load stylesheet: {e}") + + def resizeEvent(self, event) -> None: + super().resizeEvent(event) + self.resized.emit(event) \ No newline at end of file diff --git a/desktop/main.py b/desktop/main.py index 936abab..8c68d66 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -14,7 +14,9 @@ ) from PySide6.QtCore import QRegularExpression -from PySide6.QtWidgets import QWidget +from PySide6.QtWidgets import ( + QWidget, QPushButton +) from PySide6.QtGui import ( QTextCharFormat, QTextCursor, QColor, QTextFormat, QTextOption, QRegularExpressionValidator @@ -184,6 +186,12 @@ def __init_ui(self) -> None: self.ui.noECPrivateKeyConvertQPushButton.clicked.connect(self.noec_convert_private_key) self.ui.noECEncryptQPushButton.clicked.connect(self.noec_encrypt) + self.ui.noECPrivateKeyGenerateQPushButton.clicked.connect( + lambda: self.ui.noECPrivateKeyQLineEdit.setText( + os.urandom(32).hex() + ) + ) + self.ui.ecOwnerSaltGenerateQPushButton.clicked.connect( lambda: self.ui.ecOwnerSaltQLineEdit.setText( os.urandom(8).hex() @@ -207,6 +215,28 @@ def __init_ui(self) -> None: self.ui.cryptocurrencyQComboBox.setCurrentText("Bitcoin") self.ui.modeQComboBox.setCurrentIndex(0) + # Custom components + + self.clear_button = QPushButton("Clear", self.app) + self.clear_button.setFixedWidth(60) + self.clear_button.clicked.connect(lambda: self.ui.outputQTextEdit.setText(None)) + self.clear_button.clicked.connect(self.clean_all_required) + + self.app.resized.connect(self.update_clear_button_position) + self.ui.outputQTextEdit.verticalScrollBar().rangeChanged.connect(self.update_clear_button_position) + + def update_clear_button_position(self) -> None: + button_width = self.clear_button.sizeHint().width() + button_height = self.clear_button.sizeHint().height() + window_width = self.app.width() + window_height = self.app.height() + + right_margin = 10 + bottom_margin = 5 + right_margin += 10 if self.ui.outputQTextEdit.verticalScrollBar().maximum() > 0 else 0 + + self.clear_button.move(window_width - button_width - right_margin, window_height - button_height - bottom_margin) + def change_cryptocurrency(self, cryptocurrency: str) -> None: cryptocurrency_class: ICryptocurrency = self.cryptocurrencies[cryptocurrency] @@ -281,7 +311,7 @@ def ec_generate_ipassphrase(self): if (lot and sequence is None) or (lot is None and sequence): self.set_required(self.ui.ecLotQLineEdit, True) self.set_required(self.ui.ecSequenceQLineEdit, True) - raise BIP38Application.ValidationError("'Lot' and 'Sequence' must both be set or both left blank.") + raise BIP38Application.ValidationError("Lot and Sequence must both be set or both left blank.") intermediate_passphrase: str = self.bip38().intermediate_code( passphrase=passphrase, @@ -409,21 +439,30 @@ class ValidationError(Exception): def __init__(self, message): super().__init__(message) + def format_required(self, invalid_inputs): + if len(invalid_inputs) == 1: + return f"{invalid_inputs[0]} is required" + if len(invalid_inputs) == 2: + return f"{invalid_inputs[0]} and {invalid_inputs[1]} are required" + + return f"{', '.join(invalid_inputs[:-1])}, and {invalid_inputs[-1]} are required" + def validate_and_get(self, *args): self.clean_all_required() # forget old validations all_data = () - valid_inputs = 0 + invalid_inputs = [] for input_key in args: input_data = self.inputs[input_key] text = input_data["input"].text() all_data += (text,) - valid_inputs += self.validate_input(input_key, text) + if not self.validate_input(input_key, text): + invalid_inputs.append(input_key) - if len(args) != valid_inputs: - raise BIP38Application.ValidationError("Please Fill All Required Fields!") + if invalid_inputs: + raise BIP38Application.ValidationError(self.format_required(invalid_inputs)) return all_data diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui index 87540a7..e2f0b93 100644 --- a/desktop/ui/bip38.ui +++ b/desktop/ui/bip38.ui @@ -7,7 +7,7 @@ 0 0 900 - 521 + 491 @@ -59,13 +59,13 @@ 0 - 290 + 280 16777215 - 290 + 280 @@ -76,7 +76,7 @@ - 10 + 7 15 @@ -114,6 +114,13 @@ 0 + + + + 0 + + + @@ -410,12 +417,12 @@ - 1 + 0 - 10 + 7 0 @@ -518,6 +525,53 @@ + + + + Qt::LayoutDirection::LeftToRight + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + PointingHandCursor + + + Generate + + + + + + @@ -733,7 +787,7 @@ - WIF + Wallet Important Format (WIF) @@ -810,7 +864,7 @@ - 10 + 7 0 @@ -1615,6 +1669,12 @@ + + + 145 + 16777215 + + QFrame::Shape::StyledPanel diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index 7a020b6..0b64cc1 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -123,7 +123,8 @@ QComboBox QAbstractItemView::item:hover { } QComboBox QAbstractItemView::item:selected { - background-color: rgb(16, 21, 27); + background-color: #11111b; + color: white; selection-background-color: white; outline: none; } @@ -157,7 +158,7 @@ QTextEdit { background-color: black; border-color: rgb(25, 30, 36); color: rgb(255, 255, 255); - padding: 5; + padding: 0 5px; selection-color: #DDD; selection-background-color: #65619c; } @@ -176,4 +177,53 @@ QPushButton { QPushButton:hover{ background-color: rgba(28, 28, 37, 0.7); +} + +/* QMENU */ + +QMenu { + background-color: #11111b; + color: white; + border: 1px solid rgba(128, 128, 128, 0.25); + padding: 5px; + border-radius: 4px; +} + +QMenu::item { + background-color: transparent; + padding: 5px 15px; + color: white; + qproperty-icon: none; +} + +QMenu::item:selected { + background: rgb(25, 30, 36); + color: #65619c; + border-radius: 3px; +} + +QMenu::item:hover { + background-color: rgb(25, 30, 36); + color: #65619c; + border-radius: 3px; +} + +QMenu::item:disabled { + background-color: transparent; + color: rgba(255, 255, 255, 0.5); +} + +QMenu::item:disabled:selected { + color: rgba(255, 255, 255, 0.5); + background-color: transparent; +} + +QMenu::separator { + height: 1px; + background-color: rgba(128, 128, 128, 0.25); + margin: 5px 0; +} + +QMenu:disabled { + color: rgba(255, 255, 255, 0.5); } \ No newline at end of file diff --git a/desktop/ui/images/svg/full-logo.svg b/desktop/ui/images/svg/full-logo.svg new file mode 100644 index 0000000..c89039a --- /dev/null +++ b/desktop/ui/images/svg/full-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/desktop/ui/images/svg/icon.svg b/desktop/ui/images/svg/icon.svg new file mode 100644 index 0000000..316414b --- /dev/null +++ b/desktop/ui/images/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/desktop/ui/images/svg/logo.svg b/desktop/ui/images/svg/logo.svg new file mode 100644 index 0000000..b1ab4e6 --- /dev/null +++ b/desktop/ui/images/svg/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/desktop/ui/ui_bip38.py b/desktop/ui/ui_bip38.py index aa06d3d..f08ecc9 100644 --- a/desktop/ui/ui_bip38.py +++ b/desktop/ui/ui_bip38.py @@ -18,7 +18,7 @@ class Ui_MainWindow(object): def setupUi(self, MainWindow): if not MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") - MainWindow.resize(900, 521) + MainWindow.resize(900, 491) sizePolicy = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) @@ -39,12 +39,12 @@ def setupUi(self, MainWindow): sizePolicy1.setVerticalStretch(0) sizePolicy1.setHeightForWidth(self.bip38ContainerQFrame.sizePolicy().hasHeightForWidth()) self.bip38ContainerQFrame.setSizePolicy(sizePolicy1) - self.bip38ContainerQFrame.setMinimumSize(QSize(0, 290)) - self.bip38ContainerQFrame.setMaximumSize(QSize(16777215, 290)) + self.bip38ContainerQFrame.setMinimumSize(QSize(0, 280)) + self.bip38ContainerQFrame.setMaximumSize(QSize(16777215, 280)) self.bip38ContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.bip38ContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.verticalLayout = QVBoxLayout(self.bip38ContainerQFrame) - self.verticalLayout.setSpacing(10) + self.verticalLayout.setSpacing(7) self.verticalLayout.setObjectName(u"verticalLayout") self.verticalLayout.setContentsMargins(15, 15, 15, 5) self.cryptoAndNetworkContainerQFrame = QFrame(self.bip38ContainerQFrame) @@ -55,6 +55,12 @@ def setupUi(self, MainWindow): self.horizontalLayout.setSpacing(10) self.horizontalLayout.setObjectName(u"horizontalLayout") self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.bip38LogoHLayout = QHBoxLayout() + self.bip38LogoHLayout.setSpacing(0) + self.bip38LogoHLayout.setObjectName(u"bip38LogoHLayout") + + self.horizontalLayout.addLayout(self.bip38LogoHLayout) + self.cryptocurrencyContainerQFrame = QFrame(self.cryptoAndNetworkContainerQFrame) self.cryptocurrencyContainerQFrame.setObjectName(u"cryptocurrencyContainerQFrame") self.cryptocurrencyContainerQFrame.setMaximumSize(QSize(150, 16777215)) @@ -194,7 +200,7 @@ def setupUi(self, MainWindow): self.noECQWidget = QWidget() self.noECQWidget.setObjectName(u"noECQWidget") self.noECVLayout = QVBoxLayout(self.noECQWidget) - self.noECVLayout.setSpacing(10) + self.noECVLayout.setSpacing(7) self.noECVLayout.setObjectName(u"noECVLayout") self.noECVLayout.setContentsMargins(0, 0, 0, 0) self.noECPrivateKeyAndWifTypeContainerQFrame = QFrame(self.noECQWidget) @@ -237,6 +243,26 @@ def setupUi(self, MainWindow): self.noECPrivateKeyAndWifTypeContainerHLayout_2.addWidget(self.noECPrivateKeyContainerQFrame) + self.noECPrivateKeyGenerateButtonContainerQFrame = QFrame(self.noECPrivateKeyAndWifTypeContainerQFrame) + self.noECPrivateKeyGenerateButtonContainerQFrame.setObjectName(u"noECPrivateKeyGenerateButtonContainerQFrame") + self.noECPrivateKeyGenerateButtonContainerQFrame.setLayoutDirection(Qt.LayoutDirection.LeftToRight) + self.noECPrivateKeyGenerateButtonHLayout = QVBoxLayout(self.noECPrivateKeyGenerateButtonContainerQFrame) + self.noECPrivateKeyGenerateButtonHLayout.setSpacing(5) + self.noECPrivateKeyGenerateButtonHLayout.setObjectName(u"noECPrivateKeyGenerateButtonHLayout") + self.noECPrivateKeyGenerateButtonHLayout.setContentsMargins(0, 0, 0, 0) + self.noECPrivateKeyGenerateButtonSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.noECPrivateKeyGenerateButtonHLayout.addItem(self.noECPrivateKeyGenerateButtonSpacer) + + self.noECPrivateKeyGenerateQPushButton = QPushButton(self.noECPrivateKeyGenerateButtonContainerQFrame) + self.noECPrivateKeyGenerateQPushButton.setObjectName(u"noECPrivateKeyGenerateQPushButton") + self.noECPrivateKeyGenerateQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) + + self.noECPrivateKeyGenerateButtonHLayout.addWidget(self.noECPrivateKeyGenerateQPushButton) + + + self.noECPrivateKeyAndWifTypeContainerHLayout_2.addWidget(self.noECPrivateKeyGenerateButtonContainerQFrame) + self.noECWIFTypeContainerQFrame = QFrame(self.noECPrivateKeyAndWifTypeContainerQFrame) self.noECWIFTypeContainerQFrame.setObjectName(u"noECWIFTypeContainerQFrame") self.noECWIFTypeContainerQFrame.setMaximumSize(QSize(145, 16777215)) @@ -372,7 +398,7 @@ def setupUi(self, MainWindow): self.ecQWidget = QWidget() self.ecQWidget.setObjectName(u"ecQWidget") self.ecVLayout = QVBoxLayout(self.ecQWidget) - self.ecVLayout.setSpacing(10) + self.ecVLayout.setSpacing(7) self.ecVLayout.setObjectName(u"ecVLayout") self.ecVLayout.setContentsMargins(0, 0, 0, 0) self.ecSaltMainContainerQFrame = QFrame(self.ecQWidget) @@ -736,6 +762,7 @@ def setupUi(self, MainWindow): self.decryptWIFTypeContainerQFrame = QFrame(self.decryptWIFAndButtonsContainerQFrame) self.decryptWIFTypeContainerQFrame.setObjectName(u"decryptWIFTypeContainerQFrame") + self.decryptWIFTypeContainerQFrame.setMaximumSize(QSize(145, 16777215)) self.decryptWIFTypeContainerQFrame.setFrameShape(QFrame.Shape.StyledPanel) self.decryptWIFTypeContainerQFrame.setFrameShadow(QFrame.Shadow.Raised) self.decryptWIFTypeContainerQFrameVLayout = QVBoxLayout(self.decryptWIFTypeContainerQFrame) @@ -825,7 +852,7 @@ def setupUi(self, MainWindow): self.retranslateUi(MainWindow) - self.modeQStackedWidget.setCurrentIndex(1) + self.modeQStackedWidget.setCurrentIndex(0) QMetaObject.connectSlotsByName(MainWindow) @@ -841,10 +868,11 @@ def retranslateUi(self, MainWindow): self.modeQLabel.setText(QCoreApplication.translate("MainWindow", u"Mode", None)) self.modeQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) self.noECPrivateKeyQLabel.setText(QCoreApplication.translate("MainWindow", u"Private Key", None)) + self.noECPrivateKeyGenerateQPushButton.setText(QCoreApplication.translate("MainWindow", u"Generate", None)) self.noECWIFTypeQLabel.setText(QCoreApplication.translate("MainWindow", u"WIF Type", None)) self.noECWIFTypeQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) self.noECPrivateKeyConvertQPushButton.setText(QCoreApplication.translate("MainWindow", u"Convert", None)) - self.noECWIFQLabel.setText(QCoreApplication.translate("MainWindow", u"WIF", None)) + self.noECWIFQLabel.setText(QCoreApplication.translate("MainWindow", u"Wallet Important Format (WIF)", None)) self.noECEncryptQPushButton.setText(QCoreApplication.translate("MainWindow", u"Encrypt", None)) self.ecOwnerSaltQLabel.setText(QCoreApplication.translate("MainWindow", u"Owner Salt", None)) self.ecOwnerSaltGenerateQPushButton.setText(QCoreApplication.translate("MainWindow", u"Generate", None)) diff --git a/desktop/utils.py b/desktop/utils.py index 167296f..76dbe8d 100644 --- a/desktop/utils.py +++ b/desktop/utils.py @@ -6,7 +6,8 @@ import os from PySide6.QtWidgets import QLayout - +from PySide6.QtSvgWidgets import QSvgWidget +from PySide6.QtCore import QSize def clear_layout(layout: QLayout, delete: bool = True) -> None: """ @@ -34,4 +35,23 @@ def resolve_path(path: str) -> str: :return: The absolute path of the given relative path. :rtype: str """ - return os.path.abspath(os.path.join(os.path.dirname(__file__), "../", path)) \ No newline at end of file + return os.path.abspath(os.path.join(os.path.dirname(__file__), "../", path)) + + +def put_svg(layout: QLayout, path: str, width: int, height: int) -> QSvgWidget: + """ + Add an SVG widget to a layout. + + :param layout: The layout to add the SVG widget to. + :param path: The path to the SVG file. + :param width: The width of the SVG widget. + :param height: The height of the SVG widget. + :return: The SVG widget. + """ + clear_layout(layout) + svg = QSvgWidget(path) + svg.setMinimumSize(QSize(width, height)) + svg.setMaximumSize(QSize(width, height)) + svg.setStyleSheet("background: transparent") + layout.addWidget(svg) + return svg diff --git a/launch.py b/launch.py index 193e2f8..6b3a25e 100644 --- a/launch.py +++ b/launch.py @@ -5,6 +5,8 @@ # file COPYING or https://opensource.org/license/mit from PySide6.QtWidgets import QApplication +from PySide6.QtGui import QPalette, QColor +from PySide6.QtCore import Qt import sys @@ -13,6 +15,13 @@ def main() -> None: qapp: QApplication = QApplication(sys.argv) + + palette = QPalette() + palette.setColor(QPalette.Active, QPalette.Text, QColor(255, 255, 255)) + palette.setColor(QPalette.Disabled, QPalette.Text, QColor(170, 170, 170)) + qapp.setPalette(palette) + qapp.setStyle("Windows") + main_application: BIP38Application = BIP38Application() main_application.app.show() sys.exit(qapp.exec()) From 9d88e9106db45f3566a6157a62393fa12fe841da Mon Sep 17 00:00:00 2001 From: axiom Date: Thu, 24 Oct 2024 18:23:53 +0300 Subject: [PATCH 32/56] Update: logo --- desktop/core.py | 5 +++-- desktop/ui/images/svg/full-logo.svg | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/desktop/core.py b/desktop/core.py index 6068310..ce521e7 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -76,9 +76,10 @@ def initialize(self) -> None: put_svg( self.ui.bip38LogoHLayout, resolve_path("desktop/ui/images/svg/full-logo.svg"), - 120, - 63.47 + 84, + 44 ) + self.ui.bip38LogoHLayout.setContentsMargins(0, 0, 10, 0) css_path = resolve_path("desktop/ui/css/theme.css") self.theme_watcher = QFileSystemWatcher([css_path]) diff --git a/desktop/ui/images/svg/full-logo.svg b/desktop/ui/images/svg/full-logo.svg index c89039a..fed49cb 100644 --- a/desktop/ui/images/svg/full-logo.svg +++ b/desktop/ui/images/svg/full-logo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 8224c0eaf10b4ca6bf1ed6759623a46319a8fcc7 Mon Sep 17 00:00:00 2001 From: axiom Date: Thu, 24 Oct 2024 18:24:55 +0300 Subject: [PATCH 33/56] Bump: bip38-desktop v0.1.0b3 --- desktop/info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/info.py b/desktop/info.py index 729027b..e953aca 100644 --- a/desktop/info.py +++ b/desktop/info.py @@ -4,4 +4,4 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://opensource.org/license/mit -__version__: str = "v0.1.0b2" \ No newline at end of file +__version__: str = "v0.1.0b3" \ No newline at end of file From b8415fe2c2b5164a318c529601826d438c1d7f02 Mon Sep 17 00:00:00 2001 From: axiom Date: Fri, 25 Oct 2024 12:56:49 +0300 Subject: [PATCH 34/56] Update: build script added author --- build.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.py b/build.py index 81b4241..51ca94a 100644 --- a/build.py +++ b/build.py @@ -7,6 +7,7 @@ from cx_Freeze import setup, Executable from desktop.info import __version__ as version +from bip38.info import __author__ as author app_name = "BIP38" icon_path = "desktop/ui/images/icon/icon.ico" @@ -66,6 +67,7 @@ setup( name=app_name, + author=author, version=version, executables=executables, options={ From 80b3223d77c17a1341415687343eb48a87ba1cb5 Mon Sep 17 00:00:00 2001 From: meherett Date: Mon, 28 Oct 2024 11:09:07 +0300 Subject: [PATCH 35/56] Add: BIP38 logo on README.md --- README.md | 4 +++- docs/static/svg/bip38.svg | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 docs/static/svg/bip38.svg diff --git a/README.md b/README.md index 34faefa..8fbd9f9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Bitcoin Improvement Proposal - 0038 / BIP38 + + +# Bitcoin Improvement Proposal - 0038 [![Build Status](https://img.shields.io/github/actions/workflow/status/meherett/python-bip38/build.yml)](https://github.com/meherett/python-bip38/actions/workflows/build.yml) [![PyPI Version](https://img.shields.io/pypi/v/bip38.svg?color=blue)](https://pypi.org/project/bip38) diff --git a/docs/static/svg/bip38.svg b/docs/static/svg/bip38.svg new file mode 100644 index 0000000..c89039a --- /dev/null +++ b/docs/static/svg/bip38.svg @@ -0,0 +1 @@ + \ No newline at end of file From 5ac11dd90f549d5876a7bb2bae125090e48e8862 Mon Sep 17 00:00:00 2001 From: axiom Date: Mon, 28 Oct 2024 11:57:03 +0300 Subject: [PATCH 36/56] Update: ui adjustments, show json for encrypt and passphrase --- desktop/core.py | 5 ++-- desktop/main.py | 51 +++++++++++++++++++++++++++++++++------- desktop/ui/css/theme.css | 2 +- launch.py | 1 - 4 files changed, 46 insertions(+), 13 deletions(-) diff --git a/desktop/core.py b/desktop/core.py index ce521e7..f567e29 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -13,7 +13,7 @@ QFrame, QComboBox ) from PySide6.QtCore import ( - Qt, QFileSystemWatcher, Signal + Qt, QFileSystemWatcher, Signal, QSize ) from PySide6.QtGui import ( QFontDatabase, QIcon @@ -79,7 +79,8 @@ def initialize(self) -> None: 84, 44 ) - self.ui.bip38LogoHLayout.setContentsMargins(0, 0, 10, 0) + self.ui.bip38LogoHLayout.setContentsMargins(0, 0, 5, 0) + self.ui.outputQTextEdit.setMinimumSize(QSize(0, 200)) css_path = resolve_path("desktop/ui/css/theme.css") self.theme_watcher = QFileSystemWatcher([css_path]) diff --git a/desktop/main.py b/desktop/main.py index 8c68d66..12f8a11 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -29,7 +29,9 @@ Error, PassphraseError, WIFError ) from bip38.cryptocurrencies import ICryptocurrency -from bip38.wif import private_key_to_wif +from bip38.wif import ( + get_wif_type, private_key_to_wif +) from desktop.core import Application @@ -258,14 +260,14 @@ def cryptocurrency(self): cryptocurrency: ICryptocurrency = self.cryptocurrencies[cryptocurrency_name] return cryptocurrency - def netowrk(self): + def network(self): return self.ui.networkQComboBox.currentText().lower() def bip38(self): return BIP38( cryptocurrency=self.cryptocurrency(), - network=self.netowrk() + network=self.network() ) def noec_convert_private_key(self): @@ -275,10 +277,20 @@ def noec_convert_private_key(self): wif: str = private_key_to_wif( private_key=private_key, cryptocurrency=self.cryptocurrency(), - network=self.netowrk(), + network=self.network(), wif_type=self.ui.noECWIFTypeQComboBox.currentText() ) self.ui.noECWIFQLineEdit.setText(wif) + + output = { + "cryptocurrency": self.ui.cryptocurrencyQComboBox.currentText(), + "network": self.network(), + "wif_type": self.ui.noECWIFTypeQComboBox.currentText(), + "private_key": private_key, + "wif": wif + } + self.log(output) + except (Error, BIP38Application.ValidationError) as e: self.logerr(e) @@ -291,7 +303,18 @@ def noec_encrypt(self): passphrase=passphrase ) self.ui.decryptWIFQLineEdit.setText(encrypted_wif) - self.log(encrypted_wif) + + wif_type = get_wif_type(wif=wif, cryptocurrency=self.cryptocurrency(), network=self.network()) + + output = { + "cryptocurrency": self.ui.cryptocurrencyQComboBox.currentText(), + "network": self.network(), + "passphrase": passphrase, + "wif": wif, + "wif_type": wif_type, + "encrypted_wif": encrypted_wif + } + self.log(output) except WIFError as we: self.set_required(self.ui.noECWIFQLineEdit, True) self.logerr(we) @@ -320,7 +343,17 @@ def ec_generate_ipassphrase(self): sequence=sequence ) self.ui.ecIPassphraseQLineEdit.setText(intermediate_passphrase) - self.log(intermediate_passphrase) + + output = { + "cryptocurrency": self.ui.cryptocurrencyQComboBox.currentText(), + "network": self.network(), + "passphrase": passphrase, + "owner_salt": owner_salt, + "lot": lot, + "sequence": sequence, + "intermediate_passphrase": intermediate_passphrase + } + self.log(output) except (Error, BIP38Application.ValidationError) as e: self.logerr(e) @@ -458,7 +491,7 @@ def validate_and_get(self, *args): text = input_data["input"].text() all_data += (text,) - if not self.validate_input(input_key, text): + if not self.validate_input(input_key, text, validate_optional=True): invalid_inputs.append(input_key) if invalid_inputs: @@ -466,11 +499,11 @@ def validate_and_get(self, *args): return all_data - def validate_input(self, input_key, text): + def validate_input(self, input_key, text, validate_optional=False): input_data = self.inputs[input_key] qt_input = input_data["input"] - optional = input_data["optional"] + optional = input_data["optional"] if validate_optional else True # threat all fields as optional if validate_optional is true min_length = input_data["min_length"] is_valid = len(text) >= min_length or (optional and len(text) == 0) diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index 0b64cc1..8e5f6c4 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -158,7 +158,7 @@ QTextEdit { background-color: black; border-color: rgb(25, 30, 36); color: rgb(255, 255, 255); - padding: 0 5px; + padding: 5px; selection-color: #DDD; selection-background-color: #65619c; } diff --git a/launch.py b/launch.py index 6b3a25e..31d69bb 100644 --- a/launch.py +++ b/launch.py @@ -20,7 +20,6 @@ def main() -> None: palette.setColor(QPalette.Active, QPalette.Text, QColor(255, 255, 255)) palette.setColor(QPalette.Disabled, QPalette.Text, QColor(170, 170, 170)) qapp.setPalette(palette) - qapp.setStyle("Windows") main_application: BIP38Application = BIP38Application() main_application.app.show() From a560e89e8588593711c3443cbe8ebcfe229c260f Mon Sep 17 00:00:00 2001 From: meherett Date: Mon, 28 Oct 2024 12:06:52 +0300 Subject: [PATCH 37/56] Update: BIP38 logo on README.md --- README.md | 4 ++-- docs/static/svg/bip38-full.svg | 1 + docs/static/svg/bip38.svg | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 docs/static/svg/bip38-full.svg diff --git a/README.md b/README.md index 8fbd9f9..027d721 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ - - # Bitcoin Improvement Proposal - 0038 + + [![Build Status](https://img.shields.io/github/actions/workflow/status/meherett/python-bip38/build.yml)](https://github.com/meherett/python-bip38/actions/workflows/build.yml) [![PyPI Version](https://img.shields.io/pypi/v/bip38.svg?color=blue)](https://pypi.org/project/bip38) [![Documentation Status](https://readthedocs.org/projects/bip38/badge/?version=master)](https://bip38.readthedocs.io) diff --git a/docs/static/svg/bip38-full.svg b/docs/static/svg/bip38-full.svg new file mode 100644 index 0000000..c89039a --- /dev/null +++ b/docs/static/svg/bip38-full.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/static/svg/bip38.svg b/docs/static/svg/bip38.svg index c89039a..b1ab4e6 100644 --- a/docs/static/svg/bip38.svg +++ b/docs/static/svg/bip38.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From f06fc471d5f4bea9478d73794b3a23bdbd4ed717 Mon Sep 17 00:00:00 2001 From: axiom Date: Mon, 28 Oct 2024 12:23:40 +0300 Subject: [PATCH 38/56] Bump: bip38-desktop v0.1.0b4 --- desktop/info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/info.py b/desktop/info.py index e953aca..031a222 100644 --- a/desktop/info.py +++ b/desktop/info.py @@ -4,4 +4,4 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://opensource.org/license/mit -__version__: str = "v0.1.0b3" \ No newline at end of file +__version__: str = "v0.1.0b4" \ No newline at end of file From 519836addc50d5a4b82bb5ef43b60ff59c4b9e74 Mon Sep 17 00:00:00 2001 From: meherett Date: Mon, 28 Oct 2024 14:35:35 +0300 Subject: [PATCH 39/56] Add: BIP38 desktop application video --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 027d721..3e36adb 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ A Python library for the implementation of Bitcoin Improvement Proposal - 0038 / This library supports both [No EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-flag-is-not-used) and [EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-mode-is-used) modes and is compatible with over 150+ cryptocurrencies. It's specifically tailored for Pay-to-PubKey-Hash (P2PKH) address types. +[BIP38 Desktop Application](docs/static/videos/bip38.mp4) + For more info see the [Passphrase-protected private key - BIP38](https://en.bitcoin.it/wiki/BIP_0038) spec. ## Installation From 6828ad29d190dd881c43276b34837aed9b99ed24 Mon Sep 17 00:00:00 2001 From: meherett Date: Mon, 28 Oct 2024 14:55:34 +0300 Subject: [PATCH 40/56] Add: BIP38 desktop application gif --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3e36adb..455ab9e 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ A Python library for the implementation of Bitcoin Improvement Proposal - 0038 / This library supports both [No EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-flag-is-not-used) and [EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-mode-is-used) modes and is compatible with over 150+ cryptocurrencies. It's specifically tailored for Pay-to-PubKey-Hash (P2PKH) address types. -[BIP38 Desktop Application](docs/static/videos/bip38.mp4) +![BIP38 Desktop Application](docs/static/videos/bip38.gif) For more info see the [Passphrase-protected private key - BIP38](https://en.bitcoin.it/wiki/BIP_0038) spec. From 57d75d9640ada90683b319adc1d6c9ad5074acb5 Mon Sep 17 00:00:00 2001 From: meherett Date: Mon, 28 Oct 2024 15:09:15 +0300 Subject: [PATCH 41/56] Add: BIP38 desktop application videos --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 455ab9e..81464e7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Bitcoin Improvement Proposal - 0038 - + [![Build Status](https://img.shields.io/github/actions/workflow/status/meherett/python-bip38/build.yml)](https://github.com/meherett/python-bip38/actions/workflows/build.yml) [![PyPI Version](https://img.shields.io/pypi/v/bip38.svg?color=blue)](https://pypi.org/project/bip38) From 4d2c934a0cd772ea7d1b0d700a903a3d30e1056e Mon Sep 17 00:00:00 2001 From: meherett Date: Mon, 28 Oct 2024 17:11:02 +0300 Subject: [PATCH 42/56] Update: BIP38 desktop application videos --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 81464e7..1059c85 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Bitcoin Improvement Proposal - 0038 - + [![Build Status](https://img.shields.io/github/actions/workflow/status/meherett/python-bip38/build.yml)](https://github.com/meherett/python-bip38/actions/workflows/build.yml) [![PyPI Version](https://img.shields.io/pypi/v/bip38.svg?color=blue)](https://pypi.org/project/bip38) @@ -13,7 +13,7 @@ A Python library for the implementation of Bitcoin Improvement Proposal - 0038 / This library supports both [No EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-flag-is-not-used) and [EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-mode-is-used) modes and is compatible with over 150+ cryptocurrencies. It's specifically tailored for Pay-to-PubKey-Hash (P2PKH) address types. -![BIP38 Desktop Application](docs/static/videos/bip38.gif) +![Desktop Application](docs/static/videos/bip38.gif) For more info see the [Passphrase-protected private key - BIP38](https://en.bitcoin.it/wiki/BIP_0038) spec. From 1b947231937de3b8c7a93d9fa5c830a9ae392675 Mon Sep 17 00:00:00 2001 From: axiom Date: Mon, 28 Oct 2024 19:15:14 +0300 Subject: [PATCH 43/56] Update: removed generate, minimum height and padding --- desktop/core.py | 1 - desktop/main.py | 12 +++------ desktop/ui/bip38.ui | 53 +++++----------------------------------- desktop/ui/css/theme.css | 5 ++-- desktop/ui/ui_bip38.py | 22 +---------------- 5 files changed, 13 insertions(+), 80 deletions(-) diff --git a/desktop/core.py b/desktop/core.py index f567e29..20f5047 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -80,7 +80,6 @@ def initialize(self) -> None: 44 ) self.ui.bip38LogoHLayout.setContentsMargins(0, 0, 5, 0) - self.ui.outputQTextEdit.setMinimumSize(QSize(0, 200)) css_path = resolve_path("desktop/ui/css/theme.css") self.theme_watcher = QFileSystemWatcher([css_path]) diff --git a/desktop/main.py b/desktop/main.py index 12f8a11..8f38633 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -188,12 +188,6 @@ def __init_ui(self) -> None: self.ui.noECPrivateKeyConvertQPushButton.clicked.connect(self.noec_convert_private_key) self.ui.noECEncryptQPushButton.clicked.connect(self.noec_encrypt) - self.ui.noECPrivateKeyGenerateQPushButton.clicked.connect( - lambda: self.ui.noECPrivateKeyQLineEdit.setText( - os.urandom(32).hex() - ) - ) - self.ui.ecOwnerSaltGenerateQPushButton.clicked.connect( lambda: self.ui.ecOwnerSaltQLineEdit.setText( os.urandom(8).hex() @@ -233,9 +227,9 @@ def update_clear_button_position(self) -> None: window_width = self.app.width() window_height = self.app.height() - right_margin = 10 - bottom_margin = 5 - right_margin += 10 if self.ui.outputQTextEdit.verticalScrollBar().maximum() > 0 else 0 + right_margin = 15 + bottom_margin = 10 + right_margin += 5 if self.ui.outputQTextEdit.verticalScrollBar().maximum() > 0 else 0 self.clear_button.move(window_width - button_width - right_margin, window_height - button_height - bottom_margin) diff --git a/desktop/ui/bip38.ui b/desktop/ui/bip38.ui index e2f0b93..09dbfbb 100644 --- a/desktop/ui/bip38.ui +++ b/desktop/ui/bip38.ui @@ -525,53 +525,6 @@ - - - - Qt::LayoutDirection::LeftToRight - - - - 5 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - PointingHandCursor - - - Generate - - - - - - @@ -1855,6 +1808,12 @@ + + + 0 + 200 + + true diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index 8e5f6c4..7b3911f 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -158,7 +158,8 @@ QTextEdit { background-color: black; border-color: rgb(25, 30, 36); color: rgb(255, 255, 255); - padding: 5px; + padding: 15px 5px; + padding-top: 10px; selection-color: #DDD; selection-background-color: #65619c; } @@ -226,4 +227,4 @@ QMenu::separator { QMenu:disabled { color: rgba(255, 255, 255, 0.5); -} \ No newline at end of file +} diff --git a/desktop/ui/ui_bip38.py b/desktop/ui/ui_bip38.py index f08ecc9..ba94004 100644 --- a/desktop/ui/ui_bip38.py +++ b/desktop/ui/ui_bip38.py @@ -243,26 +243,6 @@ def setupUi(self, MainWindow): self.noECPrivateKeyAndWifTypeContainerHLayout_2.addWidget(self.noECPrivateKeyContainerQFrame) - self.noECPrivateKeyGenerateButtonContainerQFrame = QFrame(self.noECPrivateKeyAndWifTypeContainerQFrame) - self.noECPrivateKeyGenerateButtonContainerQFrame.setObjectName(u"noECPrivateKeyGenerateButtonContainerQFrame") - self.noECPrivateKeyGenerateButtonContainerQFrame.setLayoutDirection(Qt.LayoutDirection.LeftToRight) - self.noECPrivateKeyGenerateButtonHLayout = QVBoxLayout(self.noECPrivateKeyGenerateButtonContainerQFrame) - self.noECPrivateKeyGenerateButtonHLayout.setSpacing(5) - self.noECPrivateKeyGenerateButtonHLayout.setObjectName(u"noECPrivateKeyGenerateButtonHLayout") - self.noECPrivateKeyGenerateButtonHLayout.setContentsMargins(0, 0, 0, 0) - self.noECPrivateKeyGenerateButtonSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) - - self.noECPrivateKeyGenerateButtonHLayout.addItem(self.noECPrivateKeyGenerateButtonSpacer) - - self.noECPrivateKeyGenerateQPushButton = QPushButton(self.noECPrivateKeyGenerateButtonContainerQFrame) - self.noECPrivateKeyGenerateQPushButton.setObjectName(u"noECPrivateKeyGenerateQPushButton") - self.noECPrivateKeyGenerateQPushButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) - - self.noECPrivateKeyGenerateButtonHLayout.addWidget(self.noECPrivateKeyGenerateQPushButton) - - - self.noECPrivateKeyAndWifTypeContainerHLayout_2.addWidget(self.noECPrivateKeyGenerateButtonContainerQFrame) - self.noECWIFTypeContainerQFrame = QFrame(self.noECPrivateKeyAndWifTypeContainerQFrame) self.noECWIFTypeContainerQFrame.setObjectName(u"noECWIFTypeContainerQFrame") self.noECWIFTypeContainerQFrame.setMaximumSize(QSize(145, 16777215)) @@ -844,6 +824,7 @@ def setupUi(self, MainWindow): self.outputQTextEdit = QTextEdit(self.centralwidget) self.outputQTextEdit.setObjectName(u"outputQTextEdit") + self.outputQTextEdit.setMinimumSize(QSize(0, 200)) self.outputQTextEdit.setReadOnly(True) self.centeralWidgetLayout.addWidget(self.outputQTextEdit) @@ -868,7 +849,6 @@ def retranslateUi(self, MainWindow): self.modeQLabel.setText(QCoreApplication.translate("MainWindow", u"Mode", None)) self.modeQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) self.noECPrivateKeyQLabel.setText(QCoreApplication.translate("MainWindow", u"Private Key", None)) - self.noECPrivateKeyGenerateQPushButton.setText(QCoreApplication.translate("MainWindow", u"Generate", None)) self.noECWIFTypeQLabel.setText(QCoreApplication.translate("MainWindow", u"WIF Type", None)) self.noECWIFTypeQComboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"(Select)", None)) self.noECPrivateKeyConvertQPushButton.setText(QCoreApplication.translate("MainWindow", u"Convert", None)) From f31034fe67496cc8d8b6bf18a4a9798234d7107b Mon Sep 17 00:00:00 2001 From: meherett Date: Tue, 29 Oct 2024 19:15:55 +0300 Subject: [PATCH 44/56] Update: BIP38 logos --- docs/static/svg/bip38-full.svg | 2 +- docs/static/svg/bip38.svg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/static/svg/bip38-full.svg b/docs/static/svg/bip38-full.svg index c89039a..fed49cb 100644 --- a/docs/static/svg/bip38-full.svg +++ b/docs/static/svg/bip38-full.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/docs/static/svg/bip38.svg b/docs/static/svg/bip38.svg index b1ab4e6..7e9c7a5 100644 --- a/docs/static/svg/bip38.svg +++ b/docs/static/svg/bip38.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 3b738bfe857e470b08a509940cd4028a39df7679 Mon Sep 17 00:00:00 2001 From: axiom Date: Wed, 30 Oct 2024 14:14:15 +0300 Subject: [PATCH 45/56] Update: logo --- desktop/ui/images/icon/icon.ico | Bin 89071 -> 89118 bytes desktop/ui/images/svg/icon.svg | 1 - desktop/ui/images/svg/logo.svg | 2 +- 3 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 desktop/ui/images/svg/icon.svg diff --git a/desktop/ui/images/icon/icon.ico b/desktop/ui/images/icon/icon.ico index 9b665d66fc5868960e8c538300b59a206c9b9d9c..6470bed00b7097a7120b9a315560b1e2f5cbc170 100644 GIT binary patch literal 89118 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

CXS0d8!5rw%}Q+Jf#| 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 P5}3hsL!C2I?biPv<=-$h diff --git a/desktop/ui/images/svg/icon.svg b/desktop/ui/images/svg/icon.svg deleted file mode 100644 index 316414b..0000000 --- a/desktop/ui/images/svg/icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/desktop/ui/images/svg/logo.svg b/desktop/ui/images/svg/logo.svg index b1ab4e6..7e9c7a5 100644 --- a/desktop/ui/images/svg/logo.svg +++ b/desktop/ui/images/svg/logo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 6faacf9c3b2e3e754717d5d8e90c45b73fa1d625 Mon Sep 17 00:00:00 2001 From: axiom Date: Wed, 30 Oct 2024 16:13:21 +0300 Subject: [PATCH 46/56] Fix: typo --- desktop/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/main.py b/desktop/main.py index 8f38633..db54c26 100644 --- a/desktop/main.py +++ b/desktop/main.py @@ -497,7 +497,7 @@ def validate_input(self, input_key, text, validate_optional=False): input_data = self.inputs[input_key] qt_input = input_data["input"] - optional = input_data["optional"] if validate_optional else True # threat all fields as optional if validate_optional is true + optional = input_data["optional"] if validate_optional else True # Handle all fields as optional if validate_optional is true. min_length = input_data["min_length"] is_valid = len(text) >= min_length or (optional and len(text) == 0) From 52589ead75d439b16b8d8c3f685baaf755f433bf Mon Sep 17 00:00:00 2001 From: axiom Date: Thu, 31 Oct 2024 09:48:35 +0300 Subject: [PATCH 47/56] Add: desktop requirement --- requirements/desktop.txt | 2 ++ setup.py | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 requirements/desktop.txt diff --git a/requirements/desktop.txt b/requirements/desktop.txt new file mode 100644 index 0000000..706f9c8 --- /dev/null +++ b/requirements/desktop.txt @@ -0,0 +1,2 @@ +PySide6>=6.7.2,<7 +cx-Freeze==7.2.0 \ No newline at end of file diff --git a/setup.py b/setup.py index f1875fd..d83a261 100644 --- a/setup.py +++ b/setup.py @@ -50,7 +50,8 @@ def get_requirements(name: str) -> List[str]: include_package_data=True, extras_require=dict( docs=get_requirements(name="requirements/docs"), - tests=get_requirements(name="requirements/tests") + tests=get_requirements(name="requirements/tests"), + desktop=get_requirements(name="requirements/desktop") ), classifiers=[ "Development Status :: 5 - Production/Stable", From ce90a9ab6f6f0f2dbf33210ed82bb4cf75426d49 Mon Sep 17 00:00:00 2001 From: meherett Date: Thu, 31 Oct 2024 12:54:24 +0300 Subject: [PATCH 48/56] Update: BIP38 README.md templates --- README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1059c85..a54cdfd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ -# Bitcoin Improvement Proposal - 0038 +

+ BIP38
Bitcoin Improvement Proposal - 0038 +

- +
[![Build Status](https://img.shields.io/github/actions/workflow/status/meherett/python-bip38/build.yml)](https://github.com/meherett/python-bip38/actions/workflows/build.yml) [![PyPI Version](https://img.shields.io/pypi/v/bip38.svg?color=blue)](https://pypi.org/project/bip38) @@ -9,6 +11,8 @@ [![PyPI Python Version](https://img.shields.io/pypi/pyversions/bip38.svg)](https://pypi.org/project/bip38) [![Coverage Status](https://coveralls.io/repos/github/meherett/python-bip38/badge.svg?branch=master)](https://coveralls.io/github/meherett/python-bip38) +
+ A Python library for the implementation of Bitcoin Improvement Proposal - 0038 / (BIP38) protocol. This library supports both [No EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-flag-is-not-used) and [EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-mode-is-used) modes and is compatible with over 150+ cryptocurrencies. It's specifically tailored for Pay-to-PubKey-Hash (P2PKH) address types. @@ -421,7 +425,7 @@ BIP38 Decrypted: { To get started, just fork this repo, clone it locally, and run: ``` -pip install -e .[tests,docs] +pip install -e .[desktop,tests,docs] ``` ## Testing @@ -454,9 +458,8 @@ This module supports more than 150+ cryptocurrencies, including the following: Buy me a coffee if You found this tool helpful: -- **Bitcoin** - 12uaGVdX1t86FXLQ4yYPrRQDCK7xGGu82r -- **Ethereum / Tether** - 0xCCAad7A87fd81553d0F93F743Fb4Fc6B213b228B -- **Bitcoin / Ethereum / Tether** - With Unstoppable [hd.wallet](https://ud.me/hd.wallet) +- **Bitcoin** - 16c7ajUwHEMaafrceuYSrd35SDjmfVdjoS +- **Ethereum / ERC20** - 0xD3cbCB0B6F82A03C715D665b72dC44CEf54e6D9B Thank you very much for your support. From 2e898d742a418315013b9a9190e0e416bf5f34e9 Mon Sep 17 00:00:00 2001 From: axiom Date: Thu, 31 Oct 2024 13:10:12 +0300 Subject: [PATCH 49/56] Update: requirement and docs --- docs/index.rst | 2 +- requirements/desktop.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index b7d66be..280ee99 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -455,7 +455,7 @@ We welcome pull requests. To get started, just fork this `github repository =6.7.2,<7 +PySide6==6.7.2 cx-Freeze==7.2.0 \ No newline at end of file From f65068c20985b13d5f45c49a236efa7dab83b565 Mon Sep 17 00:00:00 2001 From: axiom Date: Thu, 31 Oct 2024 14:54:11 +0300 Subject: [PATCH 50/56] Bump: bip38-desktop v0.1.0 --- desktop/info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/info.py b/desktop/info.py index 031a222..1b3339d 100644 --- a/desktop/info.py +++ b/desktop/info.py @@ -4,4 +4,4 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://opensource.org/license/mit -__version__: str = "v0.1.0b4" \ No newline at end of file +__version__: str = "v0.1.0" \ No newline at end of file From 4280875d86718354635960228b836005409b6345 Mon Sep 17 00:00:00 2001 From: axiom Date: Thu, 31 Oct 2024 15:25:42 +0300 Subject: [PATCH 51/56] Update: removed combobox shadow --- desktop/core.py | 4 ++++ launch.py | 1 + 2 files changed, 5 insertions(+) diff --git a/desktop/core.py b/desktop/core.py index 20f5047..a79ab2f 100644 --- a/desktop/core.py +++ b/desktop/core.py @@ -93,6 +93,10 @@ def initialize(self) -> None: } self.ui.outputQTextEdit.setPlaceholderText(json.dumps(info, indent=4)) + # remove combo box shadow + for qComboBox in self.findChildren(QComboBox): + qComboBox.findChild(QFrame).setWindowFlags(Qt.Popup | Qt.NoDropShadowWindowHint) + def load_stylesheet(self, path: str) -> None: """ Load and apply a stylesheet from the specified path. diff --git a/launch.py b/launch.py index 31d69bb..6b3a25e 100644 --- a/launch.py +++ b/launch.py @@ -20,6 +20,7 @@ def main() -> None: palette.setColor(QPalette.Active, QPalette.Text, QColor(255, 255, 255)) palette.setColor(QPalette.Disabled, QPalette.Text, QColor(170, 170, 170)) qapp.setPalette(palette) + qapp.setStyle("Windows") main_application: BIP38Application = BIP38Application() main_application.app.show() From ed82ea3e31333e2b90b1f6737eb804bc13244216 Mon Sep 17 00:00:00 2001 From: axiom Date: Thu, 31 Oct 2024 16:01:26 +0300 Subject: [PATCH 52/56] Update: README.md gif --- README.md | 2 +- docs/static/gif/bip38.gif | Bin 0 -> 884405 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/static/gif/bip38.gif diff --git a/README.md b/README.md index a54cdfd..c9cc75b 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ A Python library for the implementation of Bitcoin Improvement Proposal - 0038 / This library supports both [No EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-flag-is-not-used) and [EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-mode-is-used) modes and is compatible with over 150+ cryptocurrencies. It's specifically tailored for Pay-to-PubKey-Hash (P2PKH) address types. -![Desktop Application](docs/static/videos/bip38.gif) +![Desktop Application](docs/static/gif/bip38.gif) For more info see the [Passphrase-protected private key - BIP38](https://en.bitcoin.it/wiki/BIP_0038) spec. diff --git a/docs/static/gif/bip38.gif b/docs/static/gif/bip38.gif new file mode 100644 index 0000000000000000000000000000000000000000..2950b15daae0fe73136eeb51aa7ad70a7b8a2785 GIT binary patch literal 884405 zcmeF2^M%z=I#=>Yy`5C9kn1OR~m5D>r# z1R#L_GY}960Rp*!KyeTV4g$-90YEUP3YbfnLqLsFP!|dSLIHgLJ@Z1qybvK?xBwpj z0E3CZ0RT8s7LG(A000D>AAuA{$eJPHx=4g55+TVC0Pu4I`Tui}BK$~k0i?PBzq}v- zAcznb6p#=UF%uNm6O_>v5|k1~iirRKA_#5~QDqTH4N(NYsECZHg0raZDKSxbaR5ME zOjcY>PF%`N0xlpSE-xXWBB5k03FDNMP>_^VlHvqO!J$$jB2rSiQqn5Y5-QS?veJ?Y z(o#w?l1ehtin0h0N=j7@0FZ~n6~tu}l+6^yMU`PdWihz2gq*Unj*6s+ing1Ixxd=6 z6Pn^;ni2>t9-y|OoVHEmF+onWo|TRSSWgsgAPP2+=P@{@WuSk?z{J(i=B%-_gfTwK z#LU)0iqFFHBF3MHRTjjmDq*qFmX>EMtzE4gFI$@!+L|cZX^1*FCpcLhcQ%lBIT?EL zOg!E*+chlxl%D*llkVQUJ*LzT7GDp&U2^Moedq0#(X#aDyHDPiSKO_9@Phi}Wp!>sb?1kBb+rv$ zV~zLkH&IfWn9D7#9gl8bdo=c$#+ZCU&1viEecCtF-B9@K)%LT|g`UZuy^m{|bY|b= zdLR4O;OOYkqmq%X`d1r=ujl`a(I35eKf!w0&6?jH|8X?=>Ce!SUad=Ks+6A10aqbN&yK z|AXZJS4f~o05_{ODx7NPA zrRvt~_p-I_)opa}NV)x!`qy`j<2UDCK52MUg(34uJG3>vt+BhMerBYt>0JZ9#-YOD zY4iL0UQZ(DN1ooFdKA!?BkkDUGV>(-UGte&?GHY5#4e9iICeaof0q1XbN*GwqmM5L zU|t!gPTFE$mY~Mj(ay)qLlgzaN~f;YPp?Y#&M%C1Jz0B0wak@q?rz(7*XVZt?Cb8Q zpQmWSuPU9NwSW208UK0V^|OwzAL(RXS(l#9Z_C5CH2lYUx_+#&Y88-lK;a2mZD<@XSiUiU2doQ~BXaO0gK%JhiGWO@m{J@Gq~ygW%5#PXWq@wdiCB)p zSR5I6F&V_Is2R@AQdKlY6)1{KuycTWj zYim&I5p`K!q4(<^oh7NQ-kT}es4I^Q8VIetK*|Xt<>R^)Dl<|)tMEMbiEO}T%b0D@ z(gga$+g)crsAd%jOtdr;A{_1)tY&mCH!|<72Ulv~G)3z6HcJ;D@%=Po4a<}9U$}t} zqbL<8CHi*?pwU|``3=X-0{b{V9kyoVGoiQ+c7eLk9dp6?Z`dR4wzh(??y?7Ua0{ol z)4aLH@ee<6UZqTwk6-y-S6E_^c;8ttB#g{uX0BU%^0L!RAG2_)5sS!iXrJ>X9`Q8| zU;kJ^d8x$dvN57{?6+RGA+Cb*8l3X_(%2(TjrhtF2Un0Q#KA9u<0bLAi+z!~5Abu& zj$aHmZuqBOI_>Q^+xC!$c(rlE_w3kHR`~L^@rRi1=wo#)KmLl%2hB!D^Q8FqbbRyb zLhoS4ZQ<4T)P_~RWK|t+>b|Qjm4{xP`SJ3QKqw?^Lbsj;gk>%ci627Gse7@Zg2%Jj zP_@q3<$Fy*5?JOGXrmf&9mV#?`ms>I)bOc?_hsH+D@6T!IgItQ#P0v;s2efp=Rmcb z-B%RD5j(kw{17ULLmn%j1|=3ae(+G7)`GEOEqSCEeC{2%RgX7Vjn6FTk;Cw@jkorx z3M(IvFr|Ip>(Dk=No)jpt(mxUG60n)vnlu~jCl-=6>QY>iaW({vAB>u)$=-i9^RRE{@SEqEsXDi=LPEr#c#Lu3y2 zxdve)kF7O%OCS|Lk8#(dlZ0xk1T8!)q~6;R9dA`z8mcMU#J$Nm&sVLaR)%So8;|p; z{`7fN`M5e9U+`Xj;&y8|3fy(k_1P0e-gGEV_1}0})ZOtq34=kR{dRsT<5UIC6RE9p z!#_z%nd0f?ycr!^I6dk>Fs2is33Qw+1`Eq!0foZ};BSX?u0qVw8@Lq;WZ#HI#_qg< z2+MJEyvD-{k!h$yK`=*7!*dMsjiM9wS_TMY8{|rm1$%y#YSOmKbvJGQ&`D?b! ziq62@qLR92&-3_TG&z+yKo#SUDo|{I<5Ah^k|WM`u)us2fBot>wErEC=Wxq~z}YE9 zHmXU0qH28tpC)1VI({R~aj8>+ST;tWs?!0StG`e8bFMeSgzX@zj((*J9+}&_Yh0@8 zC#jR{l(*?4roRY$m)Dnj|FF4EOfGV0_A_O^4?jA-0L(+h5|Hm{w&ocAGzqbL5{Jo| zT5Xt|xb@R7_USevIrzY9)5}cM>JXtikmHX5h$#=ZMHQmSLX9ZlPy4agejXHrdR4>U zu!l^{1369?1RdZz?I`{ zp!oMJTWwAW&XD!KUeU=RLw){ypzQJypN8rai#>kWF|TUOt3G?OF*Q4G+ER)dPCT{{ zcq2G(5uzcMVTx;6KCKx1Hjne0iIj7AU=;SD);d6P~(=KFi2Jp@PJ> zv-D4_zvbz$q4Jk=>R31teYhK$k`W&>uWiKTWXuMN|AE?S496y2&$5JtPzV}3@Sy7i zGCcdEwduHa&{cM@L>Q_Mel74E|JS~6k>L!UkVRO;@)CSFcF3YAFkOC&E*8F;dE)Rb z%(Rgp^pV143I~FmTO_3G!W$bNHVH~SxA^s2l~Ytk3lZLe-F<KBu^ZihV*n*~f`30DuaC|EQ~E9g3O84-df!pZ}854LM$I*rLZEW*`P76|r{ zhFHb$hOlf>t*)H>2KopHs2oE4LUa3|Iryod-6a2YHgwQ{xT}(QfQDU1LR5A@3#^pZ zA>JT7SOCCzOC{!zhFAim+*3w;kL3wN0Vk-z$rw&~0C)wHveyAWkKyDH0;bUk2XyX` zSOqyc&rFH`KMVqA19GBVnyp9ps<03D+uc9GDlgs5NmfU{hQ+(U@p|5f}-T!YAnH5QK#+tXN?od1jD6OfeG;9r-V zV~po|MMo@S$mvPR*-1&xjsE|Th}X!J4P=Z5t^wSj}YFNZIrX<7w{`@8zK2PKHL_$~)p}{F=*Bas-nrnyzy)EWuAKuG#^2~keR^B)nSS|*7}s5A}C zb><*%0?LP9T0fWBY`ha|q?wm<|%a@VzQ6!i9q~Xcw$) z5D@_!c66W<`jXBREQF5t?iBT%hJIqhGq|$HC~!S4SOnne3Oi79{kj7IY_^lJ+m4u` zK%pL)K}G~za{Pq^he>5np-EYhcUehFS!r3Bd_Z)<&sYJSgvn$CjmqH@i!(*>ZUYeS zFr4?o5ueb>0W{t{Dx41B<+n$?nF9H*Ay$!Gad_VCoop^83w|^-d?@h&m)ovo?j9Qc zAeQqs8`hJZ{BRw~u}#b1 zkLCTux^g`><2xNL91$&(g6Khk$>`hju{>Jz>$2Ir*Ep%3JDwfj1XnDGM=bOnl_L=Y z-${o4wS%%t{Qm-YgIPD8QDPooxKu)-cc&1y0DjU`J!_Mc^&Kt=3eUzMuj5RSo)>un zRh&fS@MubPt@Ct65bZeS&Sx4v7sS^duAiBf>@8ULe2PF z;8ZGi6^pxs+A`AJQo?Rw&9;pHX?Z8{U?TOw7!UUa8b}(cEWr;awq~+8#dry zX?Ly!Uu65h*Q&U|^1AI0?wg@_+INznz3dgrjzDvp&V z=l;5Rc?KmxJ3p_MoYp{_NJ(0Ws9bNVEHpyAqj2s-qz;Sm?NKWKcxx!ofi*^?KY+Y` zDgyi`Rq1ZkuHdo4qhZ7p(2cQj3V!=3?>u|*RMj#3a`Y{NPw?QPJLFUM&Tam5~6Cf!h z*v+WE@uxD?p(URGwwY=C5&-_g@bXwk^8#kHXipdH*}0#kN?> zqRra%=psl808YhlmlC+|QhLj1y;~o8w-0)EBwuVl<1WK+$LxTl>A)C$ewrbaK~1F? zbLbVKtY}&9yucSRe21)u{$|k0_1w?&`*lArJ@w&?qw?3j+)@Fy(zAA0FmiFQ}-cJkJ_iZ)Aby?muQJYz*rJ0D81_h}f?rMuvLZv2i_Z)`nO&iMbePnhl`Ha!#=n91 zPyX@Bc_Nz#PvzF15$C?JlJIr9Qgohiqp&p^4E-tu#@7zR$2|a z0aU&^6sFPi4;3WaeiKWJaA`+O`x1Ecb$lLoV4ov4N?!WxfXq_icXr^~>rYJ7$WNw7 zH}KIX>~E(|wO(Z(SA!xF)FuuB&Q(Z~1Dv=L3Aew|IlqN0&xgRa z$onAy&qpcGFHIvxXdFuQ*l*SvSvLQn!M*nCBfyyjkYWG4{K7woA7`5Y&~&HAKdi_~ zaLrLD4EHZnb(f}rCJzFu)(|06`0;l@<5k9C+HsXw+DGqdUf&8$K9aBQV%pr zBx0R);j>AeRukek9fm8(+c3PmyTdb>-ml<=_=*b9@umLG#=f2eo-2WCB^PvyIHx2E znhR&_?ZEdb{#6~-Ewi`hN)cU@5NY{@iyQC{Q}}(d!oQdBAEweEUJ@b zeH%e39f#|J8oKiSa14MiDLjstNT8p}vSGvzBKBD@UwpqA1SB0W9woZuue37b-5dkqrg zi>yN1v#ne{7uT0gK1JrYr*gU$VBKN_Jt{AMpikL#_57N?jk$8Vw9Y`0Iv6)UVmk^v z@=DQDPGnEr_Z_TBjG2}xi+yP5#=pbiqjh<=h2z1}Yxlqz>s3+#t4V=Yw=>Q8GT>aE z8A^c7r?`&z9J?V;E3E85Txtfj&gCw*bE*v#0c>K@Ft=$7AD&eDv+<|wkr$GPgI>F7D^qDj&8UjsX5rFAhvUL3g0>#pHf6~} zf!5b$vIk_YPkO&pfMHP8xdG!FVTFpF0ZP)>1ImJO1aXo?bCs$zT?e&>+ExdRNBz2v zS{*Cn3STA24dX>F53~90n67_1-7kG&gPJ=D0Da z@PKTQ7q?dF*+L6SyKxGI6G@ur;*{7T$o18W*s!WaQdY&omEp#$^VJzq`Ovm(dCGEG zp5f+t4W$IzTziWU*{C!fbY}ySLH zYGkh~DjhYKHmE0n6U^5~f7(!f`rZfJCob~-c|rS?WLI1+)GGpMyqKlu!Xa56*H9VM z`nKU{OrDelfSq6AUb~aD6_N1*)qM~X@`Ow87{~6!t*{FFwo-=ju4in0@72&Jwp9^u zEGTo^G?^i}$D|7(@6J_bb$VXfRu?Cpn^SAzrbKKqRC94E?8VhzuqV8n7HEdM`@z?t zqib%~S>YbveA2-!OF*82SVeiOfOLxm9hlGPedz?M2PpxS8?1DmQ@RupHCo-BWz~OV z_D%v~vmTh!Zg<{yPnGLf3p?kcW{A?##VIi!=FQBk5GnN{QG6OsD79=!d@tNqt#(qrVR7%7+uMA%H~73BfYYJcbvN zN|g;(LrgB)Y-m1FejU3i=1Xz8&PuvJh~zPFZ1eb>whSL31dDB!I#(3p!3)rBiEJ9y z;Lx>vSy4s$7du_k_+9P^$R^CUhD&=8cq5U15Bl_!hs0E=(zuW|$A+By<$65wt`!FK zqnk@56wM`6y^MU4hk+Oeyb>9#!6b5rLRP5-SIry20vB1bq#a~Wc$Vefk@0{8Cc#7t z#bv$gWr?2SSJZF{RNbRwo(kCE6^X<7YeAKHy3u)YJlVXhc3j8tkL?QfFBBg^!Z94C zc$@d1AXnRL$97m5qK6>o$VdjyTtc4VZneZ7J_Po?R@=)f5dQ}%+cRvGkGZ15?Y2`e z4DCKu(q4pC2`9-M$DTO#=}o;6Ot{JE{Rt2C41KBOVzWIR_bW~{D8=DoiwPZ=3(``i zH3tRF@xYS&ka9eM&~?*&Mot=9K~a;`W*op3JX){24$0ZHqFY{{`yy3I19^?t-KcK0 z%iJjxbvi`zC9l+o+tZl5m4)!aL7gHjjVam|RMQ^R$BXsyJQ8LQIeKwomU+K#KOhYK5(ejJU1E$7Vk&fwsW7mqX^Wlhz z{~FHn`{}0RX=SEx;R^?N#l03C$?N;eVb^(te!Cn+6%>?+44%x;{Tj8yc_)TBVlWU< z^0YkLx)aOc!g*4X>~nW!B3QzHaE9vFsO zM19T}?7c^Xy%%8661FPbQUKtt zSMA(23>e{wDY%#s3J#*$i=R(koovnJJSt8Hi`>t>n2e$JKCOt7E@Y9m& z1`yEfr$EeVgAM7&$Aw8KqGQN`;a_A`+A0zLZ@Sr_FGR&~v6#(YoW;29M~2jYDKMif za!k^0Zn{%56WDo5{sh}7{dqp!SQO`engQ)u+_cK-D`a3JqgGgqgRzm}whquYF54O>EF{Bik+A2I zdFh`Ec4LiQSs+Fh;S8$cZ=T!j&A|+{JOAY>EeZOw$Yi;N;GmqVgopjZ8BdL?jy)V9BA&0>J}F@>t#{ zjhso1`3aw~S;K<2mbs#6Je>+vH_W<% zra?yTRz~Hmj$N&P_<@4y9E04da?>>WKa8vqH+5dq{+qF^jKfE7**mm=zR=Za&9@J-aY1S0rx?!_x= z27YzQYBqPn2Lk0fx>?c}9f|n1>;crHA|GOQI1HJbOEXjP<_h;JOwU4H=4D!g+_C^>iFQqkR3 z@BW9oBahMqDs!MP3h*>ve%fz<%uNyRiT(kx64n9Fg&za%R(3LKHE>YwKH$}JC*$6} zG?!#6&0GD92_c7FT}L5=e=ToS9`xO-QX+O(IWQ-4$C^)EY?vPgquJlD9q%3 zX$$o>ybwMP=-#(x*qtDljt~{|$JK4V0$?ACMwvvZtWq1Y`S7gzz-b6}uB~(+OXQ6C zP$tD?sXVLeFsA@AG@<|UR{yi2TIhmM-Vdwc!Yym>p5hVxET-C+Qbff*2AO3nI?fUU z{4I!|5c5^EzsmwlSPg~v<-OB)z7dX(R3A*g&z-kx+Y5P%oOgW8mlw#$_4e!BEYE7Z z!n&+D$iHLwL38l*#LL7s?uSCI{O4?Q8B{nP$oI!p_RCwDiovoOJW6<+bqgW)_bp0# zT*i9%oQWN>v{fD4<6K?k_;%c79pb$-G1h+kQY!t8EoY-Vddd&^^_=orZe7( zY;8?OXF+93C#>F2*qn3MRJCi+cV_K4>iiXQ7zP_*-n)Cece8$Pt_pG3dB#)}c2I?Q zM05W2_W8Y`w#BOa=%~1}aSk8B7LSPZD_Y_-Vwl5y+XVp3XpXCshavNdyC7 z@NkkfwTcOW{HrF#{1nnq@NkF)^W%wRs*8G^?kVXhYZj2-i@0x0OsP06P&yS|3&PMK z26a`|fVBNSYD)T$a8{$`r&9-U@0uMaGcHYMrcY-TPiNP89a(E?NwOekzZ5ySLgcd$ zEEF*s_AczNCwv{`us#{{-pe5woKj)qS^FeK@xkpF|}`b)D7>9dW+vrTogD%nu6SWmq8jMHz@`JV;RUm!2~AP)PJ z!qBNAkJ*!p;1$(zb>|N*)t={Jd_S{Y;8|J1jY5v9!bUV+M)=DT_c1geji%+6bY{BQ zdamDNZs6S9;3dER`eQABg$!O7xx|vA6^ROLPbcvYtrosI#oqYpG%SJGodXOV_?hA zshhCkc-YMAr@F1hQ@5-?98`O(*daTFg)g3gbj^>Q%N-N+BK-#X%=DP$h-aQ=OO82*8AF@XM~}{hX#v+Hj6@@i^3w0M8Z8?bf%Q3 zAoX<;ngF>oF64lR060H*)t!AZ@6*Zw60Zkoia{KyX?N~HPIOY+o$# z7-|`8xcu?bGG649tMaE)h6^HuVCRiAlWoEPRmd7Mqq?vxGbVH*alxtd%;}&>qxG4X zGi>X`r9_yyQ|bJt@(`_uA(elhS&0Ch6F=U`@jrIi&8>blvVHaZU}(^#K;+=K$yuUw zbrG&p$a^(#L&-bk@3OH-2qn(fN*N>^u)-zN!<+~THuTpz4t(oJ!cx_A&amzN@wjA6 zhARiMU$2sF*3&%K(_{Uskub_qM-se%(ooT+R>>^@{ms^L2MG=HnRfSDm}mQP3>$A#;T$&+%^0P6OG$m-B?{E4m8Fv8+WAEcleXOiDrHiyZuf4O-z&W zjZ=q2frf9=YjIVTTO+H|nS+q5mf{_DpHu7t++Z{L!CV2pOR|9vw{DiXm1Un+&J46m8hf2}Gol2_*OQcuftSjmngGb3MY1TS_zs(B!aj9TD@}QSIxh}v9q{gK zacG7X-^>1OOQXcy5|9jjmk~>pHBJmRBApA{Yq_=;*|B$iXz!~b=$t4*oVpjq^=r@& zv=9fBdvQ^iCMG!;=wy7_@uQy;*JUqdtaSYB7_MwUQD-`BK|D!mQ@hV0+qG4 zGI{d^X+Wd(NnA4V*j;e}DEMfMQ@H;5w+o10xtUwCUiLex33;b~>?K8tsOS8wJMIn zb))U{K}Y66XHwkvYroq*#&@0gErp4)3rq+r_KvSmJ2e0~zT>@|}=8oU>>OD6t}CLIHS_zIzEx7CiM7X@T)JRUmeyb#kK zRwHEmb#f{;=ECLKp}%uee~;KMzx!kN^gdpVJ@IWmJ0-4S!Q6|8wwspPPI~t9x5CN8 zgnzqp|7NfN(m_pDEkf8~AN1w*0PevhTlWC{{nmIQ(TJMnbs_Yf{*teY4^1?&k3wXh zzC3Nq*U@l&XZ!ELo1=eRP*o6@fM)m(ikZeEsvEVwBiElLpmM6kOD8i|NW$pi%6^~x zFh$97d&Gk zTiLnF;Kr#Xu$5J=pqAlmse+*TG_6b|-Bkw!nH5x=j5OC#JlWuUS7cuQ?h@pNk&X@) zbWfx|OE{3{C**QMi{z28_nFqBxbHeE!-Xn$onCq=AV%&O#rKweyO=XtVS7tE`j7tR zMDyu}L8$3~?PP1%JD2d^2HUT+-22la-4vQ z4BkSlPnyfI_-(}!qHBpRBLdVSi^T^Wcq{&aw%H5~?;5S*1MTNOXD@%vsH)DofSY}& zL3xJvyBysCdEmQ)WjDWy=_VC8M#Mb(^7B@{3ibU)Lw%0JCWU1mHrFh_zIm$UjGWi~ z2X3Fb&p$d!P+J4F_U*MT-1U|_;COOcJu58ct*3tUQ&6y(D;+9Wi+&-0yk)$nu!7gR zn+w4oJ1#fi81vry{BwgTfius?YkUqQIp`mFoMZcVCC^ZpTn+PUtwjjxcNV5o_2U#az*BWs@v^zGHK^0G?ZRc?s(tPleJ9?QmI9Q$FddL1ByC- zOO3w}ma|}WyC*pZ&Pf?W7c!eg|L$$Vuf9(B()GFb^7D=)p~T6$^Y^uwV8nxNT)%9b z>Dpx@;|Ips3(ib#)Qk?JGcJL8&_Mf@|+4FVQN`c)%N|#Jj-mb{W5kmub$g7i^-a`Y1focB>5>S zNW5ztd|k?KcwbTmSQlV^-e8g2Cj6dIxg9;tK!u><=e8Af~4ADVXi&v zBd>?9xxg(a!Nyo?b*R<#$f)Jdk!quX0#B^}1dT#&aSqkEVs9rD&C9%aKcs5@8c!4o z$xC$;G+GBh=M%suYg>owC=Tf}f^*6$;u<9rtc+$Kh~mQ*wX#c^mLH!n(bQYt~YKNfG6u_a7?4k0Lp!o9Y5vO+` zOoQ7L&__;nDP}ciS+1e^E&=*@op)6&(WW_(c?!rNfI@)3dLbn;qc(nc&^SOYLjxY2 zuj!!~s&{vw^kG50D{Vusd6D}V)fwf;8ZeJ~%c<@34dsaHHw%62Q)}wfl!x_fq1yJA zy&O=nOSL>4Q4^MbjLw?tb2e+h_2L2+9ThO1t=mbHyMgJDTcdBh-*n$R9arFD>mDwE zePTskiQ{UW&a~JgF2tEH@!6D;kBzwIX_`+oxC}F&ma?_}+j8=4(z`2IiH10bC`jEv zl3|2f8yDDaoqS7C8A;ck7 zvY-A=Z0?@SAv^Qn_Ytz7r&>4+Tz$X zfw0pV+O_xmDI8`|zzAn|vdj&DI$sGYL#rPpvPMa=zDxDLq^3Cpt_x#>E~UmdBel|kjhRJmCZj(XZC}0W4b8ODbq4*Z0l0BF^Fe!pR9UlT!-%1ippF7 zx6wIcp)^{slx%f^*;(aVm(LENZjq$BRLO#T7gxsY7)#MqkYFBQ$i!5KFI<&eov(IL zGyeJK!}0I9&M4T`=^F7QXsoM7b-rFhS@QYH)$X~Tw5SlUurGxv*vjUx>kB}B!VhWm z5Rz=>NUVv}XZOVC3p}&r#%;yo`4Xz(DFJtQ{n!c5j*dTvgt!M!+&sahS{s}GM?#MG zG)A4)Uw=>Lx3*xAo!ty(iX=8>Wx_!Uqgc`5w;SQS z5-5-=3MYBEfQj<5OrACy?bC;nL}M9G=>ViV*=WL2R|=FnQ#s@3C?oD8B*wUbeJzTW zl6KC$=7HZd20CN0d=#dMRD~G(OhMq=E!QKU1OcS5g%wqt$Mn01qCg60ki?+`&aY(Z zQnjcJ&$L|s3p6A9ai4h>StXAlCIuAqW6u6&xXJ|xLZ+`f=iX&_8?u-Zey@=F3>Y6# zI=N3jmV~goDVpLctL`Nz1+2SjX~MQVc1V<<15e*@9^zM5x@~pqrXolnIX0=`rnY?Tay2W*J8Gpz;i1h47vnSU9u9{8XHI zp__5~&#OZnu8fA2Ra5|nZ~~JU_43im;I8=Kbz^%jbNhs5dctvTB!J{sRHKgz<4RDu zln97z1Q>f~n~|mto_^pT_SeoMik429mXi3>7+P1zYX9YX!*Tu)dysdZjpt zi6f$+RG(%)c;-^2L_a_wk9=$tWHupgNMMTSufr%LBZ!3AC`ojeVcbbJZ#->mCjzvW z3hPu>hl16llqmC+?I@<^97x@ciWipjd}vkdtwiOFOiNqDmcQyMFEwt%85DuhEkr>m zQL=Idh6f_?TY9ra=aOSubxuUmEBNi*AN!Ckdngldk ztTW|WfS+e@VplB9OL3tjA9V`&*c|qu#fpX$INL_9$lBFrkEGnj5a>Ko)frzsN2T+O z5+%1ZUhHYS=p}SSRKfP|OZL3v+Xpb<{1?yFcqwK}_5k~BTKXL{%{X1%1DGhgEh)^_ zU`&e)hWTwC@71HA!SGKV!I`(Li8bO(occtJv0}qaBNpylEAvG(mV1wJtO$&8AS$a` ziX%a~J6pmb3{A?4w4Iu6NS|~+RyEwxJgX1F(`V)fmh23Y(7}qKnHtk1x7PcZG-5@} zicB)`%WGvj)3nU&K8>h8L!nh9A6DAyzknC5o2R5P43dvx2)OrI0Qv+Hh&S7Dg^`vP z0c4d}pjr{wC>F;z!7%Bu)K3Np_khg&EK%jasuZ&J?h#Q;GxS&<_M}XO#Fpf-MTrP2 ztZ?ENRZO)|p15FVgc~RGVYOA&QUP`K;kFC3S|Y7lhLIgeR-0fLQ!O>x?#xQ}$?*|C zUIl9=69sp178uLQoB0h()iQ84|4vz+j?{InC4O3Sdm3G`$WlL?X`EoG2JqlRg3RVf z8b#!X*T6=0I1yuFOR=Rkn<$o6qL%egn@}mX6|6qd_v9i&FByEiu|%*IWUk*Qm$fRY zXlaobDnhtpWDG8?hzZem73IUZKCBlMXKW7QKA#nHnEw3yAqQ^Y>bCiug!H8q==I7FP=-gf7JEZ#pO9Yt<=kNtrX^aVA7?0J*{sb#yZ33( znI?Q>-UR|I>J_qptUAPC*Au1Jb+lrEv{RPmqa-1x4PzEadZL`?JFf5=SpN_x48=n6 zU}G!X?T41yXer@NpP=YL!LE9(U6A?~R=n+=5GF*shbgn}V;Q@+eNE4}#^$SlqELd8 zaT`c@g=D%7=&yHu#^yE2q$mO)%BIX7q=jQkf{I8fpE(| z-*UqEq||2b9|!5Dfz@jN6AOZl;-*p~S(nXtxYsP0jHL}SX%`pN+(Q9m9Cu<9@HS9X z)AGNhT3YBLR12PBMPYK~z|(3bMy8giqS$MQaHncO_TigVk;iiSIi?h-Y2nHp4v zFza(}bF5>}2zLu$A;bXgD60B;=lAmw7#YA5F1oP0gV0my%dvi}uXDlV?gi;@FgfU5 z+9hN)*GqL*a~sC9fx8QGIQlQxE+` zVgiNKXBws*S&CaR#|@*^z4{0?K+!F_b{bgKt_Za@Cgn<;X4bn&=*rgsMeTmNpS);y zifl|^qCzZ<%t69@Oe0jELJ#i7L$3}zR>*wY82#T>>~}rn!@{#*70jLMcgR{37vpoM z1^5_RA>d;)qNW!ZoyX_~Fs%D4M%EGt3kN>I@x$%G0LO~&&1k$`U4wn$427WPg0 z5k_?a+@Xt$dN8S%M-Kdd6rJ^3({CGw2kW4_M=3~+ZrPZ0ck5^*bflzi)JCTWh&n<< z%8`<~0U{lW3W9z?P(e{aK@m}2-alYJ>^Pp!_I$4UI?ub-Qzs-_Hjv_9iP^qfPz|%)KrI^U+x6J~A zLuxU@BGJsg5v;U1USotQXh7y%AdxOK#VZ#lE`@3+`CKH($ZxQol(MA;SbLm0 zrec3wRpBH((C@#KPO3e&UAeWW``Je<8DCbvp&@E4JEkIH&wT%v5#x4+KVhc=X#jnP6&F&tcp?*Y{xKW=GHTjK%(I6Hbr2dm-oI^I=8$>6>Rc&)3U^n+7OuT$IG8Lo)|u z?`7%A45Pz`FPR-P<=w72TdRl7h3VenJ-K;N zd3w-`zU#+fZVxUnGx_wjwhMO7pOO8Xb|ytaQ~OgcepKGJE4b#_;ymQb+%Lh0i(7Y*=Vo+GIW;Q@#${=X z7*mn+&knxA@8nX+yjc@E(sb#3subdSE^=4DoUy9LS(H8bG$Rvw2@p^MG) zqau;VQw~qX61L}`N{~Tn6oIFQYbqRupkZO6^*C#rc5~YY!SC$%*F{2(h~KFqXLcdN zI0IfO1iEbOl!$u>{(GiwXYXY;4sxZvtYrCOAzbjSpqX%~G2L_^nIyTz9aYN2SBJ?s zysNc;JDzc>C^_z5AYA_^`w#Aq4!t!AdHe(spJ_4?AabZPm^!$`&cG3g@b;&H{195-V$qdRbw^8V4&o^3ZsStI6{{v;2nG;7a%noa)2@sOX^EFhf;-@z^H*Q z$xq-a#&hp)x$iV=)@hu2(V44c+;i?%@iUeW>}MM6<;0!JN#{aV7DXYXfyE zJ>ETh7IMy{#IO+mRcBR0%k^k?Tp|p_8NLWC34D?G^6#&u*E0W1-i|eadF^}n`%hB~ zO==VeNU(s7T0v)6n&Kl|j)o$ccd5`+s4ATrxHyS)HV11j+Cu|Mhxxt7h7^b9^VC*I zoX;9E8y$VwLh3dMJ@eE2%1~_~_R|>WO=E!u&YB%^hQCYo5a-z-glh7L(1HD|;7oMB zujmlZe?*Af0wz0ZQ(Cx+6Q~*94X)b#h;SpZkP?|7+7=3DCMPUXMnc6N)Uf#xSk<%V zA*!M40$H5H{G;en_&5gPJuDgJ%qq3RbUea{I%AgQ!Z1^FGW#!jmeZ7 zFn03Zbk_U1o4sicl<4jOTD@J%*5Am3Pnth9G=5pp7C2qtQ)tYt?s}HYUP?oov$TK5 zW_2;-cTx7!L*7X3xr`;0|68yE>&thYX6NB9_=xhV&DiEY3r zzu!)VKLamuM0ko^Td&j~S>s-EueRi@ryFWT6}{n^XFq=YY`7N1LS5l{XXZ!FbIbKb zNt$~|jM!&Ig~W*V>Oj>u{Uvf2nZma>QaSuqjaVe5LKyat^K$a>yzlIqhhW~ z04VgpU*Zr(S?w!Fdn&WQruHaC2TYEX%@@c-=~PW~5w9e3>GCDXAf6qK{9xJ!q{P!y zVPO>%BEG?aCk)XvgxMTNh8_G?>xKO|(}H{aC0?DBr_Zlt6zll&?=zZ=^c-D`6~7r; z+kp{JmmVcjx*!5 zeKp)n(D-s@q3$WsYFh`vRIc2eY6Wv#FOSrD0?l4ThwD=G;4YarlM{R@pa*W;aGpI6 z>pm`A>^eGr*{w8`7ZF?@e_ezXdpAu~<|NN?1x7@a&4DH(sYC%SR!RjC$S$#VhwCk7 zO|O(DNl@0m$>W9Y!1L*hW8|rPGD|R_GW56dnb__hw|1MgCQ_fYn>xUU)mF@&MpPgs zz}ZpPbT*{T73IS&snLr?%kNmrSzo*~#2FIXg-|D#**2B%<`?pMs*;B+Sd<#bQt8(& zC6=co8%JOVJkOMaWFNoV%e=J;96DBI4&!^y>BSrS)i-{5#(PzL>ELE~;I;S3GH4w1 z60I3%=cPQ)O-5AZJ%%7ZGhHg|>s6+GB?H_MZmm2I3}w3YgmAE%>K!q4xozUW4E$r+ zl{?i8kkeO>+{fK9w8m{eYjH>N?pWgmqsD5#Jcq!WPk63iYY}E(N2NRQn&py^1_2TjNt?R7@ zB!@L|y5C^NK=kjH!=1zz9c&+c=6`?6 z`Qa5fnqtha#YV|Q0ChkO9A1ToFQq4ck8nIr&IumqRA>1;)?dIKR(;g<%kk{g@a;nb z?nkZ$7gEN$AN_d!>)$V?#6KGGn!*Et#|{Cr={@=^!+T|kukbs$5okYc9@c+9v+i6= z75?u)t9-5}X5) ziAVejFs_ThHmN^U4E#C~9x(!Qq5;+IWy`RaFA;poQEixDco_p;&Oj#H>3MS=`w>wY zfsk4iuqOjDhvitLv%T42Tf?xwC$jGYR5Z{vutt^&%u%a~LLrf3b`*Zh$q8@cWSfUq z&#@|PZ+C7(3_yG7`ERvQ-z-~a4hvDLs^BS3h330JR|41>zqIUE>&a#aw`}w0ZtJ19v)t;cLXT6AdB1^z zXkc0!xG_-p_e@#A(fe(#jM(C72#Sgh#6s*UL*22Qq0Ltl<%1yLbdi>G=DVUOs$&x zSk0LSQ3}0|<_D?J=5~c(b3_15e)_xOlOb@3qaw!^bRtSIik7&@o!lI#csojYS4|~n zU1?2C@p!*D!kgwf7lnbVgS}UoN8eRmd`PUaS0YQPK8(6UBSF)jfIA&kRh?8Pr{QeT zO6t!god}?Sc8rC(j1NH3DEj?Xf=2HUxY11QqodmIV#S5;iH<+C9zKJ`lQeHRDo3h^ z<)Sg4+cmPBPTTRQT~jyDWhf;$DJVYI-hZ}Gs-~dGqg(Prk1y)X%?|B09&_sm{Ty|J zak^grbKj95U1o{7_bSFv{Y-^ZasV27m2h^eEsfI-)g=Lv^DseUfb$w0SMeq9}k)i`GobIzjkoXy_3 zV+RcrmlzX|P7|L!6JL#!7N@cNg2D-39jRd!8)KHhYkIoVRA0k9BgQ?4ar566@m8<>IsN;;ZQz z80&hm%Qa%(HB!?pHr6en%PnQ!jjZXO5$m4S<({|iUZm-9J=UY5%j4F*N42Ks@!eR@ z`(2(b`<`u@UR|+XydVbPm;Mk!;|KqP&Ey9C3#oxf@t&LXD={j1jspc z@DUPxcGcuNADb8B{9h!2rVK@h86XZLHVEUOYaS1*00#b^yQ6ni}JL*N%`1 zSQ>i&9cbpBXRZpkO3D9mSAfk=w^=jc;(ohbu7g<@q;Vfs-#TeB2L6)A05oc<&NH-=AK<^C-Z&2`>ES z-&{9u41^rG5Pp30Z<6))LKC26paECRZmj>C>pTtsVX>D7SS%3r9DHnx_DgwrK~>9d z7JA-HOGE!9#_T1nE-q5&imQ{Bum``-aV%(0E2ug$KsE0Co9;cWpWeIseqGak-(o}V za)k+XhvQ!QYx9Htxzucz#qQdpMQ-5NV?lZ}pcI<*Ec%)~0a3h~9CZVz1GpASgETV` z8mpkFD_07%ujB|oi8P=y04PO3)MFEMu~&=;h)(nspleN>z_lSaWIZ~b;#` zepX|3W;_n1!J=+}bQp=#zrr18kYa57k8W72c9Jv=mJLYU_lsjYAUS9zg{=Zp83+*n zd08w70|51CU)g<%$X<<;rU9qQPMirofB3-z57TD5LXLN#iI=tE5J9LEmNo7nEEIi3 zpdj7|4KK!~Nn@8gmEfr~$`8#ju5yjxecBwU#1HwPk4eU%QB;=NootC6N%q2DpjEWU zp0D`3RRoMh{HLUFF**_I8}nKc=}h2!#uPtT6BB15HqauNPt-8W?odmKRvdEmBvoG{N0wqBWT#yF7P9gpywHZF|^hJi^w4Zp@-#Zl+52nJZNPi&(i$C{OpaA z-RTMCfjKAG67Qv6Oez4nN)mqNE_mF{;BK!j|6QH)2c0&&Dzq(`pCKe7?h8pJfu^)d z;p#pyBqnfc6Y8C8bB#xsqqA#&X(rKb#yYoS+c6kGVG zy08n&u2p&am!w1~4oSlDeP9uxr1nIWlXWmC5d_*s(JOowep7PXH_l$wgsUFKdUQ$F=<(7 z!S4qHn>f@M1J#TZ-yz>&G6c7M#dTP2hmmPwhe#RWy#2M>C%rxgzBfOXSBnWliy5eM zH*fD&3yfir#)$+&EwBuO`fngHws{0=c3lAU0 zT|f)2tThMsi__LnG&lAtri5({DpykM6Hagji~QbKzTP9zN=5>_=>B06^^$D)4?Ve) z2BM!;9h)%NvTusN1O#FxXzLX;tL2kHiNus->wbdxLGLyDn<(R?PTe&W10eK4=)r4W zHsN>`Jv1s#QtXh0zmoo>WJPWYkrrNc|d$e?+3s7uCra^j~WH zyeu|X%^P0+n5?6KB>|7D60;=577pW$0AZ?F)?B980#49cQe=Zg>{K;{4JWdF(ogE+ zA0yLy0UT9px8unrr*HXx;hn`7w>@7Hvll&yZX~wJ?Rhxy)wL%V3`O5nc9`9~a}4dH zjRV*_Uyo{gHT_zt*}vwtdz;qNG=px6IhXysP{!Sqj}%{ z;cTtstg2qHlDsOQ^-S}nh!eq6*{4PJcF^AwOx9O)11H*w6Wbt*JOjMw5*A5ZdGU8` zXr9*ht@@>Y1?YUbH~f)=#Y>C{qb(%`8BXBcu@ssi!On?@i{p?#(W9@(qmenUeF5Bk z10rKIcE9A&{(moC;cosR^JFs++b+{3$>S{oVQt2;Y!kKnjF8Hk^JihIUj0%4=t7nzM!a7Lq8^}ByDMMd>?ek8tlIx5tnyc)b zY;hz1PSDlAn^|qfGK&tq$$uh?VW(~yB*%;uV*M3;jO@BPpA9+GmxX)Z*ZK8K%|wxc z=?@sLR0|w=!W)#Ux%ctG`6_-MuiWw~*5-7(^50wiPe-$_bIEKdCVf>oUnPVykD+2h zDh5*avzM-;{LUfAj{f{P<{*$*+06-Lh&Yvysu+vS*8Do~<9H_MW|vcTyn~I)D;M_f z?>Tf*WZLeSf$yVPRD*FHCfvdf0T9ifizRmI?}|t_wAdno7Nr%^apgh(I)M}M2zHBr zqI`?`BE;pwl8T@|F|`?d7TegV9NTu&%yU8R(sqV1RXA4u_MS8j6(&*3f;(j-b5=Ti zV7)*$7^Yiw>8~gSgb*MTAZjYz9Zz^orZ8!^#fz`Z^}dc>FHkedb$gqzLygY##8EX} z1^w$^RhkrU1qU?L^_;LQ{zmH7VX~f2Ij;ejN-am#3S@5=n_Pi6$3NYpJE@L+g zqnj1o)~7;d6%SW|cf-(i-JW4$BgFBVr|Cdxu``=RY!wd%+Hc$lFxT>qydrf^)HJB- z9{cG4YT&KgV28RYP*y$9tnLy0xhJyd^>F?Zp$i(uP^*SwTgTv#YH!^7+uZ0Gy>C;| zvu7zHWO2j9(>Dy0WARV#-dHrh?$Tc)J@L>lLo*e@1&V&hzZw+K4(e)<=J4UZMRIdp zEH%!&txn@)5q|x4c+%6iY;*g_%MXG2eYI^C%asC9~R@TtyX}NntPd~`i&gyr1 zCr5n>*wki)EcK$IjY^-bBvRuf3X;E1sLUq+s4*oyX|HUHo-trwQ=b;Tk?A*m_8rVP zGxIyv2Sg>L$dq}Vs<~Tc>X*=xukUB){L`7gW9Fy8Or6LT?nPY=?1yP3u+#yo?$7R4 zE8kqp?mk*!#NzVg zx8(B6Z6DEsYm2b%w2C+etN2%}nXrtXcv9&)SAiufd+1L8jqyxJ*BE}^tSXo~!eq8oWUd=t9nhs9e$Kl~lb5xU6fo?o6 z3sg>SS;#K3jdxR?b*cENVUX{LRQQ+dT;5jzS(^4EzEJW=2>P@ri&ktGEw%CfQ?W66 zD$h1UmyHQkn!y?;O|6%zVAAzhn0cBZBvYC?`^e9Qdjh|K5(k@4?n;%h=65mt%el;? zk|hh0=W0&o+3(Kl+(1g#&;l(>J^Vl(1E!(TH&?dnwI64dD7FuYsBlwG-)_4RyPBFS zL!CHFuU3Fo*YakEOCFBaur{|{Mw}iS6MM|Bg|j9XTph`rpf71f;DS}2?-&~~;q##1 zUqDLsEW+#!<7l~$v7|KU=^X|lVa4JY8L;U1sC^+-Z0wy$RfnKpl{!bxeFA58DCKAB z9A=)$3b!a{!fdgrSsvs12XdMGseqbSWEz^AevW;14i>-dFQTqK>o9=7<7dr8=mZWK zpInJGL&zZB6QFZ8`(VGy)jjL3;y}qu{v(m%GKukgot7`dA)s~B}mbT%D;pg{!=ib~UHK)s}ap`u#SWA92mY$OhBXpLz5uWw0|3)t6#dNwKvn9^k?B(`e*yan;o~Y$ zxkD%X1FT{|O2~1AiVt^wZ2B}dBdSFEbx?Q^RPmsLdYj?5o^~Xt|D^`yWoyk!?-4S3 zwX0e@qy6a!_Bv>BV^O1J-EO<^#iWuTy1pQ9J3t{RyI3^_>5Ovz4A6Wmcrh;6s`%p( zeP*`!JvG}c;QSA@1kk0p&T4tT&5_$zmbUq0&F93vo=)5tct7zi;acOpqm$Zn;$d4^ z(_knGY0#Fsv0re_GW`6HzBj1LJ;M^08dGTm$j_@GPx!>8+R6HgLRYr&Yb_GF%Rl}T zss5Q>k!w?Y(iJ&l#^2|2`dj{-*W&e4agU^ttB-3K|LJo4EV*Ssd=l_{yqKvo>XyG( zr;xIhSEPeDbDUq4L!rJBzM}gyE9HElK)|PaKDLv!`B5e71zX!b5BnxPcYj>U1-?{; z)himmJaSBlWsU1wzNQ#?DXrgI#9!0o!o%p({mP#xR@?JV*!TCA`!^#__peKE{2t2z zt@Ba-;6G3Q%%vo~<(uy!$*10VPdX$0_XEJ=7W+>Xj`MFqzJ|}rayWDh_oFXf+kCzJ zHf~NO;dQjOX71$SxxcG_LCNB@uRLF`w8;gl`tFd&O&2&3hhJ##&lX-?qNQN6V!=oX?Yb?WOGvfj*(^oFj-#jxgBr}+r=~52V z3E^)42{Z+OBjqU3=9JhF$`vXlp@EV#MoHPET!T@`a#Yd*P>q*iS2t<9`Eu{|2eyCK>4sM+@$vYW=TTY9n#c0x}V z9RrOxDUPez52-o5<`mOH;F1HkE*jL`kTa}9F#rfDqd`$}xg%q_)0?@ou)KM>yyxb5 zFGBKOQS%l;K*j{>sWsNl^1L;Q^+M>#A8v!cdyz#rdOscI+Z>h|1 zw=Bt`JmX?HC97O5>xN|Yjja3mDMH-WJW9ypJZW3yH?k@!?pNHD&&z>x=Z#k^z$(y^ z75ZC(WkQwr?^iaBSGLGgZ~x|^ZBug2oN*2%CgxlZXcXs9P+;_h%;&3bb0A$BWu_JHAI-`0w!-XKKYQ>&|?tmJz;XUCCv8Sgjmd=cq>${B%d8u>p8kBPk3HMBFDO)+A5d zDXDDulW<=;wE7<$Y|8*;AZTW2YJ?}xWxad%8ylNmSH<=f=awJelkK}#*?8}q<^5Ut z20>gyv0g1#W5e(9hFhN+{=)AUBko3-*DD8J68fy-#>x8NGmOKp;jZ2L! z%Z(MSm8@6#C}3flBN~+8YkPhbELn*7IHyP^g578h6nIerjN-`Im{8s%k8O~oqfn9x zH(s#c#z3@*z#9PFBuNy74)G>{R9BIxc@zZzI#DfeqY)Pg&<#4riCZ;{6G#MTZ8G56 ztB4(pQb($9ha^PLp8e{Y%xEbDzl!{dQ7V&FNRH&lDm?kB_4meGjF6qUU!S`uw^K)Q78pMqO-tD{Lhz0x19fKW-AX7|Xj2zf=87!Vn`Q7*6?`xk! z&Ne>`{XUlc^k>c$2HcbgmfWF#pJT7Wf_TH)E)pPb3wf*P5NsjhR1@kN10;)lctm0^ zz(710?f54Gdl)z#1Iom*-&9qgw{tuvLNBg@+;+O+LR!?xEyg*0_nZ36wpvyXDb_?F z9u2lTVJWbv*Y>Ee!aB&AmNo9#P}z7b?R1|msEq9RYb+n=axA4=|^zN0zlSSW^$+|EH>Ap-9+Oiprr zG9A1z(Qd{fW;WlON`q))k6|jTj0JtR2zs6k7HqgIc(1>YOOeUbT-4H(WkBk*qk}H* zpq8-6i&(G?0W=^&OP2>n?;u(kuxLzQ)FPNxh*@{Jvj9T;m_#Y)B`!w z2d8#mUOV)EJA-RU5C1XP(uj|?{vdx4I0lGNES7D184-hR&&+}P6@tC!;K&Bx#t3_U z7;IgWEtLpSWq?AhVHriJ_*HPY2-ud`bj7_-jfKhE{4{Cm=|KqdiVm&YoKBzY1c?B( z>EQENy6q~c>?YU)08A@l>tPIg?c5FUy771t)I-F6UGY9fGm%`A$PoI9Y%4 zaojD0r~=d{j-a_m)%IwRV$P!yIwY=;{ZAo^LW3BgLB>Q-!8*s>4%FYi@$B-`Z>ZVb z=7MYC6q!U|9Vh#&J;d)se`?RRvjoHvaiS}$S<`7|=tnEAOYb0cv0`fy4l4#Gix(c&Gk9X1` zj+|gTqo2|{PcEx$K!nU78wkiyy zH+)3%3;mS7!aRe0%Xi9(4tl%F{tJ!x+0QY!13hZ)IdN|K)4|>hurnw4@1HYAJEG44 zPaOy+4=Lzv)y(IW84l~0^Ga`?r{o0r%!Y^oAMdbD&>9h)oBXi2Lw9%XIff3JM2mE;B309nk&IajHn9^exQ~4o(}&%yOX$S?9u-crroR~9 zfrhTW2t>YIh*;OoU#|*zQ>8}%3L|DPY~g6=2$5}(U>&uC+AM^bx4yEOdlkk2EqFeS zsi@Of0Snxkk64{Y8xCBJf0i`%;JXzR9Gas%*rsauyu<$aV?~Z}3`fV%YxD|8{V!q} ztygak@uqQ}TIOh31-lj2IJ{}serK4EUT;T$mBrPcudclCT-RmaDpKA`=~=hO-Uo(? zf4YTW?jT+P*oz7gFA5E#uxyFbZ(pvydZPb6y5hJ2W&NMmSwsT?*+!gj#WDZs;*Yedv4 zCtCyn@dC|e^$iwWxRs9ur`SMkTI$l5jz5hL4)DK0J_H~lNS$4alnb{h^GV`g=}S_F zApUQLcQKGY+;gory9LB|Tak#1g@bwoY3*mIYdaq$R}ov-Y0Fhm2Xa(tlAXHx;Sh_A z;cV1;{Nnvti29|c`rm$Bzx+E1wHMn1Dzj%>2e3~tz$qlu3j+Ha2E-2youR!=7Go=@Z`l`$^^qjS~9|bUgVNjFBFB!|~ruFgx;KU=CKS%Fgn6`Qa+tFMHH^0H@c+u_EvW6;TM`eY4H<&w3nbDw`_k}ITnX``nI zeqGtQ0kgGceZzz%{rDOnBn_~t-t!Gv@4s|Tew6gVmbKk0p$6+B~F zsgdwq#-F{64CXlHePCuWlEtSIw6eJCKUO4bSMR;_J#eZ*^YVw4r60j_)g}e?2f#qz z>$+O(9#KuA-D=*Ib4ZqZVHdlr+Xh)nN$Y>D>4!hR{MZ1S_a2Ck z8}r5gw5Tsw6V)5ak3o&#QKu?TmNji)Sf_MR>H%Byb-leEJSUzv@*KC7#_l;@C+El~ zdDfHmnt4C7B{P)!TaNwZ6JG#&q3fXg3F%JkNZDMD zf8NEX>8<%X_CeCU_g!#5NzYj0lT1cyDa5DcrDwpMH%P>#z!d7L>90?&wULv29(SYv zX#Nf;b#hGzEb~&1JiqX15a#7BeR#0st{M0H*)=3mM>^-8n4d~bj;Wx()1A3kY5{UI z&OKKouskFn`lk*eOE<1zD5LF?apPlCe*L?}SG4|wcRqJbis;tQ=*3hh)p*q0ESc{8 zBAs+;4tu8hwR2_yk2}~dEw1|93RH2KBC2h3tzD$mu(f@T6 zJtv!Zliq{B=Jt(w;HtkdDLK6ov*>>#CGK^YQRE)e@?nbW0@%qg;-%NCo&7gC+W+D= zO5DVyR>03w60DLqwy$)i35et0RlmBL^tJ!jzc(L%N&k}g?gnQacC9zmuS^+l!sC2?J z1lh;clhG?02i1QK%~E*+R-rcW#=P~I6yXV$LuabcvCZXlnV5WJ*$-pU5B3!O&QeZ2 zs<6NgiBjc2JI=gBeOQu9%A6@8a}{fxlQVV5cG}40P3Oda6f4Ruu;Atpe{X!l!k27? zy3X0zW1>;-kQbItyb+{5_}hk<>GXeXDqFROZA`t>t6j zg_+KE(y|vVY!V$y>z(f^1YWfAIdm)^b*@*xd(kE$(W&Z#^F96d7wu9GooEo32E1&j zLtdhD-6@y*R)L{Tw+@{fOkEnC?uNRwB)T*Qxiopb4|N+nbfIUuG@poRJ*E>~JL_Fq z!UDs*-W+dt58W6LS9+RkxG!6h`^YKRww%Clf3ZLA zW2Ua{C3nLEm6ANBf?PXpz7IFGBeGu4MWcT1n5h>Rrl)ojK>9F<(KZvVW{&3AD13T$ zhh_O#sFMT?!I7ZXJe7)gJuf0%d7%p zOu?V=P|TP;{PMxDXe14c~%HgGRN}0Cz|Pt7Nw)hnSzJ$PounusW8Htz}H0%y=Nq_-{LV|To00M z*Zl0nbjbphMn6b!m?N`$4+;OlK&6XWIHIiAQN3a;2q^$1cq~o4$DXOQu$F(RPVywN ze?sk_EJ(%<^ZiGEs%2T7A))>HsnTY6lh5Bz8CSJrEk#>S79+hD-S+L#KamW~L_*XC zNSs>--_8nFEx-Bs^PvT&a-NHUqu1A2zj{R0RlpVg5g4?iL2l9K)4JAw_ zy@d_<4t`1b#_qmWl1!`t`%+CJmRP*__5@b`^*ohsrjZSsduI;E%v6g3?+wk%PyP44 z4J53}e&&x1b5AafZ;ZkF>H|>FwR{MUrM(MD^JlA@%gkNJX2P6nM2}a#wA#I114n7= zy}-pmde)i9{5#nH-oANi7$3PK$I;t&RM;lnjAnI-PaB-38*>-iezrlBhS_VIXGdE!XC>#tk4$bj8?{0Sfd&#|f%}#Thn7Uz!HTz+q4MLt~AsKhj zqnYfX>T^d?8+NjH>vD=dTuG*SKrTK`?m+U(q2qGzX*%BNXUTtNC$ig*CTYs``fvWr z>4!Zr{6?HzW{K^1HE2ToWxW&0rV#&5r0abg^swo79f4^)I^7+OFn;`LZx_cwsHZ|2y~++?Ad4{NNtm3%Fu5Dod4t#rf6)l)(!PJ);g1*q;Y$1*EaMNWk+q;;)E3l7T&r$Yy$8JEZU@r7h} z9f(nbMiiq{uv0??mCCoNL7#gZhXpH;)FexwF@RR7kj_%N!Ng6xUNfH9Zg7HAV;Uey z45+X_IDwX-9s;_u0}V7!m0u+D-GrympnC3uZ;la}ul&2$Y79e$2i2RpWx}$Fi>c39 zJJ5m;U{ume^|O&p-vyW1hzIkQFP$_2RWQTI7 zyrPlE95hxgQ>q~?n9AXko~GFZwKr$A7leX%>1aU{c0n-Ji=t|tDg{%9sY9;NJ7V3_ zSPif&&FPT@#>Z>`CpsgV4vpR%z1+$AqPSP$Ge9yL8Vv(sat2emaY+Pdl^1gw&x8qP zRH{?X(aB!rlmrq^$XPF?ff7W@IO%2_O0mGHVC5fKNrXNbDu7S$Ny|DkTo9;$eIgOY z@=>@|-Crq54jPEYn3k)dw^Kuo-SzndAy>?yAqPVbpKI8PsD^I>F;>Gxr2s#IO2`=N zLd_s=Azr`PvT4B5DAnQxD~l8wl0byo>VRSkp+p9~TkxSgAnp7Q&D7eoRm*ORa4oBI z%GL`bVNOsXeW21ob6N6PjYaT(m1kcosC)#HP1DXY0v@_oDPLtk!x@k}M1;@6!({XH z6D@AMIrO`_k(v`ktpON32aUtx_(C2hhkykD;0Pl0cSq_Ayb4z|G?9>I^PI#_@2?z& z#w{8xsyzU%P>AIju~n)cq*%`8037Z6;y5u1XqGuk^3y+UayQ#S;d*007A{_!^MWI| zWk~u0LwQ)wXUsb5ctuSVNeNkm{-uwtl#qN#(D-<0YCnYVrTMnjQCGJ~SFXcA z|J8LrI;W!1kin=*eQ(7wq|u)mWwMo|BBf(!TB`FY8*1yG2E~HTPf;v-tmDV@{hTqg z&T2u{xaZ+uQEbMGDw|i%N__D;OLfyPqB|YjZQ>Y^d&G8iV6PZYW;D99WPNg3rdR*g z^N+bR-;bX?l?*#MOSZ1VGZ&~F=iPypn_WECOb4p-ZYd?Ea7-vby|O_$&!9u)0GvRe zL=d3Y0F;vGnLksr?qWc-F(m-lzFc$;Q%H~B1V`nNE(F>H3T8q)DDI>wA_I*0V%)Rb z>B6uNpR-3Qww4wG{7GX$?!X}f6;2(8NHMo4wp?B?3uV|SWD&BvO!0?7Po^CDuvCSf z^cV&-qz9a|3H@cs+Os!r33}Go+|5T-)@>S>Drc36e#Et?#Mp3?DNij0yaII1ZaP_C ziEi0x%Bo!L<~w+FM1vWl!c75W+X*) zcCwjuO)Z~_d*a<&4LZ~2P!umgXv&VQnw&DW!-dFjVKHQBF;M5C+MpLY*y-d8=9C0R z=E+<5Qxr6LG1G~v`FFQhK=HYs7|sXVKsp%tZ5?_Z^Z zm9is@HJl#CFx;yKA3iYd#cMvMbJs@UK=G^~GwNhmM;nc!0Wm<`II8_yO{gA0`B5&(p41bEwsif|te?4H z98N(rFMux*T1;?!+sur0XbcS~T7H7*dqtXOZgEq>sI%Jn053kuiG_KlS>@&MY)845 zJ3FfX3&3%c8OK`{v-ZRobQJ=jMdT zQp)E&&E2_SuNYXB{b&A4MC}w3G_dE%6;e9xI8%vzPWwVLi>O?x)MBUUOpvDR#?K~- zKgm3XFko$)Rr-0uCfcG?w!@El!NMy2j%%PXpOH|~dtTFy+Q0vy>0aKh7abPTD@ztu zgV-akr6IP@#x7MN%B8o8G+&%p=fo%WM`gy)r+*W z!M)%zv@5)yf=|YC($mg&tc~$v2TMs_Bv+e$`%>O??`b8QAj>QElqc)Kji`{9m%fba zJ>X-oT7VGO7?~A|9Jo@F9+6_a2YuCN=)=2y(qs0}C$GPQR=f$B6Eu~NfWv(F9w zka~OSR%)s+>P+B6sUF7-SBNbk)BSiZ@7sF-CUDx~V3e3QUYtVF$P1`B-w`jD894BN z(fVr24Ev(flFUT2KVts~&aK`i1L%#~{QPJ6lebcYiOZXNwrlzy0P;-?qqEp?w}i7{*Jh`v!h;cYg}D~ zgc-7^n=e&Rq21u@ButO+obRYlfEozO=Atz6b51y2X?Q#MXnjP zL+qld=^<33^NSi>ZhG2bX<7_c-e4%-X%JWwYKLWUrVceNck-EUd!<~u8p=`;0G&Nj zGzplBAVA^(h(ub3j9e5Z_oWbeIJD)#*?v0<#aIHKCFg6f0!KVqqIs6pp8bCuorgcw z-{Z&c;$HjWy4JndwTbME3in!BNlIjOi9U8hlGVL-NLJZfrAbJNxYu6UnHSgIE3?S` z`TqWc_v8II<8jV;y`Il#d?LZ>JVAny1KKwN}19I=|j^n=bkck3^uA!!N z<={~3zhD<}flt@oj9~+b4bElHZh&5sWB#4-bgVzWab<9qYJNytRet}_D=Eh2tW)kV zYrnOx2LsW5>M0yC93L|e{H_o&$JeFa6s)cP`I=T|62T7(w|sFg?LA~8WhnAipHci_ zjpfDr4jX+s@)o5!{_w~M567uZs81in9T4Yh5Gbk82@ zm(qxJr2C;Gy)t$NK=x&T>T5Zh8n98C;-h;XH^R?zW}G*&1;=lFT&cLdA?E`-5I&=1)6sYfCR}e!D$+lYzC6acJ*9W$+t&MTny;BwP?aM=!@TQ% zvH%!&&<&~jldQhv`k$G(4X{!0I~heH`Fe4R>XWtEq_Yjv;oGh7fR5e&64^76=PgQN zaqc;_0iNNIZ?T*ZSb{W8uW$at-6ApJYgK%lg+0o_C*Hqn4~^qr!isNIo2V@FH~4(4 zD)m|TiT?f^?+=MM{KU`C^Z8|wNhPRD{?VT_@wfejV43@;&Ci4f@g+v7Sm$V_#mzh= zl#y8bZ;34jMRmOm5_ej2T%_&%{6iCNrL^kMQTF6a5~vvRZM7g5_;?m#5bvcO!G1nS zWo6*?wPLf6K^NABKiz3cJRhvOFg|)mbvgB#i+V40S}TS#`ob*}MQ;&_?MesDyD&q( zZweqLF|uNJ*h$@B9FJ51nSyC}Jf?^Y^3_|+aWfEiu zDBQE$#4csij%U?oyUl5G@icNSmr*pKFPvF$Y|tzPpF<4S7c0yFL7&~c`&`33dj2-E zavvgJYbmfOiuJrtfsty!0VzuUFP-f76Dd>En0VPWxBQnpQuVAX(KNK=%5wP#^jv!s z@@>{~(@->;N7@uQ9)7+C*Qxe5a?XeoUEtOuqpAS5S97pNP|mN9?s^!$4{7314Mhl# z-Fqum`|RU+p8yM^HplFb)f2uGAHPnA3x2AZOR@d*ZK=q_&R0_QiUov|K%^jU=wb0} z>a^ocs1$1}5XMI|*JZ>0Fd3*z6tXQuK`)ppg0po4 zXk}#VGaeuev|y{qWJB-kQh;(d9Q#K*XT1d(-w-QQd4J#G{cay;iLBTMxvK3?jHnQW zCWO8M6;NvV&O4mXSs8Gs-S|3}SG!reJ5{^Y0DivlMI}q++ZVAy z^Yb1q)wqFmK4}iyaqp)AA9n|pV}E?f*ATKfl)l+T-7UEKFJ|uK8g4 zKf`9B2GpKN@;8F5;?w-w6U>Tkk|6q1f zh!CJ+p_i5^9N~0@ND-7UlZk61cacKWIXht%+vP^yMuljl9AP#O*CxSPg_w&}VUFPC zCLxewtPVqe$t+J3Db1+m%kM zMx~b(IpXI%+`4RMmD0bPE{NDxVtMC@&@%y*V!T`TT@mHXPCE(Z?3M2Sbhw!fXe8E} z1rSD0Ih#ICl~Ai)`FTHFIcF9nsnO-u<5#4dyJ{zSX=0`4QKNF+?;J_ZHMid2S>^n{ zX>T}vlMIIv02xhbAnpS^4!jE+hXSFV)4jC+5)lS;9`q|}v5tNqWB zH<-1LmfZN5Ey7a#)s@txO>9>O(i>G?E9FXG^>81|o~Z;kEG-N;@YdZY8O=+u-=wV3&8p@1ax*5o;>+SOlW;TJwQp=E9tX7&vszIOiXH;b>V$7LU=U3cq)6jNaQEU(9I` zQLRYHrOUd=c#L(Ov;6$p(epN12G#DQT2+KT?`GmLKFE0CRnd&>ZB0Q`Uy*8cMecbo z4-eaK?$s(E(CKQKQ-mvSEr4Q`(Yl`B^|Zz1G#b!E1y#PrPMxj z??3ZEN@D6 z$2GAaCi5`PGhaK$jb=P_YV^uwiR5Uwc@z3TodNAci}PQ)wj`v!>yM$=vOIB2L`@n%p9Y@#|fZ*i?Y>(E*xs%PWlsq$a^TlNk z<@q%7yu>j`9p4pNd&-`1f7|`B)EviGEfbL;n!D0glhE(aP%X31(cM}Jm%OnZqkDPwyk!7$#!raAmZ-o}z6jnr9|nE!%(!|UgH+A=mHS(B0wmfI zvOP3HTz$^ub%73fu$c+t8Y7)E+LCVmAm)5Cx$CzSBgUzmE%--dR^*K8H zRwz@}siJHV+$T4l#G*LeCKLPcxyBvJuX4FoAtH|Lar+#?%~gjx(FdYT%pP%92XRXY z{UprY8+8!UTrs&HbT1s8#S49;(&-JUdjD_y_-V}fDa!M25w)9-Vj8*g3Jx>qPqJ7p z+=ogw)4-R=7qt#zzw*|=_gd&P3_}?)n#P|QZyGPL8ds?&eg?_5}WBc%POOZ#-_ z(k{~#cyOWDgP3zyW|(o-jbHvWv4*ryw%;zO6&=7uNx@UUo!6b{hbEG4BMtGeWqrLP zU6~T#8Q^pF%UH-!gm#*afC6d39;4xtFQ5+O_Qz}~<`6UQFlEu0bWndUr2b_SsKPf< zI;O{8fiHDOe4mUg5x%{-KTT)A@-$OJ5aU`^Aha`($DhCcsjf%~34y|=ziNVX#%Rws zq6r0z-a=&`flFxofhGl3&BGk-$QL&g_ZF-CAa8VrPvHd54Wsbr0qO9_oJ-BRYGiPz z;W+p9^duU;^@9qSwGN>+Nyk!n6et{IA|@%~(h*oLjl{Q?H!E!aeFH3;Mncp%AWDT6 zH?pwiXoPtlx4-akGL0|ANjgh}^kPQo_EbUgq<|rXI|q$&5Zw3?k&npaGQ?xAsFVKoDPN*qe8QG{1#Ok# zr8pp9YNGESg-0DI7=+o(z16EDl-`rTO9`=kEf{OK1T0A z0AcF9@UK`ZY{o#x<)*Rty@$?9A2EfKVA%wcz%tsX8iY#I^{0xMfMzrUbzZDY0{%uw zLvpk{b;mSGCrtCtcf@#eCU-UO>ii`x+@8Z|i9vr0m<5R}knSjxro3XOZk}6oQd;x{ z+C*!naf*gYed_Twmzcm z6G`?4qzwEWWa%_~FK+=Y{*vLf1=l^tqCEQ1g?kSKmL7PI-p%4u2`$MV9n~5=Gf+^} zlVYV6D6-@TEjwKif{1WQ#ItW>THQMQJ``oW$cIWg0dY;D+fEuelDu}Lg~>C>*x3=t zLGu=d+ZC$qsVkI&=RTPp0~Xu}6ZI8XCW*LOSS~0^+p$IhxGw^w{^F2`!rc}!(i6x{ zB}XSxkSeaMdQwu%ByMx55Y=3+K;Tjf`D`GZ#j&R@Od`+Nl8C#5ig?yQ3bJlCv{mdz zG=Md!R3MfDC(n=Fp8rqWHRaq&O8rncCUwDupmZJ2=!=1fq%x|yDE$-VM&491BK>k( zQNBF|4Ome{zxEQ7NPV}GRUu8+)L2Q?`IR|rkX7xLJHC>eIG9~DDmCkt|92&S@vU#G zHBnQ%Kwz~{#S(AJS3Rw-+}%s#&KdZ= zvwXbjvCL7LxcaW*9p6j$o4M|urS9(s+&|_`7u~We2DJ&hz4-WdwJfd>0VC<0fBA_y zh6UhJaqj(}>vo^&EkCrj8lPXQvUuOjHdwye>voc6%}>E~;Hr@^MwV+eDKh!?YmRX; zw>JDWUIz_~@@!Wc& zl4sM!^(Gz9X5)1+w8f8c4>~(d#`@|Fc^-?lp!K$J&-S?W_7u;Kto4o}&(3%2ofV#4 z-`BeuJ-a*Cy9Ydfj<5fm_3T+)@A>W7`**z;1;+V_6$xMPB3YHpVNwCcbY>GlN||72m%BtUacq`rBV{#g~tGx~3NTu)BqQFHS>T!Q`w!%SJ&>`Oh|KNi@!$(%dR z6xADt+GG+NU}fEOZiZy$0GLWRn3I@R8kuM13_FN`aROu|jL1SHE=xRLpT9P}%G6au zj;oSuJ-MFQ$1w@IPv2%P^BVogLOXw^I-LG~?KF+aG)b>o&ak!wx0of@l>=A`_s)jH z8F8#D;m?m%p6^D=(YzVoXUO>}#NC%x9JaiezH(?z@)aRpu3LmtEl8F+y7!6N+%LN^UdRD;KIR)G%O4lfS5 z`(Z&KfqeG(_P{^#^AiYO=tSp3OIxZ`2gm(Z<|NQ%T9c|XDZCE`E1;Yw8_K!jMa`Eq z0-;a^ovV?GkBCitHy?DkK9F1c4X7nD7vL|J3YhJIC9U!BbwDD*MBwh&#T=l;GEm|D z6)m6efpr`SSEvQZMDCFk+jX@}b>KAo`4hhLRXE<#M#y)5Eh$}Rh42fI%Ak2$tv(=4 z1@z%njJBcQwQjuCQODIf@Of9#ZzsJbzHrs{CJl2v)&dfjHHjYreyR@QR|!`gZK7W^ z*Ms01joV|sFX$?Y!FJ1AZD0$s@UqG&8yJIx|hu(msLO-C;nOx z&^0}>R;{i!SOh(9^hL!KodCP^p-KX)i?zn%C%`%;Rd`!}OH(G`rmiLc%n#EuU1l-@ z2M{7Q{y9a$>VO(0V9gKsyqXSJjf&}Egc2kNp9AENC8Ds^PQ3uy_6GZr%H=a&Z3gKA zA54E6=+>Ys)D0^BuzO48q4Nk1%UYnu(Mt6P2s`UulzOOWwR09grr*lfcX{3|^nfgQ z67Jok!=(T+8o+bkZ=KB}>Q3k;l#|XSHL2v_rAl?RVWJz0US5F&*wpEVa#> z?XZKOO0{9G0C}P6OHu(n&52`Y2gYV<_<&qy{fC(8OP(#|$VB zeN!btYtqVS3cI6f*85eTPo7Dt<}zRp;~b$q1jdX$6zRM|zkc^BRIldJ8KJ#dRmp!> z%oRW8+>CW?ioW!&%8u#QmF&&|B6sr z4%hPc?=-E_ZvPV4tN-{v7)&bW2=(}F_TPT3Yx2c-kpo@j8py6z_0?rvrMie0TVI*6 zMIrL4>2n*zD@9l5FX)$&1+icth=0t7sBt%28zEpCyo+!J{-;Nb-U={;U4;^B%y_~4 zN#4t04-18Y;>rRQr?>7I0;FmFXDnxbT7-rI_;r^de7&apI8eKw3E3T6TFLS@Kd9k2 zxHs`R1XV4+C>Q_%u8e=ZlmmXU{MCg+N2I#xQ&SvWUrN1Pp8vdSE8CE=ahLKCfg)~K zX;!xTFMxP+?T?8MF5lzAz)aHxS0Gak?!lv|LMTZxX}-vo!d&ybr}>$<-NfZ`aA0Sf zCg5A$;01l^0c}B0vzhco-rJBKJY*8u{rWrXP@S%x@hf6VJcphPh7s)q1AaB7LC^Q#4%@cBA-q)J;=hw%H|`9UT4TEZ%CZ-Q)MU(+b17VN&;MNRr6-F+Ny!EOJ*-u{;3M|gceXjv=7cum&d_VG zri8y2Nj*v$&O%D65Wb0RIj2aA;YMBfl|aHC${sc=*Z@h5$FtR9pPwi+=GbqpQkWZE zQI9u`=FZQr>&!&JoXo}1!FwHV((kX&oEh3>Z3;QP=5NQaD-HNbLE49Kw(_~;B)1B9)p53=9#WI9G?|%F7F=V}XoW7{xed-S3Av<5IYs_{9V9Jr;HmQ|;^-i` zEkAViaY+<5?xMTUlfC{n4A6tQk&G~2$A+7<&$Q(QV)*ar1oU-FHL>+u#D5G{mj=mk zFPMIAyJ>0v;@2(vP@Z9Hm)sY_HeTmH>hYSH&#?FoX#DPz{n8g+9iv_t!7~{ss>?tN z(@YZzk;n`mwJ9$aMQo=Psur$YwwVj(QQtPRJwA#n=m{BsHOBGK<~s72D&NI$pI1@n zM7#bOlN7RU@58<;wG$yhDloH)9JlAkB=h17X;|ILi;yoLzk2`Rn@hMbl`)s7dCE7R zq#yl3Z$1)bI4$x*_@$BLiWFTecQWYM>&u6V-%Daj0euX$7XT~L`AUrguKdCEUib+1 zvxlWRu_GH&lBbRxqW5U_OXjo_<4>#n$6(dSQAu__q|3ERzK#rVJAzx} zs+>}P6lcvuj!*A{zX0${TrAc5hZY|&g6nz`i|?<8_D^3;{JQx=4>1>a<5SYS1-f_@ z{w6d!%HlsG@bH`%u!a08Kkx7A#|F&t`WIe1;a0Ys%VkO1?m&ilbG}uP{%hE}>$6NF zGNMuBHn&I)l%{r2^Pvvi(eLM<^w5U^V`g?{k=$?}92iTa>U8g3n)yQ0OOGF1y$2QR zc@gtO{Vg`BdIZlA29Fd*%)pFdzfMiQ(wm)#U$qvg!lI7%z`L)MbAc zmc|?YqufV)ZEAJZm$zr^8Q~l%FDIoYm(QR_+}*;_(6|}+JIDB(_|Po!+o-;L7-xc` zY&R1JM8Cc~DI5SH{n=J)5}b;Po{SfDh-}x@SXqcUx_kGyGri?)!Mmpcw~Oqv+FL&x zUH6>VCGlK~Jg2C|m6Dt`FD8Av;HJ{2)HyAexKxn^Sa?R(9rQlhN?f&<}k!%ja}oE*YMj^TA9;jix{a-@i$m!T
T~9wp(U+9W7nRXau)!3mT^or<`Eb~A(Q2@4*&QWITTUE`C?g5+U9z^1EQG!*Rp}e z`1R*uh!SC*6+CD{0FWGg=$iZ517-E3}TPa)nUXXda5j^D^XMU>)s zR?VN<+$_fMyfw01wa6U5`9_Q9-Sro%H{aS=zIWhxfBVu%1cI+dJB4G}#;SITr|j{sHHSarRt={-<=Qloo$jGlAFPEzo7m{Y zKVjXbg{(+^vF@?zTgwgi+Y>e;^~mba zFE%{gY;7l|kYC@v2#5R9hRJpJKWW3m;UHVPISlW&j*lM82B{HLE#B|_FE;((+S;!< z@Yas~+6?$MVZRl|TQ~FZ17`w&LAae<-e9>IG&bRIut-o*^7(*hw!L#a#oO@b*H+k{ zi97UDUNR7=;PK4IVfs|OX47&zoZr+613QE&!Je^1DiB!i@HO!dZ%1oT9XX!xH4Eo` z;0%QSAYZPbQ>1V01nbV(aW?R^D!$xFaI?EBIL+5Ka-p1HUgso4KPua1c;@71=PWA3 z-(hs?cS~#v*F(_zfoP}pYV4(9+YwRbneH+v7; z>8$Fv2VL)MCp{YK1(ZLx?w3Ec_q;1~Jp6r=r7U!Ey$*D&)M#)}_150Y*Q(kP8|ugLF=Av3^y84g6E69yGB!-3QxgEt8Y_d{x$dAyr7rXEm! zV`;k9f!yJ!tiWl(MaA?#-EN6vAxkdP0WXfo|DOFu`Pa3v2!+F=w|9jgyt7igM-&Qu7D312C_3-t_&r2xj{ zts{CXa4V81=)hzJIIfl6{au-l*?(*GqjWGV{Y!BUd`jKo)}C;JmbEamMmb5Irdaq1 z{S;l$4iX;PIUd`(i?pXTD%S**1_nBnzmp16`diMxS5kC13u|Vx>krP}0rNZ{l4NEd zN`>}22%QEt^H`sHd@jSB?xfRC7$$>i>(1_DlKyRRw6K}QQkV&3-T^!&v6nvI!!E&K zb25XujAzX%V0t-Y6>?u_8;BgnLh4CEqlJhbEF{NK=%A2ifcBT_=tyi4iUV@=kXeUj z+z)1sPk`umy(`rF?aLfcKXd4#q>goY28S&uS0BFnn$TY$-!_&-jCeR-=y5=w5kNVz z!F?=<;utYU)@mHXOMsqdD@F&7R-a+G>4;e`_anJdWFwXxa-jheMO$EXfTa+xvkydQKAeFo8D+#5ap$P3wa^o?*`- z&MI8z>~IuH5r$V2KFxPBM&m%oKx8R_eTagtSAbeP;1Qzmnu2&caZJWZtaJeEo$z%t zN46aD+L^xO5RZb)u!i)X1t+I%HW}HH`Lp}^^ZRSzJ7q{SSQ&}CrvNzs6!M&5ziiG+ z!(#%09N{=_4mn^Mkh7Z1jFO}Aap?V}AWCr@b$CpDAFPy4JimSBp4!1k;8`mOCqZSb zj>NOuB6MIsRF8x27oLv+&w}k)tLtIZ7KIn~i^y|{DqB>Q^p{D=0r_`WG5tb`+pG=* zUV&yVUHLgrGP^qkUNXb;oy;_vxFgmlWQu2Aq@nj_SlHx&l_HQAGaP|f7=egyhjWw? z1lNVxe-+Gk7f43$u&O4`CU}c{HWjV3kolS-<0bbaz)RqE3TmAqpj#nX)6eXL;}w|4 z*pOJ-AIw+}u)YIgMuoXB>lCWuJyr&rAPXjcvf%71kS(4~uUBfx(eWrnXnqDU1lSA# zoC^)-WB9a|mVCBVD=XhnR!$K;?i6jSkkzNBh+XAEJzx}aAhGB@7pLF^*%=VqzoG6G z`0o<`Xo_sHW}usehas~9P>&Pp_TfPxUnh_LruW$2~UGObkE zvg>01IWjmBc*#2$Q(+d|4)ZM<<2rz~lY+-lC{DYKxMqCfJVtM3CyWepDq#NuL3Ywu zKVhK>18gJ)#(epFw3oPPmB2IjlHH91h zXO%;|SOlGB7(ZnAfK6vVP5@6I)cHpe?8N~nisCP5^S1^s>+j7j8q1$gLa)zYjD`0; zeA2&zz_|F&7@K1{6<`>@wSo%a;5{6}=DCq|!?hu^Erd~n@7U|>oM2@Ej3cv|ubARZ zfS@ySlg7Mk#&nrWulAlE_a>v~0K$JzC}@VGhh}PzFlZy{-=Ltq`;O1-JEsm_M5TuSS;`(@j}W4FM1YscMafx)_l!WrUsiN)v6 z0ZEXHA}MI87d(T`pgXdI5;+@ZB<>QJ9+245a4-h|tbGWPMzlE`ypcS>yyv$D>AL#r z_jHP!W$gt!nPDgSYUsZI#AzoAoC=GYfxoUmHYD5s_vKO7VfsUB#)2uY;KINF1nXm_6DRXN| zC$fwZZ+L`U^Ik}+yx)*Gb8>Yi5;x;X1Y08o7lmaqfI{pGe6$&Jy|42$cHg_otKn+D zXSw*lss)OFx-ZOL9VvTa~LMFPUY`T39bx*F;%n1j`RbS6at^J&L{%FbVLeL3-ExHJ-_E6v=SpIOBmk zlOH$qK687{xr%IDW?mbW>m~3hIcLNlW<1YTCGmbu+&}jlcW6E(%-cu{&E9@C$%pt* zF|mE5xL5OBGBd??|M@eI89uyUB}h51KOmO z68Xn7GWwsR6Cb|}{`gX`sU?d)r|GeB{-1Q|LB>)nD*8`Wr3eZR%*_6n&97VEOwY_) zyDb`3kRGbhQt}6yMPTT|<~nM;Or3G~`t8?jreYvDk2kB3ZO8j6s{+@0TOff$^>Oaq zl+fCb-MENGf$?H(o6{1SH`AMk@PtmK$EghC_j+bBf=5RfW%8Aq7!U#_9^zYlYu`Z+7_sN%8Z?nhW<_o+lwt08P;&?y)u1w&4rOo@V z-$g^sq# zTvFJZ64C4`lZmQp!9~MR4LjnSVQXL5J%|ccPJvK$eWLol;8(v(!S1$7Nf8j7ZBlqP zK}GVJo^91b!EdRy-_ofhf=Sa@a3F^;j zRL`7U&(i-x3ARwZyLP>YIlaf!UOK7|oZAf~_OVR%aiIIT?fcJK{(_VJLg)ce`vJ+^ z0h!4GdGw&N{h(Uz;HAkyZS;_?{m_-%A(P3WYv^A$?0;G1{<59?bq76s*M9iF++mN& z;rr+jKl_nKxg)`oBTvwy5%!}oxufxuqtDS}srF;(xntS?-`FpPerhRqYHf0A3q8GSKYf@x zeLOi$N7KL#G-w`;Ws1gunc;Sr;mw;7oSG5B%!)e9O6JYVOwGz;=9C@g)bi#oP0eXz z=5-zBujI{}OwC`zEZlHdu*zGoom#kqS-k78_+Q?l$JF9|%#xqO(xbek;Hjl2nB@qE z<(RzX_^IXRn3YtAmGr!o?5UM}%xba2>YKdP_fxB7n6*lWwXb<=wNq;inDr)y^|rkA zuBr82%*LR@B9s6q$N?M9@R*W;DBQ-{)aDju%QA0+1prpTbDI(Xi&|UI{B4%$ZAmSF z3XSK01~^CDC_LE~z4Kc#|M$)h01m*jSg<2R*9M%M-qjY`)1^{D(7~hp!{F&d%Ul2>4(LSV@uUM7X@{wI{-o#sk+I)r zAaKmq?_}ryeLwv-GatZ3;4q{>1g3#E@9dY|Icdv3k=8ycr1R7jfa--#x~Bh43!QeH zeRM8>naC734Kmk0J^dr5ovD=WcIFsWzW$l5?zc+qsC?6#kBeYNzcUv-(f1{<`dc%f_cb$`B4e{ie!*8ey@+@9;ozt&Ly@AznUZMwIifqwSWV_zD) z!yn}0z$mH7Ab?$St^r)>$l3s6>WU42kM_q!B9JZEC||t&$`gTqF^?i$tOu97Ain~Fb)y^DB+Z9#m;mc$P75R z>&|=I8V6vKN)jNf>=>EH!ccw1?(gj(t^igub8L(tLlEFm9WXArq;4T_@onkrcdPFp zMsYxq1VVY68_=+S1Sr(}Cx!tv>ITYVV}6^5M=FWo1WOJ3Tct>Q)}@aa3P{F+E~fY1 z6(fN}oM3{A$y~-3c zYxZU{OB|%uufK$;I7sgQp7jGw+*<}dZ|nZ>0Gl^Z>qMjH`whKNq+yi z$GwqUinZW(2D%a+zJ+-|PI_UYZP(XQnpXHg1bNx!>|rI6Y9LsE{cRPQ;$)0tk1bK^ zlG?kcK2o20rv2L8jIv6r^edS_DjYh2QS(7mkMI!F1iZ;?Seso zcS7|jPy~Van$y}I2jp`*mjq%)m9D%3ZoeE~f5%{sD|sbRa~+7>OJ1+|DUt+u6nGk2 zO0V)tKs^Nk)vf1u*riDAQrK?W`}aRyv;}ZKOi(fy001twEvB%;NvJ^^I84fnDrAUn zN!&aef~*Dh7B_^cXaEqTac7vFK+;GGXJaTGlu0AUKKLQRCHxuJ{ulen%9FAz|BW#WL0rZ5)?#5IJ_jw={X@1J??ZHe2(H0i~Wyfy`NX}N~_KI@0T@@P5>)8 zk|B#s@+{y+-J3~g6~o;k`V-Mtfhi&`Wrkp~j<{GdFzQD*XP}NPmdl*<$iCu?&xt9P zdJ3=l>;o#G>M}_9aGI-{q+uJ|0qP3xHHgi6OYgzwT4}}rvJ%%w5bJqAqrPx~y#mSW z1%e!aZl>~n7L+Ieyq*zzF(urKBisJ0G0I@B;FpBC{U7jq0h4YY8Kj7XC<|Rl25x`k zax2BLt^(rqEjn{EWNm@&260zTUg6n&W)F{~;nway?Lu`*=@#joL$4E`rT;H$DcSda za61|Riv>!HB$E_wHYP#%=W8r>nC}^oBjLGZhh;TJWaNk2flR5oj0){P-ORb4%Q_&Z zzo{g>?egYnG6dLRD-{C^O7G(saLKDftrrhIGoHt>T924BWfk0HB7>w$SAN-x$L3X* zyR!=H^lO%Q0k{ihY@fWXFA=|B%t|rjQvos$PvPS>5O>UOM@ru}Ta$&_tVvzA1$6H_ zdL&)_|)?;aUd~RKilKxUk;5zi3vnPaOKmwRA9Ov}sVkbnsygCChP&h?TkEI9`!M;R&q*jaA;>9Bh+~Jp8 z@M8ml#fVufITh$k)RA{hLOj9AL!^QL%nI0N-LhLE>Apm+l*X#CnwLTFsAL0iXF!_( zgD^p{9@}sEm4}uL{!WJ7RILeR=tCf3oKL$jSl{GwvIVw7^SAy{r*)6glYqZ*QMUpz zFv43H!x@A4AS7Ux$C}p=ANRZwh;)G|czcd6mhc#Arl?ThJieS)i^^ZOzmh>MM|A-D z*m(F{BP7=Exc~^{$bhDt-Z~uY)-4(V1IB^+%+-9|{|pwee|danIgqUBh;cP9VQ}7$ zQ>qL9;AlqH>l&yA2h8vY@4=+3kCy3H>N7Xkm;tcUcGYXVB`ic`e4=ZIh_f-s@G3J7 z%%n*KL;?}ThEv~%T_{%AMu^hx80*!eI4c!);mTm4fxnWg0ky}Iox&GDr{T>_Z@&QS zatbZN1prh_GLYDB2;wSl(P7KEIr&zVnGqkSQcfcX=m0=|klu(8s2cOOleH={A4mdc zA*)4*iu_LrDun~kRg(d%%lhGZJ{-^ZnqEC;-O8FcStR2{G8ipB$1t3HK`S2^cpe!B z4CE{!H7=etDwZ7opzy5@LHa#VnFxLKl6CL*;oFsd(eQ#bO}bNRUqEwaujR^}^*duF z;0LFUXA5|Whcv$;^i>J{-dbR9?UbN$U({ZxS{ek=Z`JI1^t;T$RT4QqHVNlvRNV=F zUNZpW}ohrrgwI^y1nX=*UQs1l3j0356K*-X1C}zlPqid)eY_ILKepZyMJ~=2L4U|w-P*KOaD81|LqPn z;N-PWm}lRid8b@MaHMR*b@#HcgOT2_PQm=Y*ZgOj(?uVYRXlRQMPM@A0Ywv?B zLz3FWZ_b8@Uk}ZNqd~DOk=nxkk8yOOfS$Gb|YeJHVFO5`BAGVel*HK${lzJEN^sA-**spy3V%{ z$><0$8I{FXOE?M(i{ULuG=_u%CZvxw4DTFE1IPBMlYO0Q?&=gqF`E(9YyP{;NMuYd z*Uqiv%tqLhZNr#+I9>bByKKvE?nmW}K7IZ|fvyuR2aXwyy3VO+@nKg9NYG6nTOf9v zqs?O;Sp$!v;J8Sb*>+62i$DB^Rj>lUjI0jd=ermViX{lNEy(hJj;o3SGAKaHvEHr) zOkw2n^n~)Kc^S{ft<5uZE)*>rT@D0fxx^{7!#$TJY{A0lUvU>j#Ef?z8bO7ba4`X~ zG28wk*IHo@lj5J z5)Sh$U>boXP8=m;`3)Rr1G`G92c)PYtbF5D)ZY`)tE*|0Rg{Sa%+amrtpiQ*AZ{5Kb{_Y z#vMc0aE%!*7|8J@0r`mKu*BTktoJza2Hm8oX<$8+wJV?%yW{BSY};jGbW3-Nif+YfQ8Q$BwUSG z1&A_WHr-YZr8&BoD_np}`nu`bL>M(xS$=GSG#WYtq+H-B0C<_-I&79iS-K5Isa@Cc z8Bm43NP=OAoT}R~7TcOga}e>f)p<$Ry>J^yAz-%xTKD<-iwJ?MBPoNAvSC>Tr!$I~ z(RaTt8oVo1XmA6{6j*38SU3&5 z73q}6fn90<7@YALK|>>)@r44Dr@5O1As^Pz=E8tF?%7i@`7p-!GZRg z>$VsGn`8yK`9R!6iP;MT1VsessVm(3C91J64G+FhV(Ob^Xe9iGpYX`oR>B8>F?#hf z=q<29@&OMp62MFkP-4PCoNs{wO46yrF3%Y~TuRj+?JZ*W3X_~7|AWg1I8%{18&Nf4xevC=hR~UQ-`CMK- zJ(i7eF8uFn8qGqN*;MqGuls==}zbgm7i5q-I2FG_*RQwliO<=(zK! z72~d2G+ww+BcZQoc<057)W5FCr<|tSCCgS)xBczXqp{35=Z!DG*dlMQ%8wG4s+|Qf z@FaI3ioJ$8lsgEVMX=;KRA3}B#9es4H{j7-a?AfMld&*>o+$R8l#NYWrcH=0^HVk{Z>nF4Qmj7Tv3P_)(JF~1f6x&E$?e6z850U*1U!Qy6h(WUS6g#sM!nM%wV z6Ol0IeHc5fu&jWoQ}uaw)$0^4xj3=%dW58`KfsJuJgjjKpbwzLy0T;O_6C5L^EXIe zG{0D6BC$`BNB}i+==uO-p~fBdU&1(hQ?)IuK^6xl% zCw%%nqF{La5oeGfRvJXRTFAg`tO!ir{SncWW)N3GfA`c&B1v89yBw0gz=W$o>2g!s zg9qzz5f#n)Tvv2021E@Jk4OxUc2b3*db<3{0L~<9Osg495}x=b+Gr`_gd1=%rfKKs zA)!&Qh!0d7}m8T=;tNy)ILB`rh>rBl#h`F% zM;?_wa{bL2jVN|Ka=I{on5QZEa+HH4@kO`)gf7vgyCB%NAU~w5#tsd|%G}TDsz2#6 z-WMe^b~oE~JE@RbbIzj7+CW%K*GYFD>L-2R^3Nf=pTi+P3C>-kbw8=5LgUn*G*pkx z^@yij75=h4%Q-zAKw-Y^>U90iRaEcq6BK+qrv75@QBH3+kgu)Cu>Dmp0NvL#^YvqE z{(@v5EVu6?@XEVt>D4!VaCHAueBZmZKCaMyJ}-U@v$N#S%yTK#k3jh*9#Y7k* zdf?oT0q;Vr$y>lix23G+pvojN___jv&EUl!gO)%(R`h?*S_gGBhs^N(wfaMbxkLER z{l+^#jsFdqdvOWi`=!ypZiW7mRs8h;a@{EQm&3nbqC2Ad3C#5BCr&KGu580VBCr6* zykPsq4L#!fQ~c@Wk$}(<_+U!lj}iKVjiHc#BYGPnM9op%Tw-MCsFBxb?2ple$~gyV;Q+)SwF^dCdcyrjTNBBi!{ee?8je+j+f?+zxy%%VRHP_zwvVP zM1|%=mHk9@=tNEK#P=T)b(0hI|0c+2YNIB#*`C@ON^Q@jcK)DtPf~mSQTx!71DcaV z_LIY*lcTwl<3A>;lao{bCTZxYSDmyspZ_M)gM#qlT(}jrnb@3zcr`#?57Vx zr;l={|NfXhnVdfTHx0nhKw3121C23^2Fs%{*V9yg}H!VcxuP{k-YayxHlzIcC8^YvHED!mY3c>%0Y<`UShG1&7lG z0%p-kYth+Z@m|=XYu=)J{i5g8qW9^d4`#_%YsueXDIjbqFmEZSeko*XDeQEKh&fA< zE=M{nM~5xP<}Jt7FDFbbC!Q`RVOCPKR?-|+USe=uvYJ`-D>+jud1uWO%xY23ihyNe zy4hsSEacrO#EiW9X==6nbhQGrR;9I8?XXr8w)Q=7&3qdoRUp+9vf6ePAVh#z02tcy z);sIhyQkKBPS@#un2mv+^=oI*ZK?JCs{pNS$l%n*)aeF|edF3T1c~h&-K2sGAg1um z^{LIx({(<==28z8NCR($Z5{P&?r3fGecYhtZ2^R~d+N7N5;s@nwqg0(kUQIZ-djxc zZNOFn>ooP0eFsV3u?6`Cy)#G_ssiN=XxMl2)nvTyMu|prSDMB z=B3<|{mc35=J$8iukD(b?<#UIXie|o}8(6^T~Ek*skvXarTxEQU3qFHB7*e zbCJ>v(g-+6NJ&XacY}bGVt@it0z(c6IE0jROLwDyv~&!qgmj4tNY9z?{+(U--sj2v zKg@$`K5M<#>oY{Niu|AhewhtFuYzCVyV(HvBZl%Mn>^4B-*P^~$Gh=)>ZW%W*GP&t zRZtEB;+>AmOME@m?GmYQh0VIa*OSecp+*YOvY+QY)_?J)eeGw+2!^sH>*8{ZED)by z#;3p$@a`9v{gsy|ht~wvaC&ADds`rw_uZ15ZD550Du*{i=FO$x`Td#RuNWRZ*#HO$ z^?gDDZtYCvRD*SmBq8fhp^S#O4XrfsXWzS14L5Z%@4dN(Fd1#><*LN6siYZg8x(41 z$b~T(?--RRk(_!{8|)_VYT66FY8=H&<8NNdlEevQ+;gPNQ1_Y0kBohJvbX=`Z3+1e zHZ7&%_#(Zfy8D*tp~yU)O!>f*)46re%_yM!eNJ>)n)x56k&JtRM64D^E)xaXS*jTp z$4{ofiOA~9xZQZ}k%===Ztl0qLc00++QoYqYF?}LiT8a6R6hl+Dj29hk5Xj(&X00# z`J2Jo9Er%@A<0l+dF00T=|~tfBPK4{_xuW{CIyUnXx0n=bc*kq8X?x!1k9C zImTY^ZMl5<57H>kts3Wy2RLj{IZ5osZzp!I<+;tw2MquxM3VN)2$AVpH8I0L&FU!U z(P4;)Dx-6LwJP(AZV@%s*N}Yy`bRRkk=(_=SfWUG(6AyTqeHNj(6NcOYLK)>mvYBdN2NRW`9f1G#W{7%|)VX zZ0cBVZ2B-v+{FCXRAmomY!ixfp+)e1H0QacL1se*;)OmRrZz&vgF3P+lIOWCcgCBi zGjtoNPle&S&mK`M>9h+@n~$p8wf3BGY_xv8Y0enhV%FW8RX&v?^K#TBDN_vNdw3w>K~^Hj-O39lp*##qLZyrukJ(?rVGMGTS+;p#~E~S(1e}!3$ zRtcAW^0BC}b=xu*@s2fi9p`r~_vtGwIuyqWw33JYjt^P}jjsH2>)Snej32>PAE zvplKhbcw%DKI4dF-8zYR(*=BnTkF63QCKxQ@|r7;?1`lyl}P!N5Z$akg^#~P9v!8kf4+;5hqR6#Q9Xh>dcK0coPBYv6|BR~1zd2qSnm^&8Ef{Xl zzhO{Fft^T;~4zYu&Fuea_tSW597)+bV@h)mem*pM7sI0d$>zidTt-V>cT*;);8+{gDrcR2KWiXDn>KCc`ECmqM0pU?!ancFmq)T%Xz3pH}qK!{HHY`J%^YzIs89){G zRbfI3oi9rl?76t59%z`ne6n8}ohv(mm@C_c=`?kgXII_jqb-t8jSi*_po2;W+=jd zvu?o2BwxyuhFFdd$B(wkbco8P$jsb>z;@Bh+VrBG9Vu;r^U2&BJua%ZcfMM9P35s4 z^AU?n8^kB!rt(eqZmJu%7$nXA&c7Y@Sj&+~Ca7Vm@NUnhmS>A$=E>9}mY&CYVHUz! z^wY&^DkUWb(nf_fQ!v#I1%h~K;}VnUlGBfm4eNLGzuMUnm_l96dZe-A1fHeN_uc~x z3IsI`)8#M1cJ+x42?w*ME7o2r63jB0ema@14D=izlyehp%ATx>PjXO-RHOX&Ep-B94($j|8^y8;4iZb(~N%%f0_x@w!4;I*5Y#k>@hmDAgIRE+-LiK!M74tPOwdVD$if)zYJOxm}wpjt8jd~u()M1(=yX8M3CZ2 zxaT#~%DJ@8{~X?7eV8=UwyE;Mce>T)q+zE0XV?q>b(x3f*w z(6M+tPaPhw^`DGx`r}A}@xK_|Or`CYC|1pevbkCpZhIBf&Hq4j72jID|Lll2H|&4^ z9P}*{kYw1@2}Mv6+YEW{8br}DYi4Sh3tFOt1@MUONO>hT%6P|vDy?>Vve>ZH##&T# zcg9EGKgHlaf*61%xTRSA06$HYyy+x1ZPIwRL&z@HEi3$I6l-kX?s zX(hZ6a2SVGOnVT8N2&^J=QBC|9=&O=>Jl$_sci^h>1SAvlCWlT=#!TThGa!<#>Fk& zR{?N|y!qtgzVp(Q(|0kX*!+YX8C+0qufl_3V3L%V(&1LYki_nu`vAwb$z%qxwID@xk0@*Ntq+@C0aZ998E`1A##beCG0^){$|S*wSl0RtB2 zeX^OSeL*ewXGm{PQ*+U$$iR5jm4iD&quDRe3`*U7oQ7J};Y5Vsp6g%4 zT(H3?7WclbSoOaAp~rHpHA)LR{c1(PDB{ltPDOt{K(0F6M9*Itc;dz|!sx)J$xMh% zS5^vsy3PKZfLIY?&cY70BN{=hDSSs_WH2szZ?p=m%W?)yzOR9w8K@JJ)+Tf!w7_3A z`yCCCAq`gfNy;l)vAJp~fh-l!^_wut`J35aZI{_G(u8SG2JS0x7=rzbSUn(#!Chs` zko+7wMcF^_C5Ryx*H-T2%^!na=lNCvjGe6CQq$;zDl*4tNl5XGBJY(+A+p|8-DSQ@ z7ck3zW`;sPjOS;Y;5tHlS|dvXOtgJ1j&eOX2<1fv$76ku@(>wOLF!e^;r87Wkd-ey zoV=`_2sF1QdO^wzpMHjgSVKGDLSt3(3SC5L-wMz`3Nty`|I!^9i zbGT&Gv=D5s7yVL@e7+G_DALSZTYPG2`GhOG2 za4Rph`8zoC$;64o8c^qPGr=fD_Ew^`%j|EI#=Q^-h4tPM)SyLh#Bb!y@jyTF3vYrPES)wYDy5RR;TD6#6H zyzl~Ol>QZmnoUhgpO#ZtaYqAn+;4f(U%}fop}4OwAHq0W=8ZcGXCoS!-1&T{B{YK; z6@~$lO)N4JbJ^fQ!FXHWpvo@9x`B)9@J=SL_BJ=OEAM?E5@wVQstm~QO)Rc8FzDbz zCDIMP*QqZtrI=1nQ68qSV+bE4bvBXDCozvzqJ28-O1k2UNIhB9aNWcFid{yAbo{(w zgc!CFU7Nv;)z=nTv$^0nXG>Q)4NXXQLxE%nH!9Kc#`t2OQQ|xp1)?1rKKNDKDmm{( z+Nd%-@kq@S@#pDX#qZ@m1K1;$dKh0Aw0r|Xt7n#Ay58PcYarY&cA1>;ue?`Hq|Rkt z`=(P=3t`1!te+JR%cl1xAK@0;t?u$ZTsWIj74Y?4>*cz44oE2l0q~o-O_C`#7aCz^ zK1#A|D8QvVo#vsaK4tK=GMY`<3e&ZJ3So@UAcw?5dHb!(j-|Tgr=C5F*|J!JiF8ec zecIv87PmOMM@V-*MEyv`8ZjUtZQh2+2wc`6HShmzRzKp|?st#WR;_<_AajS)${yj| zEl`cKb4*!dzOCe~1QRRHEH4!&Rf9d)V6NE>ta^md#dM95WI2e)cEa8RXhf4+SS2>) zlUQ|m582Dn5{4Ca4wut)oZZR0rvV&|>}Vl%`Nur|aHcmdS8s)G?NrW!{cuR)n~9(2 zkW{Pe5d!KNv<3oi>cDi}ynk?X{tB3iK;sG3&Q#4W_HwtMDw31>5E;X%h~EJ%EVHM? z!?;dzwdfThSSL~QrYw#i5NG>p<*w6rK*4Lnt`JMNbO_%NCGt!Le&A=X@PA>ADF+aM z<{{j4`SrKoD2TfNXdI%tYylCGw7~>9CJ})MDS{Eeeh^u?vym_Z^}GTZSsWCHfS8Gs zTR1~*GEgH=;arbiHLC$cM{t#tklTes?`u;&m3X#%DRs6M&Dz9<2XfB@+)AJDjuCG61xK!Vew9Mc1w*T6hY)F?-w5{TH^ zppZ?u3#twU;R8A0Zh*)bYyuG|?rdl%M#;)|8;2kT?J>bV7dAh9}o{xMe^FK-h;$D1zhXSkQpn#N!po*e&-eiMv2Y>|h!qY1 zN6$h-+$cXG0kIhc_+#h49KgkE&cIo}?G0-EDmxrN@wo}Yh4!AJ#~%d5;1q&8l%%X| ziOOC9T~$g9P)H(ipbkIao+9&Wi=4tiLtlfQP zL;%f+h}w06=p!I^{z7yV0$}RE9bO3eUEh5VNNX=N=&$Ezdgv?je>ejo;(4{royv1Pk%?3Dh)63L34VB>5VYSHBJI&F<_-r`m3eM*W zpXVZ(^6p6IiCN@H_~uEb{X$S-d-N_;ncd8pyn%535 z^u&R%wBiWqg3)8c$S=Ck9Ux8PSrs5A_5-Mo}G#lwKexnVU;21}RU1C=9#l^GK==iP8`1l2U|aDvWe)t~s`N;bvT{D_J^|)<3|J^C|1Ax)9Kx|2RC~6`tkv+uFRp_2T{#u1oJ_yu&v`zy1?oNrgc_BS{{jVexgJ*I1p$$(DB!o--OE`3ZeWRC z6(egcu$m@)+DsK)LM8QEYcgEgA*dR^64Cvt@;C0Vg1Q=hh9oK90W=>KbH6QU4=Mw7 zl5bK~aE!w%M4cfVNu{cg8X8p+6dcm2L6id}-UbZywE2RC6*UVFQFUMr4XSFW3Z~q< zK>|$3cDXF?r(CZ12v8g&s#&HqvIH!$s{)>s(w)>>YTTSxs7RTjGPH$ONk0p;uYjV! zZVG^d?Y*f-=#4Mhr$O0A4#bQk;|+g5$J=U1}`22oh#59M`8Vv_=PcWXbTUZX@u*` zQ|h;J>-#nC=KF;LocXOm0svhpga)_vf>!}TM@9xii6~7;Goc`9Z>d5={AMf*Qv6CH zWbmJ6U^>gDV^`O(6&a`^@e?;fT(&Bds&=cB-2ni_jFo;3AiZl#S?N3PDT)B?+_KP{R_h(Ttxf}mi+ zPve?ID>noh6-e=?Fw9gtp&(%-m`nV#zJFeDJheCoB*9Z0kqNb(;@NgqgS8%W19y32uVmcd-v z!F;R1LjS?y^udz0!Lr4{ip#+&majFkU+b*CHsBdu`q!4WuWgI}FuD$wp)T2f7+tUb zP(Pm0U5ejo85)T;9KIa-4@8I0w$HZ>r?Ct#UJlEz4KK@%xIM{O^B;jH=Eg*hM6txS zctZ7;WA}#oF7JmQzqdTxdz~#a8X)t&DLbdpQ&l@V^OB{>I<`)Dl zAvjT@oT-U`4}nz(qFpU(n+`ci>l#UQYv%BvSca)TOqsnhW5&0A z#{b()z|~9;>um77*--1*@HeyQjM=FF4bjOe-2-zpu|icLoz1!8T_kqzQik(CTL3K` z6Cd+guX2eT00=GpJb)t7IE1GG8fixJM81^HwpB<)kSCr`0OO~HOlwE<7YeugCyE5L zfH43@=MdrHHs7+JX01eg%nR7%&IybY7U8Hxs#oPWdl{YhTAgxk(QvhAx-SC1e7@NM z-?QhZ-z4J~-a@`ov*-~kJs{GC8aRw;zwM&u(_^@bq2dr-I^$tPpnD+FRfahmR+wn6)kZ1pssX`fS9k?za_lBMuf1%PgG z<#1q*zZ%r}44`IX;J>05kaJ(5Cv3$~5+4AgzEY&me+V~?5-TpoIR3Mv`WwT`GWH{Z zqYZE;iZi3ZKI&8w29^+FqXqCCQ2_pR4VZ`H%HY3pSK#iT&f!XtAx7=3qTFx5^#w4Q z4fjG*EhC8>g4R16Vf>mvEp8qTe()}^V&lizor0Q8299-0ZhN;1M%@G=?D!&VWsR{@ znvtJs0^mub7B4o~Ce0yN8LN#w$eiyaab8aB$c37@k;PvFU)+}+I=;N9j-;|H_sImX zIlaWyL@$%6{)obJGO0R+seXOifeR4w%uq2XQL*pABLdpk7;SeJ7iHf4u_#dT0Ih{ruN|>2CnuYhynRmOl-Bcp4sfiq1NX`g|I_bQ+60#ju~n z%bz7aJWC2ZOUXJ*`+SzZbe4%b%Vs~%l|RpacwQKIUYvDa^7*`M>AXT0n|)DPxioRE zAYOa=w)XY}Rb>>IL)ZvhElL8r|7LHg;TJ~g)-=`Do4=?*>tDq|4@x(y%zvsG+0xQ|Nk($ zjSfy&mVy)mca&l}?(#~;2+$Z!{hx@=xZI}a39?)MH7K8!`o@#xy;2j4x6O5joRN}^Mb%^qosVU-VOG5_r__+IE?@6b_H zA~!rz__=}GS9u-~mGi$LI&8W1=Wy1G<5|>Q-1W1#mton@!ldm&^?tw5qR0PGzN%(g zoxR)`&XA7~W*&^=)XJY?;Zq^Kzjt3=jhNl$();)NaF&{GobP{UbbVP5aRJv?S2$v% z0wFP1l>!*9j8uf)aHvuwW)DRwk?`hMDUsdoM&75myH<4{E)Nk=rc&doR;JNa7Ez%y zb*NUk@i6qiBf7O}HTFQr9d(Wft{QdDcglAja3?#|JmAd=y`#ZjlwYH9tFrr!rcmQr zjppso5K%3WKCW6V(NSelZSfh0TJ8Ue=(8q$X zD1a47#69#M@D><#kuk9nPTaq>UT3HaZbPux36C8a8tSST%fUv*d2dk2F^CzPI~UNk z>76|`22Z-5A0evJTodb3J z3~em2jO?kuL2i51r>EqY-!N}o{VjGred#z!)0kz&k!K#5N8Uqd-&$O$J1Vom^%e47|ejq z2pnN(cKRR#vYSrG+Q$c8tgbr3Zu}MD6@7e-I&&&W#`Zg8X7!5CCuvV{;*hVVPWv-a z(tMG-G5rX%Q(+&^2aci~IrFU7PsfetY5yX($*FbDxie~h_WI@5`h53c55U?;4c?Rt z5~vFFr3%l^|KpUtZJ85(nPDyrSh(=k16$NS*-s)Ef}>nyk3Q%l=YAGx|4hy>pAWwi zENrwL#UDVFX6><{_QHhy^Xm;6$2Yw`P(41Gj$HoF(2^^!b=Q$M?DiR(&RJH1>Igz2 zf$Sg@)uN90+4|=|?$AF7*liLXf^J#;FHq`ktqElF@HxMFd5~R@y zYx7K`S0{t;r*z6&byU5jbATYe*du<{si4$%K|{8x0stzUQF%vQQ(3WaHW;NuIuZZo zWe!=xW-!eW66P%1xhO29VPNyoGMqYvQ?psaL}Ea%(%SRurk;^^Sn|zEg+MItF9q|)=PP2m?cGeBA!2$4%ph*tGdi-o49?|&{=ikp7+?1$#8zzW*v~(8AYxG`P#~VaLtzph-L`Ry) zszjSM2H`ZKC(SE(N)wKN@K<@&ts4o^rYL00-cf|zrE+oMFV*AJQzO+yD?R4-3*E*u zR*+|~(?^A{*Q(g&W!Ew({tL(tY&S_a>)?x+s&AvDIV8FJU$wK5q5IU~b@M)5Krz8W zm(eCH=N`!Qp5@5ccP~Ea$lK0&NbA+!*Cnbz@Uy;!$osxq?zQS zrcU769n9-8OY-P6g2LVn%yz%C@7^_Ws5x#AEG+i7L)XbFxZRM(GrbI9)f7ziR205O z)lEZmsrI{#7c=}z3!%eDDSN^J-0tq6v%2o%^dNWswhyMqZIS@`|>7ak!d2Hp4 zgPMZ@xtvovVzzCh{we$(uW)`feZUNuuqrQx;ABb zD&X5Yn~8Hcr}}7r{!!GL>0oYcI}U1 zQKB$@FE?HLiSRPfT=cGA6VVC-+8onfzD#O^6sei5D0?N90V7-5jk01uDXtDYeCBGbe6(9Wjm6U*Y@cM7* zN0U+#7ZDr`Ab`AcjG+^y7ko=nk@hIESms`vYv+w_r3d_Ve8{`cC!r07VvZriaS7Fe zv%wr4Brg>@6b?bS+q1#EO`yuWx&S0vyto9;)rxYdNz;Q;w}JS`ku`4oTdl2AtzCl3 z%JOqvV69F|O|+m{+tyqJejrhOwv!{h3k5_3s)z6efn)`n=AA51P_4{X zl`Jz_Wb8AinHZ|7C9p~8t$|SRq5S@7*Q1e;!;{M3**k}1N;sjMIN?-1?^hHD`C?$Y+ z`bCB(NN{zhLL8F8JjkAyO9{?w5SIgpCmTezrgW4W99b93R$4+HQpMRs!h=Ebjum0r znqJeCa~z@s|MZU=RPvq@?i347xvKAk^yj4~n2UaT5dylLC>kOa5?fRk7%RhpZYR)I zaS|wS+71la2Y0tdp2nAdCl$^WuHA9^gd`x+xDfD<=rimIqM>!#CO!LU^_NDJ_kY@3=_t#0W z!S7tUB4^sMv?HIg2ey$T`+Gt>v%;4G8i#@-oBp@AS%i0v9*Fr@ErE28Tt^SOg;3NQ zUx$W%E9>1#t#5mx(x5R$ydDqrEW^uTq&?Im8G4m9V-y9{e?Rr0U`nHYO0#E5YkEq1eM;weN*6knm{J#8R9ZKyJBWIS!`IBnuNZ5lRh z_I}#DVA`U7+OlWbYI@pwecI-D`XLl+ONX`N#@dTxAE{s+jIoZ6SSL@ca~Rg;J@#<{ z_DMa~wFmoj8vAS=`}`RD0y^VHH{;Gd^HO}~mCB5V@r#!N`_cJ~PGrsjR zemyh((=%_@X9A9A0->`(bh9Y#*KOP4MNu!K2?#7u%M>UEg2XrA5C(!O?nSEtt9J}giNhdFF#+a^xFQ2Q(7rgRjcpZ* zA|j87^6bPC65B>ewGBXQwyGe{A}M%!m)%5_MHXmk10Y>DeG1z z>kn<(Eh`piiJY9?Slm`1uorf6d^3NCAV|^1>Crc^WbDS1h7B{#RaaH4`7GrP?8XbC zO*i^Ycb?6c5}U77H$6-?J)Jhayf$BlZ+a(f`V?;ZHf;L!Zu(<4-)w9KoNNXXZ3WS9 zp?J1}CALCTw?a*}!ko6ky|yC4x6nyjxX8k-sD`b#y<5@Pt(c9i*psbyMB5np?Kqz8 zc!})<)$K%+?e|XGNnYE@;oB)m+o^@yX${*SdbiWD+Zh|%nJ3#>L_68^J2^Z%xe_~h zs`$IKodTzwLa&{o@SWnMosWe(B@H{Jy*p*to$`&Hij$p6qTMR`-D;lQ8j0On)!jOi z-Fm0p2Cv=5@ZF}Q-R8pGmWJKd-rY9rZu`dWr<2{!M0*|dd!0OcT@rg=RQI|~_IjN5 zdcF4g!uR@<_67>~1{?Oi_U;W~_l7t2Mo#udiT20n_s4nmCnWYKRrjY%_NSfpv0nQ# z;rp{m`*Vf(y|Dd--u*@Fvy9-+xWKLbZw>k1ub(Yb=6BzGu6XC*M{n+$$pNeV!3LH? zJ>)4;Q?OQb5VeKTWj;sa%cg`TQ40MMNw{H8VTrIn{p_` zZ+>{P97e>{Rt60te1ecuK^+qD{{8L8_zG;-j2`J^LzkM*3MXa)Ib82+U3-_1gDyje*9|27NntOeO4 z(1H90>i=OD{(Jo+O&MhmQH>#1v@-gi^$(3Y7quw*hfLQ0G7AH1JW{E0hKm1h{o_B) z!feLUOzXF90{9ErHlHuRAmJ_z}+=`+v5c{h|I!wr2~LJ^#1*M`gnMcGSxK!p^TdS-$54 z=lOGHD_1v`Q81q3Ws{nwgl}SjfP)J4LqQh~^(mOgQW%TZ)=I>Ofj@9D?kfp|O}4Tq zhHen$0x*ILI58CHrY&Q6iH+hPv9k1Bee%p*Ub>1Vkm?W-$Tz1)a^S}_4)3(j!0U-d zCM3)6&U(Tr6d&j@kSo%m+^m9i>GQkg*Y_T+r#)@h-uM8W<6M2ZOFNaTFnF2ANGi&m zqMdrW(94wypV14@OBUrz)#G?tS~kvfBh{e&P?EyNJ!QKO=LG$3O%8A1&~MjF+N&BquKwx|9&M zhj5sX-tjxKc_HmCQX`stb1YrV+&HXr7%4dFko?TczS-0HCyA0@lh}P^{k{0HM|sJ| zbKaX2>!ZGZar=Llf|z$-Er;HCe!AlNJLYsX`tE^bP>8(n*;=CMb=qo@bH&+4`VTsv zf9fCSTNZXY=i9|a6)oCXl?Ug$Red9v?V6eA7yJ2*u@?tze-9-0KM~))JapdGx%}17 z`w)3Jc=zY!pE4%+)zOscPo6(m=gO-Sc8$@izsnJoGt{7Z3~1u6-RjF|1DPQ!SI1VIol?|||nkvBQVg2-8NJ89+*!z(WkipsV$drixb z7o{X5ICu5#n^C$EFdw`7f+8~9Our)a#Iju>AbCMF!7DBQY;azGkFW$h5}XsNkj{tE zM*m{xOR-mavehHeLgkaffM$Z$pheEP-;y$}GXL%GTaI(5fu{aYoOPk$E2AV0-^;r> zmrNWjsf-~S|8bs;2vf1RaGZ>e%Bf>m|k zh_$-iY23+~B$GiQ-b_8tPim5 zJ7n=Br!hwyp<+>YgA^n9T#gEmS2_=z1u#K16&cErid#y+B<1(Y*Br*YPpLmjD_(vn zxc80y2DMVu3$Y*UrU0pMF9NVAUa`h?fN7@>A-P@$aC@{8H*TB^WrQc$7!XZwn$fN! z2gmzERo&+ZeTVc_M1n#;S3Y1Y1B1Zry?f=AtBEoj#BDwy(RXH%7%|&FRl|O~hW&rx zkGaCNFwmbGLZ~E{t;Uh%BU8M(mCy7$TXP0GqghKclrfES&dfHT5XE9Rrn}a9c4PS zO8<{p7+W3fto4Iw;j~wBq&oKX&=0nY(>?{t8cc-N+D+!O{(sEE`C*qX#5 zt#tv*GkpA`CaG~~UD)sJt1V?M-Ynd>^WkjBMW;4xW@tmA^$a)c7F(OXskJGMHw%63 z28>TZ3HLrLWB8YuGKu%)?)@Ebk=!br+mk7R-M>^2cxCw zJCqpCFMs`G+l4>>UY3q0`yWmbtC(mGQservB4>W2qyroExLQR?NObU;Jx7d!I(1z~ zgt@a6R?-72@4Fv&6VvMoabJabpTZgGlttz5oV>Sm+oCA>!M*~Z%ZYQtZ&)emKz;gH zZE53fdNYj^xi8l(al>Ds)fP^5*cgZO06LEvu5YnZiqYnAwyi%{pw%9qRLXLRoWUG9 z_ejcM!oh;q5w>JEs%swk76zLAU_Ul{r%)#J7PXvBUXN2Jj#XcY61s`W1bZGL_a$DhZVIva82ji&+t}0@k>y~Ig2`|Gh6Na zh%yXexT|?XgoPm(+;8!S{m*O?K_?iVPO-K@Wlpr%$;C(liI%nd>&8GnA&7ySvT>Mx zfkvJDLajaK>aB{9mb81xQl~B2IUcWOw!^R9h1U_^*6r zzvQ0Ck8$|GEp0d)mJ1ZaDtHTMKsHo%5{g7g9wo1A5KmUkb~(xSQDv@;LAvVwD%6Ko zkyXzxfEN0Ix?d~o^d=5`XYvizmbCuM=|s)zIC7`{AygA0nYXf zqb~2GG*Bp(SrpqT3W2YGNCtD61@m|Z^Q8m}GzH^dw1iKCkqjYsBtyi^LL|IHBvV49 zoA7HlA#(Wm2SccmWT>)PsH%6UdP=B9Q>fN#DBjJ|V+b>l3^OtdGw}{1@`6A&G;G4c zY}ENI)PaTLFbA`6C+~2Vl<+4_;ZJA7+c}|nK=^aX2;rO1m+BGT#RyAGgntU6e(cs8 z1~i!gMU$;fus8ZQhZ!X9A$k_Qh(nQwZKC5{*ya?-D#RjFQXEdEQZ#E0Kl~QDqEFug2VxXQOJG7_Y_OHZ(EnW8OA4y=|L)`|0#;2Saq1WOTP# zbgy@Ge@gUVQ}obm^vG%S7(>j2WXzOV4Awhl79am;idmeE`F zWDoOXFP~)Z)MVf0WdFJ3fV1SFGvGB%N-XS_uv-c`H6^M!C3-F;_ACX%m>MsYnrNPy zn#1QyvuzS;Qt2Wd+-`TRd-A;6SF&6K(GAii2LnP-K| zENm$-Y+*H?FZfTh@I32b39DV&e=!S7KDef_KC>wDZ7K4fFA6v>;`A*Vk1GnYC=T~6 zMyC}=X=DcDNLfQ$iZM(dSx$_oGi%b<8z7<<(6{OM?x%w45 z=M{%cmA|7h_n4Rtq$^L;D$iRgN6ag;-77Ddsz5STmpheNgjJ9aRiv#|OHZmYQB~y3 z)zmW8Y)lk;9hAR~1LbcyQqxvqZn`Tq&MH7u{lS^r%D|2z+LIvhSbK0#2 zhYPU$TZ&&}WX&I&ME#miTAGVLv`8&9%VEHeEt_xdG$f5Tl~}emT$GpXg0pY6_`5bg z@N4a0ZX^8KQlZ)0&fHpfQQ6hnHbhq0+}bLaUEhDvI&9gF-7W9FXffMujrME*e$hUH zJ8#QjZdY4q81SoF{_tsMp>$5Oc|oRq%U-Om_0y5%=ZL8Kgb!r$mY)K4S%s0GPnbJE zRz>$qTa9nkat?y;xPAKI&Lkz>0kCvpov}$r>DWRpcXOm{^X6Bmsad*iS{1+c zYn1!YnCsfWP2TaBgk8R>lauAko#;YyviirnkaE99c8i=X4zRTB7X_AX`zLiOx9a)I zAmN%Vl)iOR2r%2;XFOW8gTtGoR1@V0U z|7I4->odMVeRV1R`o8n4)9j5_@*zjQq0d@F4_$_8-VQ0a4AJ)w8E*}dlMgHM4UcLG z3JuUrY7MtO8s796DvKXBuO41p9R4mi)DaIkp(RA7(y9LqT$h#Iyd16joW`(}R{6Nw z1f}UQeC~uUT@~PBrTRxV9G)rzdD(CTKF^S4Y!_hSB-DF0Z7DK|TSk$Ph z&|p(Ra3T(3d{g_VD#CIcRO$RoG@E2a0+4(*TU9$zZck~-jlW-`qp=3A>?hK!Wzs1G zdH&GF9*V*A;YlvyMM5%Ld&3p>HUb^9rj2xiwn6Xogt1}^b?u{pg+ryegg4wl@t1I- zE!rB^01;&nGtc6O_PC|Jp|qFwAP$}|?Qbt|`SgGGz7fTITNMhOu=>8C{e9~yWV8K$ zuYU|rPF~{c9|4l#$^nGe!Ql?-m&VI?U{KblNu+YYs)x&D!vBx@N2a6FA*72Nuuh?S zExF3tv?>_jsNVq*QLwq4`I;maxNGx+rHSkiag+Cqw!Zj>UZLT(-g~Wa$UE+}8{VrL zpB!4oXbn1`TEGg_PMr|Drq}zUHD(=KWN3wte|+LMqWk|F|G@pP^^btD>sv3fnUTk&53T9JR5Zve}=_+@Jrnzxc2C2iw7_+`*d7!A8KrR_4LZ zr+>vi4i4FV{+9cxp-ON>X?_y$^Z&5--ce1r+rBT5kc4#U0!k1BsRl&45U_wqiP98M zq9CB4M7kmpx*`IK3My*oRR~3T2kE^l7LY2Sgx<*ssPF4r_Bw0td-gqh-Mjv0493WB zJkRr;^ZS|Kxq3B%figYi4*?UuZX!>toI^8X(B5rR00;aeGnJ`~`dF4>;{^lcJ{9eS zXP}`3Hc-56YyjfSS~i%Iz-Y@b+wKg=z@Rw^vu$w<%-*1g@)-#l>V$0REYp3)18Uk* z7W9pKR0Z!jMcN?-JcAMkgn4jo$9)EN92!jlC*eT=(!6?^Dt{}m;}(OQ11k>}oH4-6 zfoBAtWJF>YJ{@3S#2U9qp>@9P;GpM}4l;v@3=D14zzU{I4y+K|V!GwD8x6&TV?`1f zSa34{=_RIXJtENz{IngAFb3z0CARrxN7M>)7ii!4Wg2PaA-^hsvdltV67k-q49k|8 z8Rz#1tcL2ZP90wI)Mt%#V9jh@%{Z_|DO=47UCZG=np?JZu4}Dy`X~@jt(ZPmWwBoO za=oE!z3J0>O9q;Ou-dABgab3v>9x`Ka^u~!v?z^+(hG-vP+RQhSBHcx(a;P4iWhxA zcTHep=##?eeokK6W~eW-_23j4!*WWW7RW~XBU$LfH$Z;pL>l~O$ig4tAK4=>OqkSn zC6NvOHvB^$VEE>#(WG(u*^*n#yv9?fvo1EjIQq=^SF%u)@%uPZ;YrQCuMO#B;X$Kc(m!nCUmKe_yg6uc)@@{qEM%5D zeLiq+?rBRpS$O7R#Kqh*HZT3O-Rv>tTh4Tr%sACG}{kg33&j<1cC|tNBl8}Gl?*1AD z%iqF3tnOGrxX?B> z^qA76_z3I5ONlRkgn!U3r)JbB*}cjeEwsxh11Z~Q)(RKdXSW_xzVf=)y68&YrvT-v z1!Do{^nHl#mX$j;2mR15hz`P5S~!N^4HH2I0fu#8C*yw*#Xyfs&y0C< z_m?P!TPllVpP29e#zkZS}R=ahhg%kxb)u*lk7jGrGGa}J~ZZKd@3XTAuT;W zbEq~YFCpo3kVNkI=eyYNap|^0_Y}4blf`j*6az?fIP3`LrQ!Qp!pU)#c${?G zjuXd3(i@reBwJ`geZK@875Pib;7Ar zSzA#I*=>*aHp;gf+g-UbWS;sp_f>o4*Svv{9_{?$$96lp&UeYQu>wW!`xj7a>`wCn z-(aRomZ3FA*mc@2ze5%#n7`x4XW`RjR8vyIr=?I;HOxn_ke!$f6iYOWOrmYi=p!gXc7T}$NEe8+ZL zI$l$9q07+Z%0l;Pn^y}x=G##Wfs%`Tbi-uvt!?6~#dr33Ul;p{wUSHkoqMk=eK`9y z8u{_2CT+Y`)f0>qP@_$CwyGUvNvC(c(51^m%!R&azMf?|k{CIe*Q~b8{_vj4!n#vH z+_2SErJEo3I4kay)Vi@cIdy0@bQsj_6nI>G-4{Mp9IF{9kz=PGuoKkWwl*_$iSd{m zAo-g2Or0kG?s;H5JyjjU?ecK`eXP6&Owf7%=JIfa!{*9(V#bzXGQGJ*t=&&spYL^` zZ7h#%87529+iB?xV6E~k!vvy3X5y+V2Psj#(R9N^M5_X7O7-DxB7@}XDv&p*z8H8k zL{qDh^(obFpH4K?q^^>)km`>Oj)vQ4Rq@ab6NRQ|q+4Cp?p10a4jzN11=0-@o|)TP zIx(yfb=AU3bi*V#hCNa1jhN|7(CMZa&OEwda%1N1c3iqvjm*=TU|XG7p5D3|xx$%y z#Nb%IF|AsqcQYaGO|iS_hKcIxOehH+hXEh2)8Ls6yR8$qhpWEsn9}V1u;4hM>ph^| zI*#78R9~pnlXCarr?c;khusw6S(GH3y%=5Uggr}=4LrJfwImNZ)zyOVFkj0$89 zrpmt-Km8@8x3uD5hUaTB3qVnCHq&FuH8VTI9d>zTJ&!V-4D8JW#N}&G$z}PLNW7Ow zJ(E3SfZ;im%o;_6y9!z6Xj8tNzc%aJQ@Hq=a`uvq_~Mx$8dG=d?yt5w*F1uKH-&P` zJ-^zE8k-5c=gdnyl&v6kS-v05B-V5sz`;WGs_(V?Q%KzrM|N2nlr%hun(WNUH_6y?DG#-UgZ5E0< zScgD)6;V=ok?32pNMO`gu;(~O_1`6726Kq4+*LCjSoC;sF(lG%FX!}~yvG*?(<7@Z zJf(w;B!<%bmnshCzPooR$};IIckQ8&cOe3NRsuBcx}(-lVUM>Albt7yyFOh=pc^Jm z2O3W0W<8$1b1}i_490M?_E5q5k@z!bnkb;mV$ zSKDsu<-~9`j~`QBZ4V2{iK9m`Xq&BeM7HE4$Txq{^H|-AOHb0&ojCPuwJT{WilKSJ zxM;PT67o9DMt9P*f3+vS<#oDS^W?d;)!uSsE+tTR>H@9CqDGINvdYY^v{A)!3cnb} z(+%`47u-jA==$L1OvCfKAxvOrZkR?}xGc9&|L5Euo+u*oz70!-R8L-NA+-1eHZg%@E0)gW1So!{3Cpl!x@SU=K*fy(DLCeUtR3@q4g z^7HOc~2YjAQ+8QP=#%Q zdh;>78{=B~g&h$s^9jluU+|%YU5R=NDP|iJTXE@mEeq)$8bDO>%b zcfBo(xkVdaiJ?XB$Mlv8`!~LArKK;mES0WpOp{Q>17Q8-O5RQCZT;fUT&>GB%9}G` zTWRU~D-C9wvyrXEqw=jQEgqY5WK_wxrv7TjR$97#$%IMkYERKE0S5PyDI5K@cm11- z`DMb4>||2k*j8G4DK$`k{WC9ZxlX^d07SmIx?H+4dtG(jiw*s|0%B*-Vu%Ei|3(1` zXmBCHw}Sqxfc}1AjBvvaw5VRrZwq6zx5KEm70{QuqW~wRKP-%)D;J%KljDZ6;QYX!yGVx^d#2<*OeGh$h2Aa|V1@KzBdR7ZrR*M*h4o=D$$^4L{J4 z`!XDkKPI|`j9eOdblN(3%jSM7Q_Fj6ShVNFM!;j1X%?$D*8jE{#2>uYDPN zadYv@*h>;fY@ED}jNBGZ8IK8;n;4G`+X|z4Xngt0cVr~Wb>d4RIY4Y8Dem#*iSPSj z(sCyzQYkewvB|WYp39T3@<&r9(~B1;CNut40Ui5}jC_6FXH8c??_DS93MfGQ+m-_Q zRxqBB`mJy(ck){ibqg7p@3EsRpwZOn()Gp3=`sfJ|3n4kKK5$qOyk&)Gjw7hL(L~3m+XA2q0A4}gxM%Jdw zw~&!)E{82-Bx8NHNxn>!MJNihG2b$&vat|t6nbF3&nBa!nadWvu^^N{eZQo00nb2> zn#KC8Ni<;oYYK=hiP75rFhH=*8z;A=fbhOdJH0i`>HTKh;D1>GX*;XS%zNKsU&cZ8 z%VW4}wQ9ua!&J0=I_kj$KbgN%K$?dNNjp~uVz};Mm_@M_VYlhX2$$j!QHVMSOwWSe zdAwfRboN1HQ=G7TeZAg|2jO0DAvMY%(_U;eOTc=Z*xItMFXa3qN^rb{&GE+VeKGX@ z^Fjscmc1oV<#wgeo8?gRmJW!D!b_YZLzNuQ+>^H81lh#n&6iEH!;7ZkF`iUE5z760 zy>J^8{|bs@v&tXOkf`vx0+P(GN1c1{;MphV1eFh>v`X)F!b=835)Q0QUl=2MdwyzU z-^l^L1KNY+UY%Gq0qyo6dKeXV^S*tI^(Xv$*mwo0i~{^A?dIBs7@9<~wn;ksW&-5vTg`S}=!SW|pC! zgstX@cO6f2gWq=9V=}!NVYmS%&iry_E28N>T2Ss*7}Zs`{;IPRf;<@tni#c6-+fjYu7VvvOpQ zUY`en51C)d-9ib7KBFb5Q1MJ3t$|eF2{B)HtCB6oZX+W$SlVG?2rqJ+hWaN%UfV4^HmtM~OEA?B*h$r{R)!auc7NFTj zdEb!{?OXe|krBJ=w5F?D$jJM13Y{x0?k#hdzNT#}Ag_@F+Y0EgQCq;40(y1o$bl^d zB#YZ6xvhXY;$*iKkk_fs7h4LbL=zvrrGO4fcc*PDplh-Rw-u0CWOweC0@^ryW^PLX zx$qc`GcAMG`s!}E@WL)kSt+l*jlOEBrWwX$t+Dp5Z&X&1<-ymh9=sj(vRaX4y5Ag! z-a<5RT1aR6Z>~lCO(z!&u9&#ZsuZq2WeZE1=erZ*Hw?AJ_h@fMz3F*GH9UD{Y~r z^NIQ!6I=UYT1yx6S~tFV(AEY}WtW!e!)LS4XzSzpWvjidn~O!X4QgoF`j|d#wV$@R z+*-D|)Jof2qt~I_BqjwC@H7eJPJ%>|p!p7h#=RBs`OEazz-Ay)J+{U>$?ZMypU#_%`&r%Fy5=sas=ee@stPk*nzw$}9- zX>?_a{#e)di~6Fk>r*v25(W8XUEg;9>1cg+XW0wOKd3J^@*XXw%&4Sa`cGKB9b!kq zuuVVvPib;&?_LR>(u)7St&iS+I@BifTmQ+~O(rUT%M{6OW-g#zon!I16c(&n6^r%xTGJX_{H^hT zm-lr02`?sS!(=QN?h;Lal}7yFL%Nlu))g>F|DY z<;&c;IiO=%$*_ah`lLloL!kH4oBgD|@^T2p1`VWd%i~)6wDdVooq84}z}W={Nss!J z5D3@DPY8eowTirM@ArFl9}frb@!b()%S_{Dgc?O^coJe=X?2Y1G%H;79@ZHRHA-|) zQk$R1FdBknduIM9$Rhny}pcr9XffL-2-~<6L=cHP}=OYEJIafzp!Vc4f{4 z5y=j`Ja`SZV6?wpgX80zrWi>!YoK5q`G%T(#fn}%oDUuysiR^o!(Y(kbEpEM=bnH% z80O2@=d+7x9mjg@`kO03So-K(^)J zoAw$=YiT57E(r``wB>yyiuXD+7{gs+E8>sQ^NbSY5=UDpGt$vqV?&Fb&9)*>$^m8s zLC&x~Uw90rlb&A9|c$v)|146`7XLqI;>_7uRi zNf;}XBK$n1N~=Nlm8wn*tuDo6C#WY=J1x!HpWC#v(C9(dLh4mdyQ*B#-rF0}X>1&J zXLq>vN|rihkPvCx>WgQQvKPinpp-Z zC z`saVOC+?kUVBdZooFP8U7Y{p;=IU9DwrAyW16|8+$Ckp;Qg(X_ATcd50+d3 zDde4=XAub|Hpy|32bkvjET?a_x7iVcRr_tJ>Wgn3^qrSJ&1EA%JYlGkmBX5s&4Sh-nD9UCn)Lh)LaC02Z&6_5M2Q&g!@Y_t>?gl2`BF z<#h6<+Y`qQLj8hNWXYvljgUA`7&pX@eGWmvaHIGkDdYF|KFT<6hho~d7$kF%N`e6)gHe(}%kM3k6xA_T&u_r1Xe5-$g$1obX5OY-W z?a4b&yTT+F5^z^0>g~mhBK)&bPB*6*=QVVv-}s&sy;Yn){hk!v+t8C+xbTYjJt?~I z-9oy1^Y^6a)rCJk4-%&x2Yg7sh<|Ci`1b|W{N;AHZF{43=o#>s)j!dCH6JIU6Q2BG zSNFE~hncBF-TvdQZnbyCPefCHF`oqmL|Oad0q=gS>P|mfBz7c;=<(BhE_O69p-8f_ zo%=5S>v=+cn9mk3(zaK1AHM6_aQ!dl^N-v8U&(y_xA_0hivI(R^lMbVO-+Bo2gF67 zwn8*uXPsl!#mU~CI%O!CP<-NqYAI0dKTTZf=eQ$P_$4tkS#Ioc_SK3m%6{3xsq9`U>xq1~ zbd=ojp=LC-N#3H6YVz@%%5d%Bwjzxd8=A_zvGI$dne`^NX6AiDrNxWQPN5^CpVV6N zR6pCbRW5*{UzVOA1NQ}=*wctm&3s5EV+$v%kXS>v#^Ox2fWnX}nZ1fDTDr#pHFCBvVCS$>&W-ZG#l zfbzfGf_0RC)_^hzA!%K^(Ddvtx8U8opbnMax1nscKn}?xj%0R4>!$s_4dvGsh_Z2O z8Qa+}6F(80*rvHqyEhp=Y~tTW&KOs1pALcvH{)*tZcB??Fs1Nd%Dq{Se`;xvKC`@SKq>a#MCB|G|1_Wqsvp6eSH^xAP%m7@ zX~F4RGs{~Blt)wHMS)b5q%Hf!P+#{aZ83{L=H=Gt2KgLpf-?geEd7q)w2iiIBRHXs8>`z0jx#rnX$!$YdjeFp5uEY8lx+mZWvQHH z3&EK;XFjln;82LX>*Os2=e0j&8^OtNt>oB3aNwpe%Pj;a?BapqZ3O4u2xSYw8K&K& zw?KIA-ws`iMn}{gsoXVlM^)>>+EY4$gWM6MQnv>ccN)EPhK}G=^Rj!A-$*`o2s%$k zaK?oF__?DmAsQJ`@5TWFn3>?S=5z$dT}}ZSeb0$q12f5eRAupA=xv?hp3P;zUIlfQ zFlQ?vPcm?i^$bzlkZwR7&o+7JyNhg9D;Gr#!uvS#J`#%Eseb#IUg7K`+z_K^-%N;p zmf-F@*^4Talhr49q{1oi1g!d~uej_Ww2oav^v%h7O(pLKkInZEk`$XRo3dHHd-s`5 z`;N8-=l#2Z#R+r-Crh!V9nyGn6g6e5Nt{h^8KxsRYQla3L<5$K^B0Gft!a|`TjpLe zTs(bf`icIf3o`pR;Yk|xD|D!#{q`x9NF1m3Nq;%RhmY17kL(IW`x?*34ml_7oOZ9h zBpi1SqnoU7v;q5o^8pch-&@m2+dwbNFxFopd4T6Z+tXFqd-5({1{}j80`dp8x1mHd zbS3;Spc21tL-~gqH?uTm_h1rZ?mO+?j8l{8aK#CUkD2#)>ImZd&=4ro-QG$mYfj=T z#v{kdw_6~B*fgs#)-%-sLjX+b-jkF!g4rOq5#3vGf9b4=$?>FAYv ze-K+LB%HtMl-F;{$Jd=Ngkf~8wR`jyx%g^2DUgnGe4M{pRkV*Hb$zUneJ+NO@%5hg ztzM6}6%7%k4A$B(*SkKP+{0yz^h#`N8_JKFWf7f0s2P1`c{8}eedsORLt(GOWb>AJ z!s;tj-Sdue$ApiS-6^tKB4p+$p6|lW{?mf8#xu$eO_qVf?$w8oGKX)aSqkv3V2-%X z+>eMF&XZiJ*A18nciw@ogODYxlv6lz+r!E;;+Q(zl)ClYrMy^Xp|zk5~(~> zUewH)Q4VuZ>8CTnXca28s*E8uH5sMaW#>=~5o`)k(1vvFFK2`Wiz-aIA?#e+h!^cS9{Cb%x-zsQBK`VAQ2L9N*7T~YN$`WcYs|TEP6LX^dm7`uud_Rq)ux^SZLw zTZg8*hE&%k%GmT^Lc#mn=4k_7r7wkwS=Cf$pLx?hiBRK(gyx5#IDP7x3@x8^Pt{yC}F<3zI6+ALXuGFj?e>CkU z17}Cf)mHJ=U;}R{Rj_c~)H*_kO7%4)Vpy-aA5l}E4pdY510BEBepaBzdi~X%{HNN_ zCwxUQr=pg#w%kdliT6L*un)&Ck(>TN$8X%JA3qr=n|S%dFL%Y(qQWg{-edK`OS-?| z`H8$OHY{&q#qIOusN3t~`l7<-!h@}P z&oOPPIvxCy;`6A&!gl2rKCAMPUt_whTZ+P zZ)%+lr95LFTP;3=7NVfkgw}ma<4ZfH%g})L88|R47F!j&iS^r|v5xUWA^DpCDB4Z? znM&@66l$fw+5n&)z;YkZAR1Vhg~McL-)rOy)xlRD^t~~srpRARX$3Iu%1P8lb;-0s z4wg74oT9O1u|h-)7rLT2zhyjk^JPDAGO`cj;C=ZCOQfyzN{L(w509dsNQRM=zTKH(A-}VEg1Dt(R|1PdPqHH?M=b*mu)&e!ljaB z!SY7g(Ohjy1~=9{WJM}8e?S#=a{)-n8jyC|!F zoE9MhdEvKu+Aakh&2;7c)^<_)13xL8MlgeX`{5b+uBZM$3WOWne|SbWDKcZN-(Xe2I8@1RhuZLD zl{oF;WL25!us9X909C@4%|NB8l|U|dQu*NHRBY9Xl8$Zl8K4RU$7Cj9TRnTVIJ4F} zKs^f1O$)^3r-9aB}~~vlnbu8){M*uR~8oqNpX$2SdF?W=0$DlxqBXK(EnX)wfK) z9nkR$Yrd0VF&dAsmJLzAhV<1P1$shv{m%Tz4kdW+ zGu6BKHizEu`g2I%nXnt1&%Ovn?`58fde8^YtV8$?G%AEYnSGS`#S6uibg5QKxsfK4kH7(&MAD-he}tg9p;l-E?46YQ9y-Qwk(IMIN!?u zfTNZBj=yj#RSe%3yrFj}E$>{bT3Q(!5-F8WsZ?XGCn`O7U6yrYvcHQ!#Vz>xGC@V7 z$m`#Ay^m{&td6%b2%)KzTZr1MKG4lPX zUHzonO4}1b*T=6XdoSzHd4H$(emu4D2X4Xmzt2wm`y~Ij&Q8Eyv8s~qrsF18F>R<( zV=*8qmU6gFPPO>LG;Vp5!J#-DdVjhU@a8ZD*S~LOe|h+9d6n81rJ2xD7S!;O!f!J6 zUn-L*;S|*7W;UfJ5*nSMpnaQ9rv900u`VYjqlrGmEiT|!CfI79+$cAccA$Ccwo_)S znniQ|}LSJ)RwqX*zDOv9FWg=GE)igP+!2s!V)Ua^uVsrxxA@ z1(eA32bzAB?jb6R5o-sB2YmZnY9C8h!6$fUv(DRRt__mCxhd|KQQ3A5}+7Xdn~#eC7OpgUZ{I zzm&4uNA>YTo=rRHu+cJI8s#?b+8-WW%=1l;74)cD6yY~jJhb>8_=tR_;JYfO4|?yO z3wD7x86+l>e!5IJ`ry+wlkYGt3G%~h4-wCw#cjd3+}{Vihk7{r_I`P{!^-mep!Xv@ zqi(_;W2wE*%C?T``jYUlc-ko?34C?OXdgWpH+`*un);mFLbGlt*&g&ZY062?-yU-+ zo48>2L4Iy-@>46nv+!`;g2;d0p!fgvM|bLf)R@yahvIGfS8T!-lZXHJgWk^e+UrE; zbZtncZ2CUfJOHKtDaE-vqx3NT(CJSNF1=|=T}&*`j@DMNJoA>cdq)ETe|@X88Mpu; ze>njEbXh3$w`E}=<o#TqI~JmOPt8bZl}A)~`8Ax!ZDl`PEBDhC<~g<-R5 za^md2$Sy(pU4DsyzAFMkW1z9{X;J6}6ogI8ysnLWHvp)nzAd|a1b3f$=$;v?8G09V zd0i_juHO3@D2AKm{!o3yRsp4WlJ4|NT$+e`GWMwTlc>y)C)j;rM?R+VKx84D%H} z*Rh9?6$v4<^Ou*`RYDVmoL^3M9)cOY1#D)APPbRNamtLHb>{DC7x&)(V!c38rKvHo ztaM{-xp$`at$W*Gq6MjIMV_BT>oy_WdhtAv><)$IKS8gZw0Y^h!&)oa0~Rzkcthi% z?V$CqujW=S$$$Y$|E16V;g`0hyeU(U1X^F%Ce#qLFK_)aV{1d14OD_5^j|uNS9xQ| zJuAM^CkVq*?f5xfH++xbZOqJmw#H{T=@6~^l{Rg$yYB5dt9??mGZ6w{`u&>vkH0M; zC;%w=)LrX1tGCc+=jCL|elG7skiIjxUo61i zzv`Jke$_v4hs^Z*{`*&@qlEOYdOV0%(OQXKwy0|b0bRcgWF;Ku*kjoCKBpt0HAK>9 zcKvwHP+N?a=x*Hx_Vc)Z=8OJ+^t48;6nJUiz&y>q^P#GMSP#xDn;evP>uV3)7jxfU zKA7%jiCKET@&56|3r_;qu9Ee#g{aqR4j;L^#@t$0^4{Kzz9!P<@iID(-*)(k2*LXE z2e7FJq(&2CyTCG!v0iN#@k8@o;QZx2{QZ0WzjaD6^c%R4>2Gdew7?y91j|31OAuwf z@aB%hA6r;9O@UmZD}2AVupW*;BG}K%{T3QrmtO7FLbt<&!Bt zddzMYd&!=Eh)s%=jMusM(-?|8VE5aeiNA|Y`Uf}g|L6su0r zU4EL9StVSQ`U*I5BbB}oSWG;p{9I}Zs&Mw{VfB*Tc5P|xF-l+4GZSF@3stK7({kz> zo~Glnp_6cmm-aP0x9B}PMTE&iQlT`JA1bc}zx$Mi-a^|^)6v|4W*<|_qEZ*z_ zK?l34oI?>eQyN%MQz?|XQ^C$X%3zi0

Aw#gvg-uMVW~iATxyFfmuQC~609geJv2 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

_-2K0pW#35l{EaNc$$he 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

ll?36{WI}dmy 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 literal 0 HcmV?d00001 From 79b13ba9bd575a83b590257efbadec5bcab3f08f Mon Sep 17 00:00:00 2001 From: axiom Date: Fri, 1 Nov 2024 10:25:53 +0300 Subject: [PATCH 53/56] Fix: removed outline --- desktop/ui/css/theme.css | 1 + 1 file changed, 1 insertion(+) diff --git a/desktop/ui/css/theme.css b/desktop/ui/css/theme.css index 7b3911f..20c9d92 100644 --- a/desktop/ui/css/theme.css +++ b/desktop/ui/css/theme.css @@ -3,6 +3,7 @@ QMainWindow { } QWidget { + outline: none; color: white; font: 10pt "Segoe UI"; } From 666147af5fb882c30fc7f72c725c475390d836a6 Mon Sep 17 00:00:00 2001 From: axiom Date: Fri, 1 Nov 2024 13:04:04 +0300 Subject: [PATCH 54/56] Update: exclude unnecessary files for windows --- build.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/build.py b/build.py index 51ca94a..ef4856e 100644 --- a/build.py +++ b/build.py @@ -49,7 +49,13 @@ build_exe_opt = { "packages": ["_scrypt"], - "excludes": ["tkinter"], + "excludes": ["tkinter", "PySide6.QtNetwork", "PySide6.translations"], + "bin_excludes": [ + "Qt6Network.dll", "Qt6OpenGL.dll", "Qt6Pdf.dll", "Qt6Qml.dll", "Qt6QmlMeta.dll", + "Qt6QmlModels.dll", "Qt6QmlWorkerScript.dll", "Qt6Quick.dll", "Qt6VirtualKeyboard.dll", + "qgif.dll", "qicns.dll", "qjpeg.dll", "qpdf.dll", "qtga.dll", "qtiff.dll", "qwbmp.dll", "qwebp.dll", + "qtvirtualkeyboardplugin.dll", "qtuiotouchplugin.dll", "qdirect2d.dll", "qoffscreen.dll", "qminimal.dll" + ], "include_msvcr": True } From c7f0938d61214c041edb62314ebc31b32e9e80f1 Mon Sep 17 00:00:00 2001 From: axiom Date: Fri, 1 Nov 2024 13:08:52 +0300 Subject: [PATCH 55/56] Update: linux app icon --- build.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/build.py b/build.py index ef4856e..b646cb0 100644 --- a/build.py +++ b/build.py @@ -6,11 +6,17 @@ from cx_Freeze import setup, Executable +import platform + from desktop.info import __version__ as version from bip38.info import __author__ as author app_name = "BIP38" -icon_path = "desktop/ui/images/icon/icon.ico" + +if platform.system() == "Windows": + icon_path = "desktop/ui/images/icon/icon.ico" +else: + icon_path = "desktop/ui/images/svg/logo.svg" msi_shortcut_table = [ ( From e8c364c70b682f5423bcc0ec5427d3e87cba01fb Mon Sep 17 00:00:00 2001 From: meherett Date: Fri, 1 Nov 2024 14:39:39 +0300 Subject: [PATCH 56/56] Add: release, manual, api-docs and donations links --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index c9cc75b..3915311 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ BIP38
Bitcoin Improvement Proposal - 0038 +

+
[![Build Status](https://img.shields.io/github/actions/workflow/status/meherett/python-bip38/build.yml)](https://github.com/meherett/python-bip38/actions/workflows/build.yml)

+ Releases · Manual · API Docs · Donation +