Full Code of foldynl/QLog for AI

master 855447b13e47 cached
569 files
10.5 MB
2.8M tokens
1940 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (11,119K chars total). Download the full file to get everything.
Repository: foldynl/QLog
Branch: master
Commit: 855447b13e47
Files: 569
Total size: 10.5 MB

Directory structure:
gitextract_54fyuzui/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── 01-Bug Report.yml
│   │   ├── 02-Feature Request.yml
│   │   └── config.yml
│   └── workflows/
│       ├── c-cpp.yml
│       └── macOSBuild.yml
├── .gitignore
├── .gitmodules
├── AUTHORS
├── CONTRIBUTING.md
├── Changelog
├── LICENSE
├── QLog.pro
├── README.md
├── awards/
│   ├── AwardDXCC.cpp
│   ├── AwardDXCC.h
│   ├── AwardDefinition.cpp
│   ├── AwardDefinition.h
│   ├── AwardGridsquare.cpp
│   ├── AwardGridsquare.h
│   ├── AwardIOTA.cpp
│   ├── AwardIOTA.h
│   ├── AwardITU.cpp
│   ├── AwardITU.h
│   ├── AwardJapan.cpp
│   ├── AwardJapan.h
│   ├── AwardNZ.cpp
│   ├── AwardNZ.h
│   ├── AwardPOTAActivator.cpp
│   ├── AwardPOTAActivator.h
│   ├── AwardPOTAHunter.cpp
│   ├── AwardPOTAHunter.h
│   ├── AwardRDA.cpp
│   ├── AwardRDA.h
│   ├── AwardSOTA.cpp
│   ├── AwardSOTA.h
│   ├── AwardSpanishDME.cpp
│   ├── AwardSpanishDME.h
│   ├── AwardUKD.cpp
│   ├── AwardUKD.h
│   ├── AwardUSCounty.cpp
│   ├── AwardUSCounty.h
│   ├── AwardWAC.cpp
│   ├── AwardWAC.h
│   ├── AwardWAS.cpp
│   ├── AwardWAS.h
│   ├── AwardWAZ.cpp
│   ├── AwardWAZ.h
│   ├── AwardWPX.cpp
│   ├── AwardWPX.h
│   ├── AwardWWFF.cpp
│   ├── AwardWWFF.h
│   ├── BandTableAward.cpp
│   ├── BandTableAward.h
│   ├── SecondarySubdivisionAward.cpp
│   └── SecondarySubdivisionAward.h
├── core/
│   ├── AlertEvaluator.cpp
│   ├── AlertEvaluator.h
│   ├── AppGuard.cpp
│   ├── AppGuard.h
│   ├── CallbookManager.cpp
│   ├── CallbookManager.h
│   ├── CredentialStore.cpp
│   ├── CredentialStore.h
│   ├── EmergencyFrequency.cpp
│   ├── EmergencyFrequency.h
│   ├── FileCompressor.cpp
│   ├── FileCompressor.h
│   ├── FldigiTCPServer.cpp
│   ├── FldigiTCPServer.h
│   ├── LOVDownloader.cpp
│   ├── LOVDownloader.h
│   ├── LogDatabase.cpp
│   ├── LogDatabase.h
│   ├── LogLocale.cpp
│   ├── LogLocale.h
│   ├── LogParam.cpp
│   ├── LogParam.h
│   ├── MembershipQE.cpp
│   ├── MembershipQE.h
│   ├── Migration.cpp
│   ├── Migration.h
│   ├── NetworkNotification.cpp
│   ├── NetworkNotification.h
│   ├── PasswordCipher.cpp
│   ├── PasswordCipher.h
│   ├── PlatformParameterManager.cpp
│   ├── PlatformParameterManager.h
│   ├── PotaQE.cpp
│   ├── PotaQE.h
│   ├── PropConditions.cpp
│   ├── PropConditions.h
│   ├── QSLPrintLabelRenderer.cpp
│   ├── QSLPrintLabelRenderer.h
│   ├── QSLStorage.cpp
│   ├── QSLStorage.h
│   ├── QSOFilterManager.cpp
│   ├── QSOFilterManager.h
│   ├── QuadKeyCache.h
│   ├── WsjtxUDPReceiver.cpp
│   ├── WsjtxUDPReceiver.h
│   ├── csv.hpp
│   ├── debug.cpp
│   ├── debug.h
│   ├── main.cpp
│   ├── zonedetect.c
│   └── zonedetect.h
├── cwkey/
│   ├── CWKeyer.cpp
│   ├── CWKeyer.h
│   └── drivers/
│       ├── CWCatKey.cpp
│       ├── CWCatKey.h
│       ├── CWDaemonKey.cpp
│       ├── CWDaemonKey.h
│       ├── CWDummyKey.cpp
│       ├── CWDummyKey.h
│       ├── CWFldigiKey.cpp
│       ├── CWFldigiKey.h
│       ├── CWKey.cpp
│       ├── CWKey.h
│       ├── CWWinKey.cpp
│       └── CWWinKey.h
├── data/
│   ├── Accents.cpp
│   ├── ActivityProfile.cpp
│   ├── ActivityProfile.h
│   ├── AntProfile.cpp
│   ├── AntProfile.h
│   ├── Band.h
│   ├── BandPlan.cpp
│   ├── BandPlan.h
│   ├── CWKeyProfile.cpp
│   ├── CWKeyProfile.h
│   ├── CWShortcutProfile.cpp
│   ├── CWShortcutProfile.h
│   ├── Callsign.cpp
│   ├── Callsign.h
│   ├── Data.cpp
│   ├── Data.h
│   ├── DxServerString.cpp
│   ├── DxServerString.h
│   ├── DxSpot.h
│   ├── Dxcc.h
│   ├── Gridsquare.cpp
│   ├── Gridsquare.h
│   ├── HostsPortString.cpp
│   ├── HostsPortString.h
│   ├── MainLayoutProfile.cpp
│   ├── MainLayoutProfile.h
│   ├── POTAEntity.h
│   ├── POTASpot.h
│   ├── ProfileManager.h
│   ├── RigProfile.cpp
│   ├── RigProfile.h
│   ├── RotProfile.cpp
│   ├── RotProfile.h
│   ├── RotUsrButtonsProfile.cpp
│   ├── RotUsrButtonsProfile.h
│   ├── SOTAEntity.h
│   ├── SerialPort.cpp
│   ├── SerialPort.h
│   ├── SpotAlert.h
│   ├── StationProfile.cpp
│   ├── StationProfile.h
│   ├── ToAllSpot.h
│   ├── UpdatableSQLRecord.cpp
│   ├── UpdatableSQLRecord.h
│   ├── WCYSpot.h
│   ├── WWFFEntity.h
│   ├── WWVSpot.h
│   ├── WsjtxDecode.h
│   ├── WsjtxEntry.h
│   ├── WsjtxLog.h
│   ├── WsjtxLogADIF.h
│   └── WsjtxStatus.h
├── debian/
│   ├── changelog
│   ├── control
│   ├── copyright
│   ├── rules
│   ├── source/
│   │   └── format
│   └── watch
├── devtools/
│   ├── ADIF/
│   │   ├── all_ADIF_fields_example.adi
│   │   ├── min_ADIF_fields_example.adi
│   │   └── test_intl.adi
│   ├── TCISimulator/
│   │   ├── client.html
│   │   └── server.py
│   ├── cabrillo/
│   │   └── generate_cabrillo_templates.py
│   ├── deployment/
│   │   └── finalize_release.sh
│   ├── timezones/
│   │   ├── README.md
│   │   ├── builder/
│   │   │   ├── builder.cpp
│   │   │   ├── buildspec.yml
│   │   │   ├── makedb.sh
│   │   │   └── zoneToAlpha.h
│   │   ├── country_DATA_LICENSE
│   │   └── timezone_DATA_LICENSE
│   ├── translit/
│   │   └── generate.py
│   └── windowsMake/
│       ├── make.bat
│       └── tests.bat
├── doc/
│   └── UDP_Notifications.txt
├── entitlements.xml
├── i18n/
│   ├── datastrings.tri
│   ├── dbstrings.tri
│   ├── i18n.qrc
│   ├── qlog_cs.qm
│   ├── qlog_cs.ts
│   ├── qlog_de.qm
│   ├── qlog_de.ts
│   ├── qlog_es.qm
│   ├── qlog_es.ts
│   ├── qlog_fr.qm
│   ├── qlog_fr.ts
│   ├── qlog_it.qm
│   ├── qlog_it.ts
│   ├── qlog_zh_CN.qm
│   └── qlog_zh_CN.ts
├── installer/
│   ├── config/
│   │   └── config.xml
│   └── packages/
│       └── de.dl2ic.qlog/
│           └── meta/
│               ├── installscript.qs
│               ├── package.xml
│               └── targetwidget.ui
├── logformat/
│   ├── AdiFormat.cpp
│   ├── AdiFormat.h
│   ├── AdxFormat.cpp
│   ├── AdxFormat.h
│   ├── CSVFormat.cpp
│   ├── CSVFormat.h
│   ├── CabrilloFormat.cpp
│   ├── CabrilloFormat.h
│   ├── JsonFormat.cpp
│   ├── JsonFormat.h
│   ├── LogFormat.cpp
│   ├── LogFormat.h
│   ├── PotaAdiFormat.cpp
│   └── PotaAdiFormat.h
├── models/
│   ├── AlertTableModel.cpp
│   ├── AlertTableModel.h
│   ├── AwardsTableModel.cpp
│   ├── AwardsTableModel.h
│   ├── DxccTableModel.cpp
│   ├── DxccTableModel.h
│   ├── LogbookModel.cpp
│   ├── LogbookModel.h
│   ├── RigTypeModel.cpp
│   ├── RigTypeModel.h
│   ├── RotTypeModel.cpp
│   ├── RotTypeModel.h
│   ├── SearchFilterProxyModel.cpp
│   ├── SearchFilterProxyModel.h
│   ├── ShortcutEditorModel.cpp
│   ├── ShortcutEditorModel.h
│   ├── SqlListModel.cpp
│   ├── SqlListModel.h
│   ├── WsjtxTableModel.cpp
│   └── WsjtxTableModel.h
├── res/
│   ├── data/
│   │   ├── contests.json
│   │   ├── dxcc.json
│   │   ├── legacy_modes.json
│   │   ├── propagation_modes.json
│   │   └── sat_modes.json
│   ├── flags/
│   │   └── flags.qrc
│   ├── icons/
│   │   └── icons.qrc
│   ├── io.github.foldynl.QLog.metainfo.xml
│   ├── map/
│   │   └── onlinemap.html
│   ├── qlog.1
│   ├── qlog.desktop
│   ├── qlog.icns
│   ├── res.qrc
│   ├── sql/
│   │   ├── contests.sql
│   │   ├── migration_001.sql
│   │   ├── migration_002.sql
│   │   ├── migration_003.sql
│   │   ├── migration_004.sql
│   │   ├── migration_005.sql
│   │   ├── migration_006.sql
│   │   ├── migration_007.sql
│   │   ├── migration_008.sql
│   │   ├── migration_009.sql
│   │   ├── migration_010.sql
│   │   ├── migration_011.sql
│   │   ├── migration_012.sql
│   │   ├── migration_013.sql
│   │   ├── migration_014.sql
│   │   ├── migration_015.sql
│   │   ├── migration_016.sql
│   │   ├── migration_017.sql
│   │   ├── migration_018.sql
│   │   ├── migration_019.sql
│   │   ├── migration_020.sql
│   │   ├── migration_021.sql
│   │   ├── migration_022.sql
│   │   ├── migration_023.sql
│   │   ├── migration_024.sql
│   │   ├── migration_025.sql
│   │   ├── migration_026.sql
│   │   ├── migration_027.sql
│   │   ├── migration_028.sql
│   │   ├── migration_029.sql
│   │   ├── migration_030.sql
│   │   ├── migration_031.sql
│   │   ├── migration_032.sql
│   │   ├── migration_033.sql
│   │   ├── migration_034.sql
│   │   ├── migration_035.sql
│   │   ├── migration_036.sql
│   │   ├── migration_037.sql
│   │   └── migration_038.sql
│   └── stylesheet.css
├── rig/
│   ├── Rig.cpp
│   ├── Rig.h
│   ├── RigCaps.cpp
│   ├── RigCaps.h
│   ├── RigctldManager.cpp
│   ├── RigctldManager.h
│   ├── drivers/
│   │   ├── FlrigRigDrv.cpp
│   │   ├── FlrigRigDrv.h
│   │   ├── GenericRigDrv.cpp
│   │   ├── GenericRigDrv.h
│   │   ├── HamlibRigDrv.cpp
│   │   ├── HamlibRigDrv.h
│   │   ├── OmniRigEventSink.h
│   │   ├── OmnirigRigDrv.cpp
│   │   ├── OmnirigRigDrv.h
│   │   ├── Omnirigv2RigDrv.cpp
│   │   ├── Omnirigv2RigDrv.h
│   │   ├── TCIRigDrv.cpp
│   │   └── TCIRigDrv.h
│   └── macros.h
├── rotator/
│   ├── RotCaps.cpp
│   ├── RotCaps.h
│   ├── Rotator.cpp
│   ├── Rotator.h
│   └── drivers/
│       ├── GenericRotDrv.cpp
│       ├── GenericRotDrv.h
│       ├── HamlibRotDrv.cpp
│       ├── HamlibRotDrv.h
│       ├── PSTRotDrv.cpp
│       └── PSTRotDrv.h
├── rpm_spec/
│   └── qlog.spec
├── service/
│   ├── GenericCallbook.cpp
│   ├── GenericCallbook.h
│   ├── GenericQSLDownloader.cpp
│   ├── GenericQSLDownloader.h
│   ├── GenericQSOUploader.cpp
│   ├── GenericQSOUploader.h
│   ├── cloudlog/
│   │   ├── Cloudlog.cpp
│   │   └── Cloudlog.h
│   ├── clublog/
│   │   ├── ClubLog.cpp
│   │   └── ClubLog.h
│   ├── eqsl/
│   │   ├── Eqsl.cpp
│   │   └── Eqsl.h
│   ├── hamqth/
│   │   ├── HamQTH.cpp
│   │   └── HamQTH.h
│   ├── hrdlog/
│   │   ├── HRDLog.cpp
│   │   └── HRDLog.h
│   ├── kstchat/
│   │   ├── KSTChat.cpp
│   │   └── KSTChat.h
│   ├── lotw/
│   │   ├── Lotw.cpp
│   │   └── Lotw.h
│   ├── potaapp/
│   │   ├── PotaApp.cpp
│   │   └── PotaApp.h
│   └── qrzcom/
│       ├── QRZ.cpp
│       └── QRZ.h
├── tests/
│   ├── AlertEvaluatorTest/
│   │   ├── AlertEvaluatorTest.pro
│   │   └── tst_alertevaluator.cpp
│   ├── BandPlanTest/
│   │   ├── BandPlanTest.pro
│   │   └── tst_bandplan.cpp
│   ├── CallsignTest/
│   │   ├── CallsignTest.pro
│   │   ├── generated_cases.h
│   │   └── tst_callsign.cpp
│   ├── CredentialStoreTest/
│   │   ├── CredentialStoreTest.pro
│   │   ├── test_stubs.cpp
│   │   └── tst_credentialstore.cpp
│   ├── DataTest/
│   │   ├── DataTest.pro
│   │   └── tst_data.cpp
│   ├── DxServerStringTest/
│   │   ├── DxServerStringTest.pro
│   │   └── tst_dxserverstring.cpp
│   ├── FileCompressorTest/
│   │   ├── FileCompressorTest.pro
│   │   └── tst_filecompressor.cpp
│   ├── GridsquareTest/
│   │   ├── GridsquareTest.pro
│   │   └── tst_gridsquare.cpp
│   ├── HostsPortStringTest/
│   │   ├── HostsPortStringTest.pro
│   │   └── tst_hostsportstring.cpp
│   ├── MigrationTest/
│   │   ├── MigrationTest.pro
│   │   └── tst_migration.cpp
│   ├── PasswordCipherTest/
│   │   ├── PasswordCipherTest.pro
│   │   └── tst_passwordcipher.cpp
│   ├── QuadKeyCacheTest/
│   │   ├── QuadKeyCacheTest.pro
│   │   └── tst_quadkeycache.cpp
│   ├── RigctldManagerTest/
│   │   ├── RigctldManagerTest.pro
│   │   ├── core/
│   │   │   └── debug.h
│   │   ├── data/
│   │   │   └── RigProfile.h
│   │   ├── test_stubs.cpp
│   │   └── tst_rigctldmanager.cpp
│   └── tests.pro
└── ui/
    ├── ActivityEditor.cpp
    ├── ActivityEditor.h
    ├── ActivityEditor.ui
    ├── AlertRuleDetail.cpp
    ├── AlertRuleDetail.h
    ├── AlertRuleDetail.ui
    ├── AlertSettingDialog.cpp
    ├── AlertSettingDialog.h
    ├── AlertSettingDialog.ui
    ├── AlertWidget.cpp
    ├── AlertWidget.h
    ├── AlertWidget.ui
    ├── AwardsDialog.cpp
    ├── AwardsDialog.h
    ├── AwardsDialog.ui
    ├── BandmapWidget.cpp
    ├── BandmapWidget.h
    ├── BandmapWidget.ui
    ├── CWConsoleWidget.cpp
    ├── CWConsoleWidget.h
    ├── CWConsoleWidget.ui
    ├── CabrilloExportDialog.cpp
    ├── CabrilloExportDialog.h
    ├── CabrilloExportDialog.ui
    ├── CabrilloTemplateDialog.cpp
    ├── CabrilloTemplateDialog.h
    ├── CabrilloTemplateDialog.ui
    ├── ChatWidget.cpp
    ├── ChatWidget.h
    ├── ChatWidget.ui
    ├── ClockWidget.cpp
    ├── ClockWidget.h
    ├── ClockWidget.ui
    ├── ColumnSettingDialog.cpp
    ├── ColumnSettingDialog.h
    ├── ColumnSettingDialog.ui
    ├── ColumnSettingSimpleDialog.ui
    ├── DXCCSubmissionDialog.cpp
    ├── DXCCSubmissionDialog.h
    ├── DXCCSubmissionDialog.ui
    ├── DevToolsDialog.cpp
    ├── DevToolsDialog.h
    ├── DevToolsDialog.ui
    ├── DownloadQSLDialog.cpp
    ├── DownloadQSLDialog.h
    ├── DownloadQSLDialog.ui
    ├── DxFilterDialog.cpp
    ├── DxFilterDialog.h
    ├── DxFilterDialog.ui
    ├── DxWidget.cpp
    ├── DxWidget.h
    ├── DxWidget.ui
    ├── DxccTableWidget.cpp
    ├── DxccTableWidget.h
    ├── EditActivitiesDialog.cpp
    ├── EditActivitiesDialog.h
    ├── EditActivitiesDialog.ui
    ├── ExportDialog.cpp
    ├── ExportDialog.h
    ├── ExportDialog.ui
    ├── ExportPasswordDialog.cpp
    ├── ExportPasswordDialog.h
    ├── ExportPasswordDialog.ui
    ├── ImportDialog.cpp
    ├── ImportDialog.h
    ├── ImportDialog.ui
    ├── InputPasswordDialog.cpp
    ├── InputPasswordDialog.h
    ├── InputPasswordDialog.ui
    ├── KSTChatWidget.cpp
    ├── KSTChatWidget.h
    ├── KSTChatWidget.ui
    ├── KSTHighlightRuleDetail.cpp
    ├── KSTHighlightRuleDetail.h
    ├── KSTHighlightRuleDetail.ui
    ├── KSTHighlighterSettingDialog.cpp
    ├── KSTHighlighterSettingDialog.h
    ├── KSTHighlighterSettingDialog.ui
    ├── KSTWidget.cpp
    ├── KSTWidget.h
    ├── KSTWidget.ui
    ├── LoadDatabaseDialog.cpp
    ├── LoadDatabaseDialog.h
    ├── LoadDatabaseDialog.ui
    ├── LogbookWidget.cpp
    ├── LogbookWidget.h
    ├── LogbookWidget.ui
    ├── MainWindow.cpp
    ├── MainWindow.h
    ├── MainWindow.ui
    ├── MapWebChannelHandler.cpp
    ├── MapWebChannelHandler.h
    ├── MapWidget.cpp
    ├── MapWidget.h
    ├── ModeSelectionController.cpp
    ├── ModeSelectionController.h
    ├── NewContactWidget.cpp
    ├── NewContactWidget.h
    ├── NewContactWidget.ui
    ├── OnlineMapWidget.cpp
    ├── OnlineMapWidget.h
    ├── PaperQSLDialog.cpp
    ├── PaperQSLDialog.h
    ├── PaperQSLDialog.ui
    ├── PlatformSettingsDialog.cpp
    ├── PlatformSettingsDialog.h
    ├── PlatformSettingsDialog.ui
    ├── ProfileImageWidget.cpp
    ├── ProfileImageWidget.h
    ├── ProfileImageWidget.ui
    ├── QSLGalleryDialog.cpp
    ├── QSLGalleryDialog.h
    ├── QSLGalleryDialog.ui
    ├── QSLImportStatDialog.cpp
    ├── QSLImportStatDialog.h
    ├── QSLImportStatDialog.ui
    ├── QSLPrintLabelDialog.cpp
    ├── QSLPrintLabelDialog.h
    ├── QSLPrintLabelDialog.ui
    ├── QSODetailDialog.cpp
    ├── QSODetailDialog.h
    ├── QSODetailDialog.ui
    ├── QSOFilterDetail.cpp
    ├── QSOFilterDetail.h
    ├── QSOFilterDetail.ui
    ├── QSOFilterDialog.cpp
    ├── QSOFilterDialog.h
    ├── QSOFilterDialog.ui
    ├── QTableQSOView.cpp
    ├── QTableQSOView.h
    ├── RigWidget.cpp
    ├── RigWidget.h
    ├── RigWidget.ui
    ├── RigctldAdvancedDialog.cpp
    ├── RigctldAdvancedDialog.h
    ├── RigctldAdvancedDialog.ui
    ├── RotatorWidget.cpp
    ├── RotatorWidget.h
    ├── RotatorWidget.ui
    ├── SettingsDialog.cpp
    ├── SettingsDialog.h
    ├── SettingsDialog.ui
    ├── ShowUploadDialog.cpp
    ├── ShowUploadDialog.h
    ├── ShowUploadDialog.ui
    ├── SplashScreen.h
    ├── StatisticsWidget.cpp
    ├── StatisticsWidget.h
    ├── StatisticsWidget.ui
    ├── UploadQSODialog.cpp
    ├── UploadQSODialog.h
    ├── UploadQSODialog.ui
    ├── WebEnginePage.cpp
    ├── WebEnginePage.h
    ├── WsjtxFilterDialog.cpp
    ├── WsjtxFilterDialog.h
    ├── WsjtxFilterDialog.ui
    ├── WsjtxWidget.cpp
    ├── WsjtxWidget.h
    ├── WsjtxWidget.ui
    └── component/
        ├── BaseDoubleSpinBox.cpp
        ├── BaseDoubleSpinBox.h
        ├── ButtonStyle.h
        ├── EditLine.cpp
        ├── EditLine.h
        ├── FreqQSpinBox.cpp
        ├── FreqQSpinBox.h
        ├── MultiselectCompleter.cpp
        ├── MultiselectCompleter.h
        ├── RepeatButton.cpp
        ├── RepeatButton.h
        ├── ShutdownAwareWidget.h
        ├── SmartSearchBox.cpp
        ├── SmartSearchBox.h
        ├── SqlHighlighter.cpp
        ├── SqlHighlighter.h
        ├── StyleItemDelegate.h
        ├── SwitchButton.cpp
        └── SwitchButton.h

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/01-Bug Report.yml
================================================
name: Bug Report
description: File a bug report
labels: ["bug", "triage"]
body:
  - type: markdown
    attributes:
      value: |
        > [!IMPORTANT]
        > **Disclaimer Regarding Forks and Clones**
        >
        > Support is provided for the original, unmodified version of QLog.
        > If you are using a fork, clone, or any modified version of this project, please direct your issue to the maintainer of that specific repository.
        > This includes issues related to **core features**, as changes introduced in forks may directly or indirectly affect their behavior.

        Please reserve the issue tracker for reporting presumed bugs in QLog. If you have a question about usage or installation, please use the [QLog Discussions](https://github.com/foldynl/QLog/discussions)

  - type: textarea
    id: what-happened
    attributes:
      label: What happened? How can it be reproduced? Provide as much information as possible.
      description: Also, what did you expect to happen?
    validations:
      required: true

  - type: input
    id: specific-version
    attributes:
      label: QLog Version
      description: "Version reported in **Main Menu → Help → About**"
      value: "0.0.0"
    validations:
      required: true

  - type: dropdown
    id: ostype
    attributes:
      label: Which OS are you using?
      options:
        - Linux
        - macOS
        - Windows
    validations:
      required: true

  - type: dropdown
    id: osinstallation
    attributes:
      label: 'QLog Installation Method'
      description: 'Select the installation method'
      options:
        - DEB/RPM
        - Flatpak
        - EXE
        - DMG
        - Self-Compiled
        - I don't know
    validations:
      required: true

  - type: textarea
    id: system-information
    attributes:
      label: Installation Details
      description: |
        If you're not familiar with the QLog Installation Method mentioned above, please attach a screenshot of Main Menu → Help → About or provide more details about your OS.


================================================
FILE: .github/ISSUE_TEMPLATE/02-Feature Request.yml
================================================
name: Feature Request
description: Request a new feature or enhancement for QLog
labels: ["enhancement"]
body:
  - type: markdown
    attributes:
      value: |
        Please describe the feature you would like to see and why it would be beneficial.  

        Before submitting a request, check if a similar feature has already been suggested in the [existing issues](https://github.com/foldynl/QLog/issues).  

  - type: textarea
    id: feature-description
    attributes:
      label: Feature Description
      description: Describe the feature or enhancement in detail. How should it work? Why is this feature useful?
    validations:
      required: true



================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: "📖 Find documentation"
  url: https://github.com/foldynl/QLog/wiki
  about: "Most documentation is on the QLog wiki"
- name: "📨 Ask a question	— Discussions"
  url: https://github.com/foldynl/QLog/discussions
  about: "Please use GitHub Discussions for general questions"


================================================
FILE: .github/workflows/c-cpp.yml
================================================
name: CI Linux/macOS

on:
  push:
    branches:
      - 'testing_*'
  pull_request:
    branches:
      - 'testing_*'
      - master
  workflow_dispatch:
jobs:
  ubuntu-build-qt5:
    name: Ubuntu CI QT5
    strategy:
      matrix:
        os: [ubuntu-22.04, ubuntu-24.04]

    runs-on: ${{ matrix.os }}

    steps:
    - name: Install dependencies
      run: |
         sudo apt-get update
         sudo apt-get -y install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libsqlite3-dev libhamlib++-dev libqt5charts5-dev qttools5-dev-tools libqt5keychain1 qt5keychain-dev qtwebengine5-dev build-essential libqt5serialport5-dev pkg-config libqt5websockets5-dev
    - name: Checkout code
      uses: actions/checkout@v5
    - name: configure
      run: qmake QLog.pro
    - name: make
      run: make -j2

  ubuntu-build-qt6:
    name: Ubuntu CI QT6
    strategy:
      matrix:
        os: [ubuntu-22.04, ubuntu-24.04]
        
    runs-on: ${{ matrix.os }}

    steps:
    - name: Install dependencies
      run: |
         sudo apt-get update
         sudo apt-get -y install libhamlib-dev build-essential pkg-config qt6-base-dev qtkeychain-qt6-dev qt6-webengine-dev libqt6charts6-dev libqt6serialport6-dev libqt6webenginecore6-bin libqt6svg6-dev libgl-dev libqt6websockets6-dev
    - name: Checkout code
      uses: actions/checkout@v5
    - name: configure
      run: qmake6 QLog.pro
    - name: make
      run: make -j2

  macos-build:
     name: MacOS CI
     if: vars.ENABLE_MACOS == 'true'
     strategy:
       matrix:
         os: [macos-15]

     runs-on: ${{ matrix.os }}

     steps:
     - name: Install dependencies
       run: |
         unset HOMEBREW_NO_INSTALL_FROM_API
         brew update
         brew upgrade || true
         brew install qt6
         brew link qt6 --force
         brew install hamlib
         brew link hamlib --force
         brew install qtkeychain
         brew install dbus-glib
         brew install brotli
         brew install icu4c
         brew install pkg-config

     - name: Checkout code
       uses: actions/checkout@v5
       with:
         fetch-depth: 0
     - name: Get version from tag
       run : |
         TAGVERSION=$(git describe --tags)
         echo "TAGVERSION=${TAGVERSION:1}" >> $GITHUB_ENV
     - name: Configure and compile
       run: |
         cd build
         qmake6 -config release ..
         make -j4

  deb-package:
    name: DEB Package Build
    if: github.event_name != 'pull_request'
    runs-on: ubuntu-24.04

    steps:
    - name: Checkout code
      uses: actions/checkout@v5

    - name: Install tools and build dependencies
      run: |
        sudo apt-get update
        sudo apt-get -y install devscripts equivs dpkg-dev fakeroot lintian libconfig-model-dpkg-perl licensecheck
        sudo mk-build-deps --install --remove debian/control --tool "apt-get -y --no-install-recommends"

    - name: Check debian/copyright
      run: cme check dpkg-copyright

    - name: Build DEB package
      run: dpkg-buildpackage -b -us -uc -j4

    - name: Verify DEB was created
      run: ls -la ../qlog_*.deb

    - name: Run lintian
      run: lintian --no-tag-display-limit --fail-on error ../qlog_*.changes 

    - name: Upload DEB artifact
      uses: actions/upload-artifact@v5
      with:
        name: deb-package
        path: /home/runner/work/QLog/qlog_*.deb
        retention-days: 1

  deb-smoke-test:
    name: DEB Smoke Test
    needs: deb-package
    runs-on: ubuntu-24.04

    steps:
    - name: Download DEB artifact
      uses: actions/download-artifact@v5
      with:
        name: deb-package

    - name: Install and smoke test
      run: |
        sudo apt-get update
        sudo apt-get install -y ./qlog_*.deb
        QT_QPA_PLATFORM=offscreen qlog --help 2>&1 | grep -q "QLog Help"

  rpm-package:
    name: RPM Package Build
    if: github.event_name != 'pull_request'
    runs-on: ubuntu-latest
    container:
      image: fedora:43

    steps:
    - name: Install base tools
      run: dnf install -y git rpm-build rpmdevtools rpmlint dnf-plugins-core

    - name: Checkout code
      uses: actions/checkout@v5
      with:
        fetch-depth: 0

    - name: Get version from tag
      run: |
        git config --global --add safe.directory "$GITHUB_WORKSPACE"
        VERSION=$(git describe --tags --abbrev=0 | sed 's/^v//')
        echo "REPO_VERSION=${VERSION}" >> $GITHUB_ENV

    - name: Install build dependencies from spec
      run: dnf builddep -y rpm_spec/qlog.spec

    - name: Prepare RPM build tree
      run: |
        rpmdev-setuptree
        TAR_DIR="QLog-${REPO_VERSION}"
        mkdir -p "/tmp/${TAR_DIR}"
        cp -a . "/tmp/${TAR_DIR}/"
        tar czf ~/rpmbuild/SOURCES/qlog-${REPO_VERSION}.tar.gz --exclude='.git' -C /tmp "${TAR_DIR}"

    - name: Build RPM package
      run: rpmbuild -bb rpm_spec/qlog.spec

    - name: Verify RPM was created
      run: ls -la ~/rpmbuild/RPMS/*/QLog-*.rpm

    - name: Run rpmlint
      run: rpmlint ~/rpmbuild/RPMS/*/*.rpm || true

    - name: Upload RPM artifact
      uses: actions/upload-artifact@v5
      with:
        name: rpm-package
        path: ~/rpmbuild/RPMS/*/QLog-*.rpm
        retention-days: 1

  rpm-smoke-test:
    name: RPM Smoke Test
    needs: rpm-package
    runs-on: ubuntu-latest
    container:
      image: fedora:43

    steps:
    - name: Download RPM artifact
      uses: actions/download-artifact@v5
      with:
        name: rpm-package

    - name: Install and smoke test
      run: |
        dnf install -y $(find . -name 'QLog-*.rpm')
        QT_QPA_PLATFORM=offscreen qlog --help 2>&1 | grep -q "QLog Help"


================================================
FILE: .github/workflows/macOSBuild.yml
================================================
name: macOS deployment

#on: [push, pull_request]

on:
  workflow_dispatch:
  push:
     branches:
       - master

jobs:
  macos-build:
     name: MacOS Build
     strategy:
       matrix:
         os: [macos-12, macos-13]

     runs-on: ${{ matrix.os }}

     steps:
     - name: Install Dependencies
       run: |
         unset HOMEBREW_NO_INSTALL_FROM_API
         brew update
         brew upgrade || true
         brew install qt6
         brew install qt6-webengine
         brew link qt6 --force
         brew link qt6-webengine --force
         brew install hamlib
         brew link hamlib --force
         brew install qtkeychain
         brew install dbus-glib
         brew install brotli
         brew install icu4c
         brew install pkg-config
     - name: Checkout Code
       uses: actions/checkout@v4
       with:
         fetch-depth: 0
     - name: Get version from tag
       run : |
         TAGVERSION=$(git describe --tags)
         echo "TAGVERSION=${TAGVERSION:1}" >> $GITHUB_ENV

     - name: Configure and compile
       run: |
         mkdir build
         cd build
         qmake -config release ..
         make -j4
     - name: Build dmg
       run: |
         cd build
         macdeployqt qlog.app -executable=./qlog.app/Contents/MacOS/qlog
         cp `brew --prefix`/lib/libhamlib.dylib qlog.app/Contents/Frameworks/libhamlib.dylib
         cp `brew --prefix`/lib/libqt6keychain.dylib qlog.app/Contents/Frameworks/libqt6keychain.dylib
         cp `brew --prefix`/lib/libdbus-1.dylib qlog.app/Contents/Frameworks/libdbus-1.dylib
         cp `brew --prefix brotli`/lib/libbrotlicommon.1.dylib qlog.app/Contents/Frameworks/libbrotlicommon.1.dylib
         cp `brew --prefix`/opt/icu4c/lib/libicui18n.74.dylib qlog.app/Contents/Frameworks/libicui18n.74.dylib
         install_name_tool -change `brew --prefix`/lib/libhamlib.dylib @executable_path/../Frameworks/libhamlib.dylib qlog.app/Contents/MacOS/qlog
         install_name_tool -change `brew --prefix`/lib/libqt6keychain.dylib @executable_path/../Frameworks/libqt6keychain.dylib qlog.app/Contents/MacOS/qlog
         install_name_tool -change @loader_path/libbrotlicommon.1.dylib @executable_path/../Frameworks/libbrotlicommon.1.dylib qlog.app/Contents/MacOS/qlog 
         install_name_tool -change /usr/local/opt/icu4c/lib/libicui18n.74.dylib @executable_path/../Frameworks/libicui18n.74.dylib qlog.app/Contents/MacOS/qlog
         otool -L qlog.app/Contents/MacOS/qlog
         macdeployqt qlog.app -dmg
     - name: Copy artifact
       uses: actions/upload-artifact@v4
       with:
         name: QLog-${{ env.TAGVERSION }}-${{ matrix.os }}
         path: /Users/runner/work/QLog/QLog/build/qlog.dmg



================================================
FILE: .gitignore
================================================
# C++ objects and libs
*.slo
*.lo
*.o
*.a
*.la
*.lai
*.so
*.dll
*.dylib

*.patch

# Qt-es
object_script.*.Release
object_script.*.Debug
*_plugin_import.cpp
/.qmake.cache
/.qmake.stash
*.pro.user
*.pro.user.*
*.qbs.user
*.qbs.user.*
*.moc
moc_*.cpp
moc_*.h
qrc_*.cpp
ui_*.h
*.qmlc
*.jsc
Makefile*

# Qt unit tests
target_wrapper.*

# QtCreator
*.autosave

# QtCreator Qml
*.qmlproject.user
*.qmlproject.user.*

# QtCreator CMake
CMakeLists.txt.user*

# QtCreator 4.8< compilation database 
compile_commands.json

# QtCreator local machine specific files for imported projects
*creator.user*
.DS_Store
/build


================================================
FILE: .gitmodules
================================================


================================================
FILE: AUTHORS
================================================
MAINTAINERS:
   Ladislav Foldyna OK1MLG <foldyna@gmail.com>

PAST MAINTAINERS:
   Thomas Gatzweiler DL2IC <mail@thomasgatzweiler.com>

CONTRIBUTORS:
   Wolfgang DL2KI
   Fabian Kurz DJ5CW
   gerbert
   Florian Thienel
   AsciiWolf
   Maciej Krüger
   BG7JAF
   Juan Carlos EA5WA
   Diego LU1IDC
   Alfredo IK1VQY
   Michael AA5SH
   Emilio EA7QL
   Kyle Boyle VE9KZ
   Stéphane Fillod F8CFE


================================================
FILE: CONTRIBUTING.md
================================================
## How Can I Contribute?

### Reporting Bugs
*Please* contact me via the repository's Discussion page or email (you can find it 
[QRZ](https://www.qrz.com/db/OK1MLG) or [HamQTH](https://www.hamqth.com/ok1mlg) ) 

If you run into an issue, please search [Issue tracking](https://github.com/foldynl/QLog/issues) 
*first* to ensure the issue hasn't been reported before. Open a new issue only if you haven't 
found anything similar to your issue.

#### When opening a new issue, please include the following information at the top of the issue:
* What version you are using.
* Describe the issue you are experiencing.
* Describe how to reproduce the issue.
* Including any warning/errors/backtraces - see debug details in 
QLog [Wiki](https://github.com/foldynl/QLog/wiki/Debug-Log-Level).

In general, the more detail you share about a problem the quicker a
developer can resolve it. For example, providing a simple test case is always
exceptionally helpful.

Be prepared to work with the developers investigating your issue. Your
assistance is crucial in providing a quick solution. They may ask for
information like:

* Your non-sensitive information - ADIF export, log file etc.
* Your hardware configuration
* Your OS, distribution etc.
* Your version of libraries (especial Qt, Hamlib)

### Pull Requests

#### General

* All pull requests must be based on the current `master` branch 
and should apply without conflicts.
* Please attempt to limit pull requests to a single commit which resolves
one specific issue.
* Make sure your commit messages are in the correct format. See the
[Commit Message Formats](#commit-message-formats) section for more information.
* When updating a pull request squash multiple commits by performing a
[rebase](https://git-scm.com/docs/git-rebase) (squash).
* For large pull requests consider structuring your changes as a stack of
logically independent patches which build on each other.  This makes large
changes easier to review and approve which speeds up the merging process.
* Try to keep pull requests simple. Simple code with comments is much easier
to review and approve.
* If you have an idea you'd like to discuss or which requires additional testing, consider opening it as a draft pull request.
Once everything is in good shape and the details have been worked out you can remove its draft status.
Any required reviews can then be finalized and the pull request merged.

### Testing
If you're in a position to run the latest code
consider helping us by reporting any functional problems, performance
regressions or other suspected issues. By running the latest code to a wide
range of realistic workloads, configurations and architectures we're better
able quickly identify and resolve potential issues.

## Style Guides

### Repository Structure

**Branch Names:**
- Latest Public Release branch: `master`
- Upcoming release branch: `testing_$VERSION`

### Coding Conventions

* Conditional 
```
if ( cond )
{
   command;
}
````
* Use spaces around operators
    * `count + 1` instead of `count+1`
* Use spaces after commas (unless separated by newlines)
* Keep in mind that QLog can run under Linux, Windows and MacOS - do not use platform-depend code

#### Modules
If possible, one class one file. Each mode (except models) 
has to include `debug.h` and define 
```
MODULE_IDENTIFICATION("qlog.ui.mainwindow");
```

Each function (except models) has to contain 
```
FCT_IDENTIFICATION;
```

### Commit Message Formats
#### New Changes
Commit messages for new changes must meet the following guidelines:
* In 72 characters or less, provide a summary of the change as the
first line in the commit message.
* A body which provides a description of the change. If necessary,
please summarize important information such as why the proposed
approach was chosen or a brief description of the bug you are resolving.
Each line of the body must be 72 characters or less.
* Provides a subject line in the format of
`Module_Name: Change description` where `Module_name` defines a part of source code where the change was made or new feature name (short name).

```
Module_Name: This line is a brief summary of your change

Please provide at least a couple sentences describing the
change. If necessary, please summarize decisions such as
why the proposed approach was chosen or what bug you are
attempting to solve.
```

#### Bug Fixes
If you are submitting a fix
the commit message should meet the following guidelines:
* Provides a subject line in the format of
`Fixed #ddd: Fix name...` where `ddd` represents
each [Issue](https://github.com/foldynl/QLog/issues) .

Bugfixes not listed in the Github Issue are introduced by the same way as Improvements (Module Name etc).


================================================
FILE: Changelog
================================================
2026/04/26 - 0.50.0
- [NEW] - Added Split detection
- [NEW] - Added Developer and Support tools (PR #991 @aa5sh @foldynl)
- [NEW] - Added a simple QSL label printing dialog (issue #562)
- [NEW] - Added Cabrillo contest export
- [NEW] - Added direct labeling of QSL Requested and QSL Received to the QSO context menu (PR #982 @aa5sh)
- [NEW] - DXCC Submission Report (PR #967 @aa5sh)
- [NEW] - DXC - Search pre-fills the callsign from New Contact if callsign is present
- [NEW] - Settings - Added Danger Zone tab with Delete all passwords and QSOs
- [CHANGED] - Mutex-free Omnirig1 and Omnirig2
- [CHANGED] - POTA/SOTA/WWFF/SAT list are download from QLog LOV-repo
- [CHANGED] - Used an external lib for CSV parsing for LOV Download
- [CHANGED] - Import - ADIF import updates DXCC only if it is missing in the QSO (issue #983)
- [REMOVED] - Import - ADIF import does not include the option to update DXCC during the import - no longer needed
- Fixed Callsign disappears when calling a DX in a split via VFO-B (issue #799)
- Fixing Rendering issue (issue #989)
- Updated debian packaging (PR @979 thx @dawkagaming)
- Hamlib rigctld switching between VFO A/B doesnt change the band mode - added workaround (issue #999)
- Awards internal redesign
- Removed AN from the WAC award (issue #1010)

2026/03/19 - 0.49.1
- Fixed Online Map OSM Access Blocked banner (issue #956)
- Fixed Package build process issue - openssl-dev is missing (issue #957)
- Fixed Missing dependence for QTKeychain (issue #964)
- Added French Translation (PR #969 thx @fillods)

2026/03/13 - 0.49.0
- [NEW] - Added Pack and Unpack Data and Setting - Computer to Computer Migration (issue #535)
- [NEW] - Added Rig Sharing via Rigctld (PR #736 issue #159 @aa5sh @foldynl)
- [NEW] - Added QSL Gallery
- [NEW] - QSO Filter - Added REGEXP operator
- [NEW] - Settings - TQSL - Added Path auto-detect and validation
- [NEW] - Upload QSO - Added LoTW Station Location Combo (PR #929 @TrgoSk @foldynl)
- [NEW] - QSO Export - Added Station Profile Filter
- [NEW] - BandMap shows emergency frequencies (issue #462)
- [NEW] - Added Speed Up Down Macros - WinKey and CWDaemon (issue #491)
- [NEW] - Settings Winkey v2 - Added PaddleOnly Sidetone (issue #739)
- [NEW] - Settings Winkey v2 and CWDaemon - Added Sidetone Freq
- [NEW] - All County fields contain Completer for Ukraine, US, Japan, NZ, Spanish, Russia (PR #785 @aa5sh @foldynl)
- [NEW] - Added County Awards for Ukraine, US, Japan, NZ, Spanish, Russia (PR #785 @aa5sh @foldynl)
- [NEW] - ADIF 3.1.7 - Added new modes FT2, FREEDATA, RIBBIT_PIX, RIBBIT_SMS (issue #934)
- [CHANGED] - Generic FTx for FT8/FT4 (FT2) in Alert and DXC filter (issue #937)
- [CHANGED] - LoTW QSL matching algorithm uses Mode and Mode Group matching (issue #942)
- [CHANGED] - Reduced download period for DXCC Entities from 21 to 7 days
- LogbookWidget: Delete Performance Optimization
- Fixed Awards POTA Activator Filter
- Fixed man page
- Fixing SATmode Activity is blank (issue #948)

2026/01/30 - 0.48.0
- [NEW] - Rig Widget - tuning rig with mouse (issue #855)
- [NEW] - Awards - Added User Filter Combo (issue #870)
- [NEW] - Statistics - Added User Filter; new Dialog layout (issue #870)
- [NEW] - Alerts - Added detailed Log Status settings (issue #817)
- [NEW] - Settings - Enable/Disable sending color-coded status indicators back to WSJT-X (issue #885 @aa5sh @foldynl)
- [CHANGED] - Omnirig Drivers: Removed QT AXContainers - pure Windows API code
- [CHANGED] - Enabled Chekbox in Alerts Table (issue #867)
- [CHANGED] - Serial Port Completer contains Horizontal ScrollBar
- [CHANGED] - TCI - Settings - Default PWR defines the maximum output power
- Fixed Omnirig drivers keep sending frequency change (issue #872)
- Fixed ADIF import does not accept a default operator name (issue #884)
- Fixed HamQTH URL from http to https (PR #886 @aa5sh)
- Fixed Missing Band value when QSO from FLDigi (issue #892)

2025/12/19 - 0.47.1
- [CHANGED] - DXC - VE7CC-type Cluster is correctly detected (PR #851 @kyleboyle)
- [CHANGED] - Chat - Changed ON4KST URL (issue #857)
- Fixed missing clear button for Search Callsign (issue #753)
- Fixed Updated QSOs are not sent to wavelog (issue #847)
- Fixed Fixed Omnirig(v2) getFreq, getVFO, setFreq (issue #853)
- Fixed ADI Header does not follow ADIF Spec (issue #859)
- Fixed OmniRig settings are not saved (issue #862)

2025/12/06 - 0.47.0
- [NEW] - Adds theme options - native, light, dark (PR #718 @kyleboyle)
- [NEW] - Implemented ADIF 3.1.6
- [NEW] - ADIF 3.1.6 - Added new modes FSK and MTONE
- [NEW] - ADIF 3.1.6 - Added new contest IDs
- [NEW] - ADIF 3.1.6 - Added new column EQSL_AG (Import/Export only)
- [NEW] - Statistics, QSODetail contain deleted DXCC Entities (PR #728 @aa5sh @foldynl)
- [NEW] - Settings Hamlib - Added support to define CIV Addr for Icom and Ten-Tec (issue #747)
- [NEW] - Settings Hamlib - Added RTS and DTR control (PR #809 @aa5sh)
- [NEW] - Settings GUI - Added options to switch distance unit
- [NEW] - Added Linux manpage (PR #791 @dawkagaming)
- [NEW] - Added a link to the GitHub release notes under Help-Whats New
- [NEW] - Added workaround for WriteLog - always call callbook lookups (PR #833 @sjwoodr)
- [NEW] - Awards - Added Not-Confirmed filter (PR #836 @aa5sh)
- [NEW] - Rotator Widget - Added buttons to change button profiles
- [CHANGED] - Settings - Added network loop detection for WSJTX Forward (issue #815 @aa5sh @foldynl)
- [CHANGED] - Rotator - Rotator timeout is set to 5s (PR #823 @aa5sh)
- [CHANGED] - Double Spin Boxes - the decimal separator is forced to be a period
- [DELETED] - WSJTX Widget - Removed Freq and Mode
- Fixed QSODetail - Anti-meridian bug on map (issue #786)
- Fixed Statistics: Center maps on QTH longitude (issue #824)
- Fixed OmniRig disconnecting when its status changed unexpectedly (issue #832)

2025/10/31 - 0.46.2
- Fixed Spaces after QRZ.com name (issue #767)
- Fixed SPID Rot1Prog Rotator more 360 deg (issue #775)
- Fixed build instructions on Debian (PR #777 @leventelist)
- Fixed Bandmap truncated output despite having space (issue #779)
- Fixed Statistics - Anti-meridian bug on map (issue #786)
- Fixed Binary file in the tarballs (issue #794)
- Fixed LOTW and eQSL upload status updated even when nothing is uploaded (issue #807)
- Fixed Imported QSOs contain incorrect My DXCC info (issue #812)
- Fixed Statistics Dialog does not show confirmed grids

2025/09/26 - 0.46.1
- Fixed QSO filter incorrectly displays inserted date (issue #752)
- Fixed Logbook Search Icon is not centered (issue #753)
- Fixed Using CQRLog API Key for Clublog (issue #759)
- Fixed Online Service Password leaking via debug files (issue #760)
- Fixed Tabs are not showed properly (PR #762 @aa5sh)
- Fixed inability to edit Power in QSO Detail (issue #763)

2025/09/12 - 0.46.0
- [NEW] - NewContact: POTA/SOTA/WWFF/IOTA info is taken from the nearest spot (@aa5sh @foldynl)
- [NEW] - DXSpots are sent to Flex Radio (PR #694 @aa5sh)
- [NEW] - CWConsole - Added support for automatic periodic sending of CW Macros (issue #708)
- [NEW] - Added mapping of Winkey hardware buttons to CW macro keys F1–F4 (issue #711)
- [NEW] - Added Search Types to the Logbook Search Editbox (issue #733)
- [NEW] - Rig - Periodic Rig status reporting independent of its changes (PR #730 @aa5sh)
- [NEW] - Settings - Serial Port Completer for MacOS and Linux (PR #737 @aa5sh)
- [NEW] - Hamlib - Attempt to send Power On when connecting the Rig
- [NEW] - POTA Spots Info is received from the API at api.pota.app to improve POTA detection
- [CHANGED] - Logbook Search Filter Widget - Added Search Widget
- [CHANGED] - QSO Detail Country boxes use the new Search Filter Widget
- [CHANGED] - NewContact - RST field uses the Overwrite Mode
- [CHANGED] - NewContact - Default cursor position in RST is at the first character
- [CHANGED] - Setting Dialog - Modes - Default Report can define cursor position
- [CHANGED] - HamlibRot - Changed Poll Interval from 500 to 2000ms
- Fixed DUPE is not detected for the first Contest QSO (issue #699)
- Fixed FREQ_RX/BAND_RX is present only when RX and TX freqs are different (issue #714)
- Fixed Repeated log recording (issue #722)
- Fixed QSO Filter contains untranslated QSO items (issue #732)

2025/07/11 - 0.45.0
- [NEW] - Single Dialog for Upload/Download Online Services (issue #448)
- [NEW] - Added option to swap paddles to Winkey settings (issue #676)
- [NEW] - Added native support for the FLRig interface (issue #679)
- [NEW] - Added New Version Notification - only for MacOS and Windows (PR #669 @aa5sh)
- [NEW] - QRZ Upload - Added support for multiple API Keys
- [NEW] - Logbook - Added highlighting to the filter button when a filter is active
- [NEW] - WSJTX - Filtered label is shown when filter is enabled
- [NEW] - DXC - Filtered label is shown when filter is enabled
- [NEW] - Added support to Upload Cloudlog/Wavelog
- [NEW] - Add JS8 to legacy_modes.json (issue #677)
- [CHANGED] - Unification Settings storage
- [CHANGED] - Calculate distances according to IARU rules
- Fixed missing Wsjtx Spot values in the AlertWindow

2025/05/11 - 0.44.1
- Fixed Rotator Widget Seg Fault for new users (issue #666)

2025/05/09 - 0.44.0
- [NEW] - Activity Manager - Added SKCC, UKSMG and FISTS as Dynamic Fields
- [NEW] - QSO - FISTS, SKCC, and UKSMG are auto-filled from MembershipQE (issue #628)
- [NEW] - Rotator - Added QSO destination needle (issue #644)
- [NEW] - QSO Detail - Adds grayline and short path (PR #653 @kyleboyle)
- [CHANGED] - Rotator - Needle colors correspond to the online map (issue #644)
- Fixed TCI cw_macros must contain RigID (issue #663)
- Fixed TCI setKeySpeed sets keyer and macros speed (issue #663)
- Fixed Data mode missing in rig control window - rigctld (issue #660 @aa5sh)
- Improved DXC Mode detection
- Updated Simplified Chinese translation

2025/04/19 - 0.43.1
- Fixed Click on PHONE DX Spots sets wrong mode (issue #453)
- Fixed No freq via Omnirig for IC7400 (issue #639)

2025/04/04 - 0.43.0
- [NEW] - Added support to receive QSOs from CSN SAT Device (PR #610 @aa5sh)
- [NEW] - Bandmap - Multiple independent bandmap windows (PR #593 @kyleboyle @foldynl)
- [NEW] - Winkey Keyer driver currently supports v1 and v2 hardware
- [NEW] - QSO Detail - QSLs QSLr Msg is editable
- [NEW] - Activity Manager - Added new dynamic field - QSL Message Send
- [CHANGED] - HamlibDrv - Enabled Power, RIT, XIT, Morse for RIG Netctl
- [CHANGED] - QSO Detail - QSLMSG replaced by QSLMSG_RCVD (issue #633)
- [CHANGED] - eQSL Upload - Added an option to choose a QSLMsg field
- [CHANGED] - eQSL Download - eQSL QSLMSG is stored to QLog QSLMSG_RCVD
- [CHANGED] - eQSL Download - Added QSLMSG_RCVD merging - eQSL message is appended
- Fixed Speed pot doesn't seem to work with a WinKeyer; double chars (issue #618)
- Fixed BandMap Spots colour change after a QSO (issue #632)
- Fixed Incorrect Field Mapping for Received eQSL Messages (issue #633)

2025/03/07 - 0.42.2
- Fixed Logbook country translations (issue #608)
- Fixed Unexpected dialog when QSO after contest (issue #614)
- Fixed Statistics Widget does not display NULL continents (@aa5sh)
- Fixed Statistics Widget does not display NULL Band, Mode
- Fixed Statistics Widget TOP10 does not display removed DXCCs
- Fixed Statistics Widget TOP10 does not display translated country names
- Fixed Awards Widget does not display removed DXCCs

2025/02/22 - 0.42.1
- Fixed Unexpected timezone info (issue #600)
- Fixed DXCC Statistics picks more entities (issue #601)
- Fixed a crash when no internet connection

2025/02/14 - 0.42.0
- [NEW] - Awards - Added Slots - total over each band (issue #538)
- [NEW] - Awards - Added Grid Award - 2/4/6 Chars grid (issue #564)
- [NEW] - Settings - Added options to switch 12/24 time and date format (issue #573)
- [NEW] - Activity Manager - Added new dynamic fields - Rig (issue #575)
- [NEW] - LoTW Import - Fill missing information also for confirmed QSOs (@aa5sh)
- [NEW] - Added CW macro QTH
- [NEW] - DXC - Added 15min Trend
- [CHANGED] - Changed IOTA LOV Source, the official web is used
- [CHANGED] - CSV Export: Time and Date formats use ISO8601 format (issue #562)
- [CHANGED] - Settings - Renamed Shortcuts to GUI tab
- [CHANGED] - LOV - Improved LOV download performance (PR #582 @aa5sh)
- Partial fix Windows State/Size does not save in case of fullscreen (issue #418)
- Fixing TCI error when you change Rig (issue #526)
- Fixed DXCC Award total worked confirmed counts included deleted entities (PR #588 @aa5sh)
- Fixed Raspberry PI Flatpak - Import Select file dialog crashes (issue #589)
- Suppressed the ability to edit Contest fields after the start (issue #590)

2025/01/21 - 0.41.1
- Fixed compilation issue under Debian 12 (issue #571)
- Fixed Incorrect GPL version in rpm/deb packages (issue #572)
- Fixed MacOS floating utility window bug (PR #576 @kyleboyle)
- Updated IT translation

2025/01/11 - 0.41.0
- [NEW] - Logbook - Added a new context menu item - Update QSO from Callbook (issue #450 @aa5sh)
- [NEW] - DIGI mode is used in case of DXC Digi Spots (issue #480)
- [NEW] - DXC - Retrieve information about SOTA, POTA, IOTA and WWFF from comment (issue #482)
- [NEW] - Alert - Added SOTA, POTA, IOTA and WWFF filter
- [NEW] - Added the COM Port Completer for Windows platform (issue #490)
- [NEW] - Settings - Added DXCC Confirmed By options (issue #508)
- [NEW] - Added POTA Export Formatter (activator/hunter) (PR #514 @kyleboyle)
- [NEW] - CW Console - CW Halt with the user-defined shortcut (issue #518)
- [NEW] - Added an input parameter to save debug message to file
- [NEW] - Logbook - Added sorting function to logbook table columns (PR #540 @kyleboyle)
- [NEW] - Network Notification - Added Rig Status Notification
- [NEW] - Implemented ADIF 3.1.5
- [NEW] - ADIF 3.1.5 - Added new submodes FSKH245 and FSKH105 for HELL
- [NEW] - ADIF 3.1.5 - Added new contest IDs
- [NEW] - ADIF 3.1.5 - Added new columns (Import/Export only)
- [NEW] - ADIF 3.1.5 - Added My DARC DOK to Station Profile
- [CHANGED] - Settings: disabled band and mode name modification
- [CHANGED] - DX Stats contain all enabled bands (issue #538)
- [CHANGED] - Removed Freq, TimeDate On/Off Data Type Indicators (issue #552)
- [CHANGED] - ADIF 3.1.5 - VUCC and MY_VUCC can contain 6 or 4-chars locators
- [CHANGED] - Stop exporting default value N for qsl_rcvd, qsl_sent, lotw/dcl/eslq_qsl_rcvd/sent
- [CHANGED] - Extended QSL/Import Dupe matching rule to Callsign, Band, Mode, Time and Sat_Name (issue #563)
- Fixed MacOS - keep floating windows visible on app unfocus (issue #530)
- Fixed Contest Filter ignores the first QSO (issue #529)
- Fixed It is not possible to quit Qlog with detached widgets Rot and Rig (issue #534)
- Fixed ADX/CSV/JSON do not export non-ASCII chars (issue #542)
- Fixed Checking the 60m checkbox in cluster filters allows 160m spots to appear (issue #543 @aa5sh)
- Fixed Problems uploading to QRZ.com (issue #559 PR #561 @aa5sh)
- Fixed DX Stat screen is jumping up/down
- Fixed Omnirig drivers: Digi modes are not correclty recognized

2024/11/29 - 0.40.1
- Fixed Bands - Added missing 8m band (issue #515)
- Fixed CW Console - EXCSTR does not work properly (issue #517)
- Fixed Activity Manager - Missing Propagation Mode None (issue #519)
- Fixed QSO Filter - filter fields with random order (PR #525 @aa5sh)
- Fixed TCI error when you change Rig (issue #526)
- Fixed NewContact - satellite mode too wide (issue #527)

2024/11/24 - 0.40.0
- [NEW] - Activity Manager - merged Layout Manager and profiles (issue #408)
- [NEW] - Activity Manager - Added new dynamic fields - Contest fields, RX/TX Power
- [NEW] - Added light support for contests (issue #345)
- [NEW] - Added CW macros EXCHSTR, EXCHNR, EXCHNRN
- [NEW] - Export Filter - Added user filter combo (original idea PR #476 @aa5sh)
- [NEW] - New Contact -  Added expand/collapse button to QSO field tab widget (PR #495 @kyleboyle)
- [NEW] - Alert - Added CQZ and ITUZ filters
- [NEW] - KSTChat - Added a new 40MHz room (PR #496 @kyleboyle)
- [NEW] - Station Profile contains Operator Callsign (issue #441 @kyleboyle)
- [NEW] - Station Profile contains County (issue #493 @kyleboyle)
- [NEW] - Statistics - Adds time of day and better qso mapping (PR #501 @kyleboyle)
- [NEW] - Bandmap - Tooltip shows a spotter callsign (PR #507 @Skittlebrau)
- [CHANGED] - New Contact - Renamed DXCC Tab to DX Stats contains DXCC and Station Statistics (issue #477)
- [CHANGED] - QSL Import dialog - Detail text is selectable by mouse and keyboard
- [CHANGED] - Removed Main Menu Layout; Activity Manager is in the bottom-left corner
- [CHANGED] - Removed Keep Options from the Equipment Menu - use Activity Manager for it
- Fixed issue when CW is always selected after Settings exiting or connecting the Rig
- Updated Timezone definition file - version 2024b

2024/10/05 - 0.39.0
- [NEW] - DXC - Added Full-text search
- [NEW] - Select S in RST Edit when focused (issue #454)
- [NEW] - Alerts - Added Member Column
- [CHANGED] - HamlibDrv Rig/Rot- Added multiplatform reliable sleep
- [CHANGED] - Changed Backup policy
- [CHANGED] - Logbook page size - improved performance
- [CHANGED] - Logbook - CTRL-A (Select All) is disabled
- [CHANGED] - Awards - Bands are displayed based on the Settings (issue #452)
- [CHANGED] - WSJTX - More reliable detection of CQ stations (PR #471 @aa5sh)
- [CHANGED] - WSJTX - SOTA/POTA/WWFF/SIG are being added to the logged QSO (PR #463 @aa5sh)
- [CHANGED] - Stats - Add a confirmation dialog for displaying over 50k QSOs on the map
- [CHANGED] - New Contact - Starting QSO Timer when Rig online and WSJTX Update Callsign Status is received
- [CHANGED] - Added a postponed handling for Rig soft errors (issue #472)
- Fixed WSJT-X does not emit band change if rig is disconnected (issue #447)
- Fixed Wrong import of ADIF file of another log program (issue #455)
- Fixed WSJTX log record is stored incorrectly if it contains non-ASCII chars(issue #458)
- Fixed ADIF import does not import records with old DXCC Entities (issue #459)
- Fixed ADIF import incorrectly uses Station Profile parameters (issue #461)
- Fixed Logbook - QSO Table Column Width Does Not Stick (issue #464)
- Fixed Alerts Window displays OOB Spots (issue #469)
- Fixed Field values from past QSOs are used incorrectly in case of WSJTX QSOs (#issue 470)

2024/08/29 - 0.38.0
- [NEW] - Logbook - Added Send DX Spot to the QSO Context Menu
- [NEW] - DX Filter - Added Dedup Time/Freq difference setting (@aa5sh)
- [NEW] - Rig Setting - Added RTS/DTR PTT Type support (issue #353)
- [NEW] - Bandmap - Scrollbar position is saved per band (issue #415)
- [NEW] - New Contact - Added a dynamic value completer for SIG field (issue #425)
- [NEW] - Awards - Added SOTA/POTA/WWFF (@aa5sh issue #311)
- [NEW] - Awards - Added Not-Worked Filter
- [NEW] - New Contact - Added Long Path Azimuth info
- [NEW] - POTA Fields allow a comma-delimited list of one or more POTA Refs
- [NEW] - WSJTX tunes freq/mode like Rig if rig is disconnected
- [CHANGED] - Alert Widget is a Dock Widget (issue #399)
- [CHANGED] - QLog adds more information from callbook for WSJTX QSOs (issues #403 #405 #420)
- [CHANGED] - File Open dialogs are not a native dialog under Linux (issue #427)
- [CHANGED] - Profiles transferred to DB
- [CHANGED] - LOV last_dates transferred to DB
- [CHANGED] - DX Cluster - Login Callsign is always the base Callsign
- [REMOVED] - Setting DXCC Date
- Fix for MacOS Layout Geometry Restore (@aa5sh)
- Fixed TQSL does not block GUI thread
- Fixed MacOS build process (@aa5sh)

2024/07/26 - 0.37.2
- Fixed Field QSL Send Via should be retained (issue #413)
- Fixed Set rotator position fails if azimuth > 180 (issue #417)
- Fixed Windows State/Size does not save in case of fullscreen (issue #418)
- Fixed Significant rounding during azimuth calculation (issue #422)
- Updated Simplified Chinese translation
- Updated Spanish translaction
- Added Italian translation (thx IK1VQY)

2024/07/10 - 0.37.1
- Fixed QSO Table Callsign filter is not filled properly (issue #401)
- Fixed DXC zero frequency for last QSO in case of FT8 QSOs (issue #404)
- Fixed Callsign Context Menu does not work (issue #409)
- Fixed QSO Detail Save and Edit buttons are not translated (issue #410)

2024/07/01 - 0.37.0
- [NEW] - Added Shortcuts Editor (issue #293)
- [NEW] - Added QO100 Bandplan to correctly categorize the DX Spots
- [NEW] - Improveded detection of SH/DX SHF Spots
- [NEW] - Online Map - Added WSJTX CQ Spots
- [NEW] - WSJTX - Sortable View
- [NEW] - Alerts - Sortable View
- [NEW] - Added Spanish translation (thx LU1IDC)
- [NEW[ - Added Search Callsign Clear Button (issue #396)
- [CHANGED] - QRZ auth should be over POST with form data (issue #389)
- [CHANGED] - Big CTY file is used
- [CHANGED] - Callbook Country DXCC ID is used in case of difference from Big CTY
- [CHANGED] - Removed ALT+W and CTRL+DEL shortcuts
- [CHANGED] - Removed New Contact and Save Contact from Logbook Main Menu
- Fixed Guantanamo KG4 Issue (issue #372)
- Fixed QRZ Lookup Not Including Full Name - History (issue #388)
- Fixed Spot Last QSO contains TX freq, should contain RX freq (issue #390)
- Fixed Spot Last QSO must contain Freq in kHz (issue #391)
- Fixed Bandmap select previous selected callsign issue (issue #394)
- Fixed Malfunctioning tuning of WSJTX Alert spot
- Fixed DXCC Status for FT4 Spots incorrectly identified in WSJTX

2024/06/07 - 0.36.0
- [NEW] - WSJTX: Added support to received ADIF QSO Log record
- [NEW] - Sat mode is derived from RX/TX Freq
- [NEW] - Logbook filters change color when enabled
- [NEW] - Frequency input boxes PageUp/Dn switches the band (issue #360)
- [NEW] - CTRL + PgUp/Dn switch band on the connected rig - global shortcut (issue #360)
- [NEW] - Added number of filtered QSOs (issue #374)
- Fixed Callbook query does not work (issue #377)
- Fixed Logbook columns are reordered after Delete (issue #383)
- Fixed Missing Republic of Kosovo flag (issue #384)

2024/05/21 - 0.35.2
- Improved delete performance; added delete progress bar (issue #351)
- Fixed Password with plus is incorrectly sent to online services (issue #366)
- Fixed Compilation issue under v4.6 (issue #368)
- Fixed Network Rig configuration is not saved (issue #370)

2024/05/06 - 0.35.1
- Fixed Free QRZ callbook - Name is not populating (issue #363)
- Fixed Incorrect CW segment freqs (issue #365)

2024/05/03 - 0.35.0
- [NEW] - Added Rot Interface PSTRotator Network
- [NEW] - Added QSO/QSL Since option to eQSL Dialog
- [NEW] - Bandmap - Current Mode segment visualisation
- [NEW] - CW Console - Added Word/Whole mode switch
- [NEW] - Added Callbook Profile Image Widget
- [NEW] - ASCII conversion based on Text-Unidecode/iconv algorithm (issue #316 #350)
- [NEW] - ITU/CQ Zones can be defined in Station Profile (issue #358)
- [CHANGED] - Spacebar is used as a focus changer for fields where space is not allowed
- [CHANGED] - Focus does not select text in the input fields
- [CHANGED] - Force XCB under Linux Wayland
- [CHANGED] - Bandmap - Added Callsign/Freq/Mode to tooltip (issue #355)
- Fixed incorrect ADIF date format for clublog_qso_upload_date (issue #342)
- Fixed The last name from Callbooks queries (issue #346)

2024/03/25 - 0.34.0
- [NEW] - Rotator Widget - Azimuth by Clicking
- [NEW] - Rotator Widget - QSO button provides Short/Long Path (issue #330)
- [NEW] - Equipment Menu - Added Keep Options between application restart (issue #331)
- Fixed TCI - Thetis Connection issue (issue #327)
- Fixed TCI - Spots To Rig are not displayed (issue #328)
- Fixed Bandmap unintentionally emits frequency labels (issue #333)
- Fixed Failing to load grid square for G and EI SOTA summits (issue #336)
- Fixed HRDLog On-Air message is not sent (issue #337)
- Fixed Offline Map - Improved Path drawing

2024/03/09 - 0.33.1
- Fixed Rotator offline map is incorrectly centered (issue #324)
- Fixed Hamlib integration not working (issue #325)
- Fixed issue when Hamlib reopen rig caused Initialization Error
- Fixed issue when Omnirig Drv did not emit rigIsReady signal

2024/03/08 - 0.33.0
- [NEW] - Added Rig Interface TCI
- [NEW] - Callbook search can be temporarily paused
- Improved DXC Mode recognition
- Fixed Modal dialog blinks - Windows platform (issue #315)
- Fixed LoTW and eQSL download are only QSLs dowloads - button label changed (issue #318)
- Fixed i18n: Country Names and Prop-modes are translated (issue #322)

2024/02/10 - 0.32.0
- [NEW] - Added Rig Interface Omnirig v1 (Windows only)
- [NEW] - Added Rig Interface Omnirig v2 (Windows only)
- [NEW] - Clublog - Added Clear Clublog and reupload QSOs
- [NEW] - Clublog - Added Real-time Insert/Update/Delete
- [CHANGED] - Clublog - Upload callsign is derived from the Current Profile Callsign
- Fixed clang linker failed issue (issue #301)
- Fixed SAT Mode U/U missing (issue #308 PR #309 thanks ea5wa)
- Fixed Multiple QSO selection. Callsigns modified by mistake (issue #310)
- Fixed Callbook query cache is not properly cleared when Callbook settings change (issue #313)

2024/01/05 - 0.31.0
- [NEW] - DXC - Improved Mode recognition
- [NEW] - DXC - Switch Rig mode based on DXC Spot Mode (issue #217)
- [NEW] - DXC - Added Spot Country Column (issue #273)
- [NEW] - DXC - Added Menu for server management
- [NEW] - DXC - Added Auto-connect to server
- [NEW] - DXC - Added Keep QSOs Context Menu
- [NEW] - DXC - Added Clear QSO Context Menu
- [NEW] - DXC - Added support for SH/DX response parsing
- [NEW] - DXC - Added support for username, password for connection
- [CHANGED] - DXC - Commands Combo changed to function button with selectable function
- [CHANGED] - DXC - DX Spot is prepared via DXC Command Line, Remark dialog was removed
- [NEW] - Online Map - IBP station double-click tunes freq and switch Rig mode
- [NEW] - Main Window - Current profile name is shown (issue #282)
- [NEW] - Import - Details can be saved to file (issue #284)
- [NEW] - Added Simplified Chinese translation (PR #285 thank BG7JAF)
- [NEW] - New Contact - Enter saves QSO if QSO time is running (issue #293 - partial)
- [NEW] - New Contact - Callsign Enter event saves QSO if no Callbook is active - Pileup Mode (issue #293)
- [NEW] - RIG Widget - RIT/XIT are displayed with user-friendly units (issue #294)
- [CHANGED] - SAT List download - Shortened download period for SAT list from 30 to 7 days
- Fixed ADI Import is too slow (issue #270)
- Improved Import/Export Performance
- Fixed Missing Satellite Mode SX (issue #291)
- Fixed QSO Detail - Issue when Sat-Name field was always disabled
- Fixed RPM build - Installed (but unpackaged) metainfo file issue

2023/12/01 - 0.30.0
- [NEW] - QSL Images are stored in the database
- [NEW] - Added AppStream Metainfo File (PR #262 thanks AsciiWolf)
- [NEW] - Added (WPX) prefix (issue #263)
- [NEW] - Added WPX Award statistics
- [NEW] - Added support for external translation files(issue #275)
- [CHANGED] - Removed QSOID from Export dialog column setting (issue #258)
- Fixed Date editor does not support NULL value in Logbook Direct Editor (issue #256)
- Fixed duplicate entry in Windows Add or Remove - only Window platform (issue #260)
- Fixed RST fields revert to 59 after changing them (issue #261)
- Fixed Cannot change TQSL Path in Settings - flatpak (issue #271)

2023/11/13 - 0.29.2
- Fixed QLog is already running error popup on MacOS (issue #257 thanks rjesson)

2023/11/10 - 0.29.1
- Fixed QSL cards tooltip are not displayed under qt6.5 (issue #248)
- Fixed Distance unit is not displayed in QSO Info under Windows (issue #250)
- Fixed Editing STATION_CALLSIGN can cause unwanted change in QSO Detail (issue #251)
- Fixed QSO Detail Operator Name containes an incorrect value (issue #252)
- Fixed Calls with VE, VA are coding as Amsterdam & St Paul Islands instead of Canada (issue #253)
- Fixed LoTW QSL import reports unmatched QSOs sometime (issue #254)

2023/10/20 - 0.29.0
- [NEW] - Added user-defined layout for New QSO Detail widget
- [NEW] - Main window State and Geometry can be saved to layout profile
- [NEW] - Awards - Added WAS
- [NEW] - Awards - WAZ/ITU/WAC show all possible values
- [NEW] - Distance unit (km/miles) is controlled by OS Locale
- [CHANGED] - Removed SAT Tab - field can be added via Layout Editor
- Improved Import QSO performance
- Fixed QLog crashes if POTA, SOTA or WWFF contain incorrect values (issue #245)
- Fixed QSOs are not uploaded to QRZ and HRDLog if fields contain HTML delimiter strings (issue #247)

2023/09/22 - 0.28.0
- [NEW] - Added ON4KST Chat Support
- [NEW] - Added Az BeamWidth and Az Offset to Antenna Profile
- [NEW] - Double-Clicking the IBP callsign in the online map tunes the frequency
- Fixed Browse button should open an expecting folder (issue #241)
- Fixed Reword QSL buttons and Settings in QSO Details and Settings (issue #242)

2023/08/21 - 0.27.0
- [NEW] - Added HRDLog Support
- Fixed Text field alignment (issue #233)
- Fixed Rig/Rot Connection port type selection (issue #235)
- Fixed Incorrect Distance Value in WSJTX Widget (issue #236)
- Fixed Incorrect WSJTX locator target on the map (issue #237)

2023/07/30 - 0.26.0
- [NEW] - Added user-defined layout for New QSO widget
- [NEW] - Pressing Spacebar in Callsign field skips RST fields
- [NEW] - Added user-defined URL for web lookup (issue #230)
- Fixed WSJTX QSOs should have an Operator Name from Callbook (issue #223)
- Fixed US call area suffixes not handled correctly (issue #226 thanks Florian)
- Fixed QSO Filter Detail allows to save an empty Filter Name (issue #228)

2023/07/17 - 0.25.1
- Fixed Unexpected mode change when Setting Dialog is saved (issue #222)
- Fixed QSL_SENT field has an incorrect ADIF name (issue #225)

2023/07/04 - 0.25.0
- [NEW] - Export - Added CSV Format
- [NEW] - Export - Added Type of Export Generic/QSLs (issue #209)
- [NEW] - Export - Added Exported Columns Setting
- [NEW] - Export - All export formats use the ADIF field name convention
- [CHANGED] - Export - JSON format contains a header - JSON format change
- [CHANGED] - Default Statistics Interval is curr_date-1 and curr_day
- Fixed Errors from Secure Storage are not shown (issue #216)
- Fixed RX/TX Bands are uneditable when RX/TX freqs are missing (issue #220)

2023/06/16 - 0.24.0
- Fixed Incorrect FT4 mode-submode (issue #212)
- Fixed CONTESTIA mode should be CONTESTI (issue #213)
- Fixed Context menu deselects NewContactEditLine (issue #215)
- FIxed incorrect WSJTX Filter initialization (issue #218)

2023/06/09 - 0.23.0
- [NEW] - Added CWDaemon Keyer Support
- [NEW] - Added FLDigi Keyer Support
- [NEW] - Online Map - based on locale, the map language is selected (Only EN, FR, GE supported - issue #180)
- Fixed After entering longer QTH, the field content is not left-aligned (issue #157)
- Fixed wrong QSO Time in case of JTDX (issue #204)
- Fixed QSL Sent Date fields are not filled if QSL Sent Status fields are Y (issue #207)

2023/05/07 - 0.22.0
- [NEW] - ADIF Import - My Profile is used to define default values
- [NEW] - ADIF Import - Checking a minimal set of input fields (start_time, call, band, mode, station_callsign)
- [NEW] - ADIF Import - Added Import Result Summary + Import Detail Info
- [NEW] - Main Menu - Added Help -> Mailing List.
- [NEW] - Export - Filter for the exported QSOs
- [CHANGE] - Renamed Locator to Gridsquare
- Fixed Some anomalies in the input and processing of QSLr Date (issue #192)
- Fixed User unfriedly CW Keyer Error (issue #194)
- Fixed ADIF import (issue #196)
- Fixed Operator field is incorrectly used  (issue #197)
- Fixed Crash if an unknown POTA & SOTA/WWFF Setting is entered (issue #198)
- Fixed FLDIGI cannot connect QLog (issue #199)
- Fixed if ADIF record is missing band info, add this from freq field (thx DJ5CW)

2023/04/16 - 0.21.0
- [NEW] - Rotator - Added Used-Defined Buttons
- [NEW] - Rotator - Added Destination Azimuth Needle
- [NEW] - Online Map - Added Antenna Beam Path
- [NEW] - Rig - Combos are disbled when disconnected
- [NEW] - Club Member Lists (issue #60)
- [NEW] - Alert Table shows rule names
- [CHANGED] - Alerts, DXC and WSJTX Network Notifications
- Fixed Antenna Azimuth Negative Value (issue #191)
- Fixed CTY file is not loaded when duplicate record (issue #193)

2023/03/14 - 0.20.0
- [NEW] - Added MUF Layer to online map
- [NEW] - Added International Beacon Project (IBP) Beacons to online map
- [NEW] - Centering the map on the current profile at start (issue #185)
- Fixed incorrect ADIF interpretation of _SENT fields (issue #176)
- Fixed Awards Dialog, Table double click for ITU/CQZ/WAZ/IOTA shows incorrect QSOs (issue #177)
- Fixed ADIF double-type fields when 0.0 is currently mapped to NULL (issue #178)
- Fixed QSO Detail to save NULL instead of empty string (issue #179)
- Fixed ADIF Import default _INTL values are now stored correctly (issue #183)
- Fixed Maps show an incorrect path if from/to grids are the same (issue #186)
- Fixed Online Maps incorrect Bounds if Bandmap callsign double-click (issue #188)
- Updated German translation (thx DL2KI)

2023/02/17 - 0.19.0
- [NEW] - Added Aurora Layer to online map
- [NEW] - Logbook - filter options are saved and restored
- [NEW] - Map Setting is saved and restored (issue #140)
- [NEW] - QSO Duration (issue #158)
- [NEW] - DX Cluster uses monospace font (issue #164)
- [NEW] - Awards - if click on the Entity/band the logbook filter is set (issue #168)
- [NEW] - WSJTX - Added Multicast support (issue #172)
- Fixed WWFF LOV Download (issue #169)

2023/01/15 - 0.18.0
- [NEW] - ADIF 3.1.4 updates
        - Added new modes FREEDV and M17
        - Added new band (submm)
        - Adopted Altitude (for SOTA only)
        - Adopted POTA (includes POTA List)
        - Adopted Gridsquare_ext (only import/export)
        - Adopted Hamlogeu_* (only import/export)
        - Adopted HamQTH_* (only import/export)
- [NEW] - Added new DXCC Status and color for it - Confirmed
- [NEW] - New Contact - Tab selection is saved
- [NEW] - Grid can contain 8-characters
- [NEW] - User filter can contain NULL value
- [NEW] - Compilation - added variables for external sources
- [NEW] - My DXCC/CQZ/ITUZ/Country is filled
- [NEW] - Alerts - Added Aging (issue #153)
- [NEW] - Alerts - Added DXCC Status Color (issue #153)
- [NEW] - DXC - Added Log Status to filter (issue #154)
- [NEW] - DXC - Added Spot deduplication to filter (issue #154)
- [NEW] - WSJTX - Added CQ-Spot Filter (issue #155)
- [NEW] - QSO Detail contains DXCC Tab (issue #156)
- [CHANGED] - New QSO DXCC Tab reworked (issue #144)
- [CHANGED] - All DXCC Stats are computed based on My DXCC instead of My Callsign
- [CHANGED] - Station Profile Setting layout

2022/12/18 - 0.17.0
- [NEW] - NetPort and Polling interval can be defined for NET Rigs
- [NEW] - NetPort can be defined for NET Rots
- [NEW] - Added Saving Bandmap Zoom per band (issue #137)
- [NEW] - CW speed synchronisation (issue #139)
- Fixed Missing callbook data when callsign has prefix (issue #133)
- Fixed Winkey2 echo chars are incorrectly displayed in CW Console (issue #141)
- [CHANGED] - Online Map - Gray-Line is enabled by default
- Update Timezone database

2022/11/20 - 0.16.0
- [NEW] - SOTA/IOTA lists updated regularly
- [NEW] - Added WWFF list, updated regularly
- [NEW] - QTH/Grid are filled based on SOTA/WWFF
- [NEW] - DXC/WSJTX columns are movable, added column visibility setting
- [NEW] - DXC/WSJTX columns layout is saved
- [NEW] - Added Wiki&Report Issue links to Help section
- [NEW] - About dialog contains run-time information
- [NEW] - Solar Info as a ToolTip
- [NEW] - QSO Manual Entry Mode
- Fixed Bandmap unlogical animation when band is changed (issue #128)
- Fixed Bandmap marks are not displayed correctly when RIT/XI (issue #131)
- Fixed Setting Dialog size
- Update Timezone database

2022/10/16 - 0.15.0
- Fixed Keeping the Bandmap RX mark always visible when centre RX is disabled (issue #115)
- Fixed Equipment Menu: Swapped Connect Keyer and Rig (issue #122)
- Fixed Callsign is deleted when clicking bandmap (issue #126)
- Fixed typo in the Map layer menu (issue #127)
- Fixed compilation issues & warning under QT6 - preparation for QT6 migration

2022/10/02 - 0.14.1
- Fixed CW Console - HALT Button is not enabled under Ubuntu flavours (issue #124)

2022/09/29 - 0.14.0
- [NEW] CW Console (Winkey2, Morse over CAT support)
- [NEW] DX Cluster pre-defined commands (send last spot, get stats)
- [NEW] Added DX Cluster Views (Spots, WCY, WWV, ToALL)
- [NEW] Implemented DX Cluster Reconnection
- [NEW] Remember last used DX Cluster
- [CHANGED] - UI unifications - Rot/Rig/DXC
- Fixed COM port validation for Windows platform
- Fixed Reconnecting (DXC/Callbook) (issue #110)
- Fixed DX Cluster crashes when DXC server is not connected and a command is sent (issue #111)
- Fixed Bandmap callsign selection not fully works (issue #116)

2022/08/06 - 0.13.0
- [NEW] QSY Contact Wiping (issue #100)
- [NEW] Timeoff is highlighted when QSO timer is running (issue #100)
- [NEW] Callsign whisperer
- [NEW] Bandmap - Spot's color is recalculated when QSO is saved
- [NEW] BandMap - CTRL + Wheel zooming
- [NEW] BandMap - Zooming via buttons keeps a focus on centre freq
- [NEW] BandMap - DX Spot's Comment as a tooltip
- [CHANGED] BandMap - UI Layout
- Fixed MacOS builds (PR #102) (thx gerbert)
- Fixed templates under MacOS (PR #101) (thx gerbert)
- Fixed WindowsOS Installer - Unable to upgrade version

2022/07/15 - 0.12.0
- [NEW] Statistics - Show ODX on the map
- [EXPERIMENTAL] Support for QT Styles (issue #88)
- [CHANGED] - Removed F2 as a shortcut for QSO field editing
- Next fixing of a high CPU load when DXC is processed (issue #52)
- Fixed QSO fields from prev QSOs when Prefix - Callsign - Suffix (issue #90)
- Fixed Chaotic QSO start time (issue #93)
- Offline maps - Lighter colors, night sky removed, Sun position removed (issue #97)
- Fixed incorrect A-Index colort (issue #98)
- Fixed Stats Widget - percents - does not reflect date range (issue #99)
- Fixed potential LogParam Cache issue
- Import/Export polishing

2022/06/26 - 0.11.0
- [NEW] QSO Detail/Edit Dialog
- [NEW] Added mW power Support
- [NEW] Implemented ADIF 3.1.3
- [NEW] Rigwidget saves last used freq for bands
- Fixed Rig Combo size when Rig Profile name is long (issue #31)
- Fixed CQZ, ITUZ do not validate whether their entered value is a number (issue #75)
- Fixed vucc, myvucc must be uppercase - Edit mode (issue #76)
- Fixed Greyline-Map is very dark (issue #78)
- Fixed DX Country is not saved properly when name is between S-Z (issue #79)
- Fixed Bandmap call selection - only left mouse button (issue #82)
- Fixed My Notes Copy & Paste - Rich Text (issue #83)
- Fixed Font appearance in the context menu (issue #84)

2022/06/05 - 0.10.0
- [NEW] Bandmap shows XIT/RIT Freq 
- [NEW] Bandmap RX Mark Center (issue #69)
- [NEW] Getting PTT State from RIG - only for CAT-controlled rigs
- [NEW] PTT Shortchut - only for CAT-controlled rigs
- Fixed Lost internet conneciton is not detected properly (issue #56)
- Fixed Cannot manually edit QSO Date&Time (issue #66)
- Fixed Field contents in capital letters (issue #67)
- Fixed Band RX is not updated when RX Freq is edited (issue #72)
- Fixed Stat Windget does not handle a date range correctly (issue #73)
- Fixed eQSL card is incorreclty handled when a callsign contains special characters (issue #74)

2022/05/20 - 0.9.0
- [NEW] User-defined Spot Alerts
- [NEW] User filter contains a new operator "Starts with"
- [NEW] a real local time is shown for the DX callsign (issue #45)
- [NEW] Lotw/eQSL registration info is showed from callbooks
- [NEW] Added shortcuts for menu and tabs
- [NEW] Bandmap - Switching a band view via Bandmap context menu (issue #57)
- [CHANGED] - Network Notification format
   - logid field is included in all messages
- Fixed issue with My Notes multiple lines edit/show mode (issue 39)
- Fixed issue when GUI froze when Rig disconnect was called (issue #50)
- Partially fixed a high CPU load when DXC is processed (issue #52)
- Fixed crashes under Debian "bullseye" - 32bit (issue #55)
- Fixed Bandmap Callsign selection margin (issue #61)
- Fixed issue when it was not possible to enter RX/TX freq manually

2022/04/22 - 0.8.0
- RIT/XIT offset enable/disable detection (issue #26)
- Fixed Rig Setting, Data Bits (issue #28)
- Added default PWR for Rig profile (issue #30)
- Fixed issue when GUI freezes during Rig connection (issue #32 & #33)
- Fixed issue with an incorrect value of A-Index (issue #34)
- Fixed ADI Import - incorrect _INTL fields import (issue #35)
- Fixed isuue with an editing of bands in Setting dialog (issue #36)
- Fixed issue with hamlib when get_pwr crashes for a network rig (issue #37)
- Improved new QSO fields are filled from prev QSO (issue #40)
- Added mode for a network Rig (issue #41)
- Fixed warning - processing a new request but the previous one hasn't been completed (issue #42)
- Fixed Info widget when Country name is long (issue #43)
- Reordered column visibility Tabs (issue #46)
- Improved Rig tunning when XIT/RIT is enabled (issue #47)

2022/04/08 - 0.7.0
- Settings - Ant/Rig/Rot are profiles
   - Reworked Ant/Rig/Rot Pages
   - Added RIG Properties (issue #18)
- Rig Widget - added Band/Rig/Mode selection (issue #5)
   - added VFO/XIT/RIT/PWR Indicators (issue #20 and issue #23)
- Rot Widget - works again
   - AZ/EL are stored to database if rot is connected (issue #22)
- Fixed issues with the Statistic Widget Combos (issue 25)

2022/03/10 - 0.6.5
- Fixed missing modes in Setting Dialog (issue #11)
- Fixed Station Profile text color in dark mode (issue #10)
- Fixed DXCluster Server Combo (issue #12)
- Fixed TAB focus on QSO Fields (issue #14)

2022/03/06 - 0.6.0
- [NEW] QSL - added import a file with QSL - with QSLr column
- Fixed QLog start when Band is 3cm (too long start time due to the Bandmap drawing) (issue #6)
- Fixed Rotator Widget Warning - map transformation issue (issue #8)
- Changed Bandmap window narrow size (issue #3)
- Changed User Filter Widget size
- Removed Units from Logbook widget
- Removed UTC string
- Renamed RSTs, RSTr etc. (issue #4)
- Renamed Main Menu Services->Service and Station->Equipment
- Internal - reworked Service networking signal handling

2022/02/19 - 0.5.0
- DB: Added submodes used by FLDigi and added their mapping to LoTW, Clublog etc.
- DB: Added all ADIF-defined modes/submodes
- DB: Remapped QSO fields to International field - NAME_INTL etc.
      - DB is converted to a new schema to use *_INTL columns
      - non-INTL columns are recalculated from _INTL columns - accents removal function
- GUI: Added Dark mode
- GUI: Time/date format is controlled by Locale (except WSJTX, FLDigi inputs)
- Import/Export: ADI do not export UTF-8 characters and *_INTL fields
- Import/Export: ADX exports UTF-8 characters and *_INTL fields
- Import/Export: Added Import of ADX file format
- Logbook: Shows QSO summary as a Callsign's tooltip
- Logbook: QSO time is shown with seconds; added timezone
- New QSO: Added My notes - free text for your personal notes
- Backup: Change backup format form ADI to ADX (ADX supports UTF-8)
- Settings: WSJTX Port is changable

2022/01/09 - 0.4.0
- Stats: Added Show on Map - QSOs and Worked&Confirmed Grids
- Stats: Stats are refreshed after every QSO
- WSJTX: Remove TRX/Monitoring Status
- Added Split mode - RX/TX RIG Offset
- Added export of selected QSOs
- Fixed FLdigi interface
- CPPChecks & Clazy cleanup

2021/12/19 - 0.3.0
- Added new fields to Station Profile
- Station Profile is stored in DB (not in QSetting)
- Added VUCC field for QSO
- Added BandMap marks (CTRL+M)
- Clublog is uploaded the same way as EQSL and LOTW (modifications are resent too)
- Clublog real-time upload was removed (temporary)
- QRZ.com - Added callsign query and upload QSO support
- Callbook cooperation - Primary&Secondary - Secondary used when Primary did not find

2021/11/28 - 0.2.0
- Initial fork changes
- Changed Logging format (Time + severity + context)
- Added Application singleton
- GUI Tweaking
   - Changed Tab-key behaviour
   - DXC Widget
   - manu others
- DXCCInfo is clean correctly when callsign is reset
- Password are stored in a Secure Storage
- Changed sorting criteria for BandFilter Combobox [Logbook View]
- Added DXCluster Filters - Context Menu of the DXC
- DXCluster spot time in UTC
- Changed Style for Enable/Disable column in QTableView (Checkbox)
- Fixed issue when mode combo is not refreshed after editing modes
  in Setting Dialog
- Database export to ADIF before starting
- Added Splashscreen
- Hamlib rework
   - Reworked Hamlib Setting Dialog
   - Detailed Setting for Serial Port
   - Added Network Radio/Rot Support
   - Connect/Disconnect Rig and Rot
   - Improved Error Handling from Rig/Rot
   - Fixed Setting freq/mode/submode from/to GUI
- Debug mode is more verbose and controled by QT_LOGGING_RULES variable
- BandMap automatically clear spots when Aging Time is enabled
- BandMap band is set based on NewContact Widget frequency
- Many changes and improvements in LogWindow
   - Minor changes in the input QSO forms
   - Changed Editing QSO flow
   - Full ADIF parsing and storing
   - Added Column Visibility Setting
- Added DEB control files
- CTY is updated regularly
- Main&NewContact Window reworking
   - Removed Contest Tab
   - Saving correct values for PROPMODE, QSL Sent/RCVD, SATs, IOTA, SOTA
     SIG, SIG_INFO, DOK
   - Added k-index, SFI saving
   - Added my Ant parameter
- LoTW Import/Export is verified and improved
- Added Rig offset support (support for Transverters)
- Added Station Location Profiles
- Added User-defined filters
- Added eQSL upload/download ADIF, download QSL Image
- Added Online Map Widget
- Reworked WSJTX Widget
   - Added Spot Aging
   - Sorted based on Last Activity Time
- Reworked Stats
- Added Awards
- Added Czech Translation


================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.


ZoneDetect
==========
(https://github.com/BertoldVdb/ZoneDetect)

Copyright (c) 2018-2019, Bertold Van den Bergh (vandenbergh@bertold.org)
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of the author nor the
      names of its contributors may be used to endorse or promote products
      derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR DISTRIBUTOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


TimeZone Database
=================
(https://github.com/evansiroky/timezone-boundary-builder/blob/master/DATA_LICENSE)

Open Database License (ODbL) v1.0
Disclaimer
Open Data Commons is not a law firm and does not provide legal services of any kind.

Open Data Commons has no formal relationship with you. Your receipt of this document
does not create any kind of agent-client relationship. Please seek the advice of 
a suitably qualified legal professional licensed to practice in your jurisdiction
before using this document.

No warranties and disclaimer of any damages. This information is provided ‘as is‘, and
this site makes no warranties on the information provided. Any damages resulting from
its use are disclaimed.

Plain language summary
A plain language summary of the Open Database License is available.

Alternative formats:
Plain Text

ODC Open Database License (ODbL)
Preamble
The Open Database License (ODbL) is a license agreement intended to
allow users to freely share, modify, and use this Database while
maintaining this same freedom for others. Many databases are covered by
copyright, and therefore this document licenses these rights. Some
jurisdictions, mainly in the European Union, have specific rights that
cover databases, and so the ODbL addresses these rights, too. Finally,
the ODbL is also an agreement in contract for users of this Database to
act in certain ways in return for accessing this Database.

Databases can contain a wide variety of types of content (images,
audiovisual material, and sounds all in the same database, for example),
and so the ODbL only governs the rights over the Database, and not the
contents of the Database individually. Licensors should use the ODbL
together with another license for the contents, if the contents have a
single set of rights that uniformly covers all of the contents. If the
contents have multiple sets of different rights, Licensors should
describe what rights govern what contents together in the individual
record or in some other way that clarifies what rights apply.

Sometimes the contents of a database, or the database itself, can be
covered by other rights not addressed here (such as private contracts,
trade mark over the name, or privacy rights / data protection rights
over information in the contents), and so you are advised that you may
have to consult other documents or clear other rights before doing
activities not covered by this License.

The Licensor (as defined below)

and

You (as defined below)

agree as follows:

1.0 Definitions of Capitalised Words
“Collective Database” – Means this Database in unmodified form as part
of a collection of independent databases in themselves that together are
assembled into a collective whole. A work that constitutes a Collective
Database will not be considered a Derivative Database.

“Convey” – As a verb, means Using the Database, a Derivative Database,
or the Database as part of a Collective Database in any way that enables
a Person to make or receive copies of the Database or a Derivative
Database. Conveying does not include interaction with a user through a
computer network, or creating and Using a Produced Work, where no
transfer of a copy of the Database or a Derivative Database occurs.
“Contents” – The contents of this Database, which includes the
information, independent works, or other material collected into the
Database. For example, the contents of the Database could be factual
data or works such as images, audiovisual material, text, or sounds.

“Database” – A collection of material (the Contents) arranged in a
systematic or methodical way and individually accessible by electronic
or other means offered under the terms of this License.

“Database Directive” – Means Directive 96/9/EC of the European
Parliament and of the Council of 11 March 1996 on the legal protection
of databases, as amended or succeeded.

“Database Right” – Means rights resulting from the Chapter III (“sui
generis”) rights in the Database Directive (as amended and as transposed
by member states), which includes the Extraction and Re-utilisation of
the whole or a Substantial part of the Contents, as well as any similar
rights available in the relevant jurisdiction under Section 10.4.

“Derivative Database” – Means a database based upon the Database, and
includes any translation, adaptation, arrangement, modification, or any
other alteration of the Database or of a Substantial part of the
Contents. This includes, but is not limited to, Extracting or
Re-utilising the whole or a Substantial part of the Contents in a new
Database.

“Extraction” – Means the permanent or temporary transfer of all or a
Substantial part of the Contents to another medium by any means or in
any form.

“License” – Means this license agreement and is both a license of rights
such as copyright and Database Rights and an agreement in contract.

“Licensor” – Means the Person that offers the Database under the terms
of this License.

“Person” – Means a natural or legal person or a body of persons
corporate or incorporate.

“Produced Work” – a work (such as an image, audiovisual material, text,
or sounds) resulting from using the whole or a Substantial part of the
Contents (via a search or other query) from this Database, a Derivative
Database, or this Database as part of a Collective Database.

“Publicly” – means to Persons other than You or under Your control by
either more than 50% ownership or by the power to direct their
activities (such as contracting with an independent consultant).

“Re-utilisation” – means any form of making available to the public all
or a Substantial part of the Contents by the distribution of copies, by
renting, by online or other forms of transmission.

“Substantial” – Means substantial in terms of quantity or quality or a
combination of both. The repeated and systematic Extraction or
Re-utilisation of insubstantial parts of the Contents may amount to the
Extraction or Re-utilisation of a Substantial part of the Contents.

“Use” – As a verb, means doing any act that is restricted by copyright
or Database Rights whether in the original medium or any other; and
includes without limitation distributing, copying, publicly performing,
publicly displaying, and preparing derivative works of the Database, as
well as modifying the Database as may be technically necessary to use it
in a different mode or format.

“You” – Means a Person exercising rights under this License who has not
previously violated the terms of this License with respect to the
Database, or who has received express permission from the Licensor to
exercise rights under this License despite a previous violation.

Words in the singular include the plural and vice versa.

2.0 What this License covers
2.1. Legal effect of this document. This License is:

      a. A license of applicable copyright and neighbouring rights;

      b. A license of the Database Right; and

      c. An agreement in contract between You and the Licensor.

2.2 Legal rights covered. This License covers the legal rights in the
Database, including:

      a. Copyright. Any copyright or neighbouring rights in the Database.
The copyright licensed includes any individual elements of the
Database, but does not cover the copyright over the Contents
independent of this Database. See Section 2.4 for details. Copyright
law varies between jurisdictions, but is likely to cover: the Database
model or schema, which is the structure, arrangement, and organisation
of the Database, and can also include the Database tables and table
indexes; the data entry and output sheets; and the Field names of
Contents stored in the Database;

      b. Database Rights. Database Rights only extend to the Extraction and
Re-utilisation of the whole or a Substantial part of the Contents.
Database Rights can apply even when there is no copyright over the
      Database. Database Rights can also apply when the Contents are removed
from the Database and are selected and arranged in a way that would
not infringe any applicable copyright; and

      c. Contract. This is an agreement between You and the Licensor for
access to the Database. In return you agree to certain conditions of
use on this access as outlined in this License.

2.3 Rights not covered.

      a. This License does not apply to computer programs used in the making
or operation of the Database;

      b. This License does not cover any patents over the Contents or the
Database; and

      c. This License does not cover any trademarks associated with the
      Database.

2.4 Relationship to Contents in the Database. The individual items of
the Contents contained in this Database may be covered by other rights,
including copyright, patent, data protection, privacy, or personality
rights, and this License does not cover any rights (other than Database
Rights or in contract) in individual Contents contained in the Database.
For example, if used on a Database of images (the Contents), this
License would not apply to copyright over individual images, which could
have their own separate licenses, or one single license covering all of
the rights over the images.

3.0 Rights granted
3.1 Subject to the terms and conditions of this License, the Licensor
grants to You a worldwide, royalty-free, non-exclusive, terminable (but
only under Section 9) license to Use the Database for the duration of
any applicable copyright and Database Rights. These rights explicitly
include commercial use, and do not exclude any field of endeavour. To
the extent possible in the relevant jurisdiction, these rights may be
exercised in all media and formats whether now known or created in the
future.

The rights granted cover, for example:

      a. Extraction and Re-utilisation of the whole or a Substantial part of
the Contents;

      b. Creation of Derivative Databases;

      c. Creation of Collective Databases;

      d. Creation of temporary or permanent reproductions by any means and
in any form, in whole or in part, including of any Derivative
Databases or as a part of Collective Databases; and

      e. Distribution, communication, display, lending, making available, or
performance to the public by any means and in any form, in whole or in
part, including of any Derivative Database or as a part of Collective
      Databases.

3.2 Compulsory license schemes. For the avoidance of doubt:

      a. Non-waivable compulsory license schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme cannot be waived, the Licensor reserves
the exclusive right to collect such royalties for any exercise by You
of the rights granted under this License;

      b. Waivable compulsory license schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme can be waived, the Licensor waives the
exclusive right to collect such royalties for any exercise by You of
the rights granted under this License; and,

      c. Voluntary license schemes. The Licensor waives the right to collect
royalties, whether individually or, in the event that the Licensor is
a member of a collecting society that administers voluntary licensing
schemes, via that society, from any exercise by You of the rights
granted under this License.

3.3 The right to release the Database under different terms, or to stop
distributing or making available the Database, is reserved. Note that
this Database may be multiple-licensed, and so You may have the choice
of using alternative licenses for this Database. Subject to Section
10.4, all other rights not expressly granted by Licensor are reserved.

4.0 Conditions of Use
4.1 The rights granted in Section 3 above are expressly made subject to
Your complying with the following conditions of use. These are important
conditions of this License, and if You fail to follow them, You will be
in material breach of its terms.

4.2 Notices. If You Publicly Convey this Database, any Derivative
Database, or the Database as part of a Collective Database, then You
must:

      a. Do so only under the terms of this License or another license
permitted under Section 4.4;

      b. Include a copy of this License (or, as applicable, a license
permitted under Section 4.4) or its Uniform Resource Identifier (URI)
with the Database or Derivative Database, including both in the
Database or Derivative Database and in any relevant documentation; and

      c. Keep intact any copyright or Database Right notices and notices
that refer to this License.

      d. If it is not possible to put the required notices in a particular
file due to its structure, then You must include the notices in a
location (such as a relevant directory) where users would be likely to
look for it.

4.3 Notice for using output (Contents). Creating and Using a Produced
Work does not require the notice in Section 4.2. However, if you
Publicly Use a Produced Work, You must include a notice associated with
the Produced Work reasonably calculated to make any Person that uses,
views, accesses, interacts with, or is otherwise exposed to the Produced
Work aware that Content was obtained from the Database, Derivative
Database, or the Database as part of a Collective Database, and that it
is available under this License.

      a. Example notice. The following text will satisfy notice under
Section 4.3:

    Contains information from DATABASE NAME, which is made available
    here under the Open Database License (ODbL).
DATABASE NAME should be replaced with the name of the Database and a
hyperlink to the URI of the Database. “Open Database License” should
contain a hyperlink to the URI of the text of this License. If
hyperlinks are not possible, You should include the plain text of the
required URI’s with the above notice.

4.4 Share alike.

      a. Any Derivative Database that You Publicly Use must be only under
the terms of:

           i. This License;

           ii. A later version of this License similar in spirit to this
License; or

           iii. A compatible license.

If You license the Derivative Database under one of the licenses
mentioned in (iii), You must comply with the terms of that license.

      b. For the avoidance of doubt, Extraction or Re-utilisation of the
whole or a Substantial part of the Contents into a new database is a
Derivative Database and must comply with Section 4.4.

      c. Derivative Databases and Produced Works. A Derivative Database is
Publicly Used and so must comply with Section 4.4. if a Produced Work
created from the Derivative Database is Publicly Used.

      d. Share Alike and additional Contents. For the avoidance of doubt,
You must not add Contents to Derivative Databases under Section 4.4 a
that are incompatible with the rights granted under this License.

      e. Compatible licenses. Licensors may authorise a proxy to determine
compatible licenses under Section 4.4 a iii. If they do so, the
authorised proxy’s public statement of acceptance of a compatible
license grants You permission to use the compatible license.

4.5 Limits of Share Alike. The requirements of Section 4.4 do not apply
in the following:

      a. For the avoidance of doubt, You are not required to license
Collective Databases under this License if You incorporate this
Database or a Derivative Database in the collection, but this License
still applies to this Database or a Derivative Database as a part of
the Collective Database;

      b. Using this Database, a Derivative Database, or this Database as
part of a Collective Database to create a Produced Work does not
create a Derivative Database for purposes of Section 4.4; and

      c. Use of a Derivative Database internally within an organisation is
not to the public and therefore does not fall under the requirements
of Section 4.4.

4.6 Access to Derivative Databases. If You Publicly Use a Derivative
Database or a Produced Work from a Derivative Database, You must also
offer to recipients of the Derivative Database or Produced Work a copy
in a machine readable form of:

      a. The entire Derivative Database; or

      b. A file containing all of the alterations made to the Database or
the method of making the alterations to the Database (such as an
algorithm), including any additional Contents, that make up all the
differences between the Database and the Derivative Database.

The Derivative Database (under a.) or alteration file (under b.) must be
available at no more than a reasonable production cost for physical
distributions and free of charge if distributed over the internet.

4.7 Technological measures and additional terms

      a. This License does not allow You to impose (except subject to
Section 4.7 b.) any terms or any technological measures on the
Database, a Derivative Database, or the whole or a Substantial part of
the Contents that alter or restrict the terms of this License, or any
rights granted under it, or have the effect or intent of restricting
the ability of any person to exercise those rights.

      b. Parallel distribution. You may impose terms or technological
measures on the Database, a Derivative Database, or the whole or a
Substantial part of the Contents (a “Restricted Database”) in
contravention of Section 4.74 a. only if You also make a copy of the
Database or a Derivative Database available to the recipient of the
Restricted Database:

           i. That is available without additional fee;

           ii. That is available in a medium that does not alter or restrict
the terms of this License, or any rights granted under it, or have
the effect or intent of restricting the ability of any person to
exercise those rights (an “Unrestricted Database”); and

           iii. The Unrestricted Database is at least as accessible to the
recipient as a practical matter as the Restricted Database.

      c. For the avoidance of doubt, You may place this Database or a
Derivative Database in an authenticated environment, behind a
password, or within a similar access control scheme provided that You
do not alter or restrict the terms of this License or any rights
granted under it or have the effect or intent of restricting the
ability of any person to exercise those rights.

4.8 Licensing of others. You may not sublicense the Database. Each time
You communicate the Database, the whole or Substantial part of the
Contents, or any Derivative Database to anyone else in any way, the
Licensor offers to the recipient a license to the Database on the same
terms and conditions as this License. You are not responsible for
enforcing compliance by third parties with this License, but You may
enforce any rights that You have over a Derivative Database. You are
solely responsible for any modifications of a Derivative Database made
by You or another Person at Your direction. You may not impose any
further restrictions on the exercise of the rights granted or affirmed
under this License.

5.0 Moral rights
5.1 Moral rights. This section covers moral rights, including any rights
to be identified as the author of the Database or to object to treatment
that would otherwise prejudice the author’s honour and reputation, or
any other derogatory treatment:

      a. For jurisdictions allowing waiver of moral rights, Licensor waives
all moral rights that Licensor may have in the Database to the fullest
extent possible by the law of the relevant jurisdiction under Section
      10.4;

      b. If waiver of moral rights under Section 5.1 a in the relevant
jurisdiction is not possible, Licensor agrees not to assert any moral
rights over the Database and waives all claims in moral rights to the
fullest extent possible by the law of the relevant jurisdiction under
Section 10.4; and

      c. For jurisdictions not allowing waiver or an agreement not to assert
moral rights under Section 5.1 a and b, the author may retain their
moral rights over certain aspects of the Database.

Please note that some jurisdictions do not allow for the waiver of moral
rights, and so moral rights may still subsist over the Database in some
jurisdictions.

6.0 Fair dealing, Database exceptions, and other rights not affected
6.1 This License does not affect any rights that You or anyone else may
independently have under any applicable law to make any use of this
Database, including without limitation:

      a. Exceptions to the Database Right including: Extraction of Contents
from non-electronic Databases for private purposes, Extraction for
purposes of illustration for teaching or scientific research, and
Extraction or Re-utilisation for public security or an administrative
or judicial procedure.

      b. Fair dealing, fair use, or any other legally recognised limitation
or exception to infringement of copyright or other applicable laws.

6.2 This License does not affect any rights of lawful users to Extract
and Re-utilise insubstantial parts of the Contents, evaluated
quantitatively or qualitatively, for any purposes whatsoever, including
creating a Derivative Database (subject to other rights over the
Contents, see Section 2.4). The repeated and systematic Extraction or
Re-utilisation of insubstantial parts of the Contents may however amount
to the Extraction or Re-utilisation of a Substantial part of the
Contents.

7.0 Warranties and Disclaimer
7.1 The Database is licensed by the Licensor “as is” and without any
warranty of any kind, either express, implied, or arising by statute,
custom, course of dealing, or trade usage. Licensor specifically
disclaims any and all implied warranties or conditions of title,
non-infringement, accuracy or completeness, the presence or absence of
errors, fitness for a particular purpose, merchantability, or otherwise.
Some jurisdictions do not allow the exclusion of implied warranties, so
this exclusion may not apply to You.

8.0 Limitation of liability
8.1 Subject to any liability that may not be excluded or limited by law,
the Licensor is not liable for, and expressly excludes, all liability
for loss or damage however and whenever caused to anyone by any use
under this License, whether by You or by anyone else, and whether caused
by any fault on the part of the Licensor or not. This exclusion of
liability includes, but is not limited to, any special, incidental,
consequential, punitive, or exemplary damages such as loss of revenue,
data, anticipated profits, and lost business. This exclusion applies
even if the Licensor has been advised of the possibility of such
damages.

8.2 If liability may not be excluded by law, it is limited to actual and
direct financial loss to the extent it is caused by proved negligence on
the part of the Licensor.

9.0 Termination of Your rights under this License
9.1 Any breach by You of the terms and conditions of this License
automatically terminates this License with immediate effect and without
notice to You. For the avoidance of doubt, Persons who have received the
Database, the whole or a Substantial part of the Contents, Derivative
Databases, or the Database as part of a Collective Database from You
under this License will not have their licenses terminated provided
their use is in full compliance with this License or a license granted
under Section 4.8 of this License. Sections 1, 2, 7, 8, 9 and 10 will
survive any termination of this License.

9.2 If You are not in breach of the terms of this License, the Licensor
will not terminate Your rights under it.

9.3 Unless terminated under Section 9.1, this License is granted to You
for the duration of applicable rights in the Database.

9.4 Reinstatement of rights. If you cease any breach of the terms and
conditions of this License, then your full rights under this License
will be reinstated:

      a. Provisionally and subject to permanent termination until the 60th
day after cessation of breach;

      b. Permanently on the 60th day after cessation of breach unless
otherwise reasonably notified by the Licensor; or

      c. Permanently if reasonably notified by the Licensor of the
violation, this is the first time You have received notice of
violation of this License from the Licensor, and You cure the
violation prior to 30 days after your receipt of the notice.

Persons subject to permanent termination of rights are not eligible to
be a recipient and receive a license under Section 4.8.

9.5 Notwithstanding the above, Licensor reserves the right to release
the Database under different license terms or to stop distributing or
making available the Database. Releasing the Database under different
license terms or stopping the distribution of the Database will not
withdraw this License (or any other license that has been, or is
required to be, granted under the terms of this License), and this
License will continue in full force and effect unless terminated as
stated above.

10.0 General
10.1 If any provision of this License is held to be invalid or
unenforceable, that must not affect the validity or enforceability of
the remainder of the terms and conditions of this License and each
remaining provision of this License shall be valid and enforced to the
fullest extent permitted by law.

10.2 This License is the entire agreement between the parties with
respect to the rights granted here over the Database. It replaces any
earlier understandings, agreements or representations with respect to
the Database.

10.3 If You are in breach of the terms of this License, You will not be
entitled to rely on the terms of this License or to complain of any
breach by the Licensor.

10.4 Choice of law. This License takes effect in and will be governed by
the laws of the relevant jurisdiction in which the License terms are
sought to be enforced. If the standard suite of rights granted under
applicable copyright law and Database Rights in the relevant
jurisdiction includes additional rights not granted under this License,
these additional rights are granted in this License in order to meet the
terms of this License.



================================================
FILE: QLog.pro
================================================
#-------------------------------------------------
#
# Project created by QtCreator 2019-06-10T09:13:09
#
#-------------------------------------------------

QT       += core gui sql network xml charts webenginewidgets serialport dbus quickwidgets webchannel websockets printsupport

greaterThan(QT_MAJOR_VERSION, 5): QT += widgets

TARGET = qlog
TEMPLATE = app
VERSION = 0.50.0

DEFINES += VERSION=\\\"$$VERSION\\\"

# Define paths to HAMLIB. Leave empty if system libraries should be used
#HAMLIBINCLUDEPATH =
#HAMLIBLIBPATH =
# Define Hamlib version. Leave empty if pkg-config should detect the version (lib must be installed and registered)
#HAMLIBVERSION_MAJOR =
#HAMLIBVERSION_MINOR =
#HAMLIBVERSION_PATCH =

# Define paths to pthread - needed for Hamlib4.5 and later. Leave empty if system libraries should be used
#PTHREADINCLUDEPATH =
#PTHREADLIBPATH =

# Define paths to QTKeyChain. Leave empty if system libraries should be used
#QTKEYCHAININCLUDEPATH =
#QTKEYCHAINLIBPATH =

# Define paths to zlib - Leave empty if system libraries should be used
#ZLIBINCLUDEPATH =
#ZLIBLIBPATH =

# Define paths to OpenSSL - Leave empty if system libraries should be used
#OPENSSLINCLUDEPATH =
#OPENSSLLIBPATH =

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS QT_MESSAGELOGCONTEXT

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
macx:QT_CONFIG -= no-pkg-config

CONFIG += c++11 force_debug_info
#CONFIG += sanitizer sanitize_address
CONFIG *= link_pkgconfig

SOURCES += \
        awards/AwardDefinition.cpp \
        awards/AwardDXCC.cpp \
        awards/AwardGridsquare.cpp \
        awards/AwardIOTA.cpp \
        awards/AwardITU.cpp \
        awards/AwardJapan.cpp \
        awards/AwardNZ.cpp \
        awards/AwardRDA.cpp \
        awards/AwardSpanishDME.cpp \
        awards/AwardUKD.cpp \
        awards/AwardUSCounty.cpp \
        awards/AwardPOTAActivator.cpp \
        awards/AwardPOTAHunter.cpp \
        awards/AwardSOTA.cpp \
        awards/SecondarySubdivisionAward.cpp \
        awards/AwardWAC.cpp \
        awards/AwardWAS.cpp \
        awards/AwardWAZ.cpp \
        awards/AwardWPX.cpp \
        awards/AwardWWFF.cpp \
        awards/BandTableAward.cpp \
        core/AlertEvaluator.cpp \
        core/AppGuard.cpp \
        core/CallbookManager.cpp \
        core/CredentialStore.cpp \
        core/FileCompressor.cpp \
        core/FldigiTCPServer.cpp \
        core/LOVDownloader.cpp \
        core/LogDatabase.cpp \
        core/LogLocale.cpp \
        core/LogParam.cpp \
        core/MembershipQE.cpp \
        core/Migration.cpp \
        core/NetworkNotification.cpp \
        core/PasswordCipher.cpp \
        core/PlatformParameterManager.cpp \
        core/PotaQE.cpp \
        core/PropConditions.cpp \
        core/QSLPrintLabelRenderer.cpp \
        core/QSLStorage.cpp \
        core/QSOFilterManager.cpp \
        core/WsjtxUDPReceiver.cpp \
        core/debug.cpp \
        core/EmergencyFrequency.cpp \
        core/main.cpp \
        core/zonedetect.c \
        cwkey/CWKeyer.cpp \
        cwkey/drivers/CWCatKey.cpp \
        cwkey/drivers/CWDaemonKey.cpp \
        cwkey/drivers/CWDummyKey.cpp \
        cwkey/drivers/CWFldigiKey.cpp \
        cwkey/drivers/CWKey.cpp \
        cwkey/drivers/CWWinKey.cpp \
        data/ActivityProfile.cpp \
        data/AntProfile.cpp \
        data/BandPlan.cpp \
        data/Accents.cpp \
        data/CWKeyProfile.cpp \
        data/CWShortcutProfile.cpp \
        data/Callsign.cpp \
        data/Data.cpp \
        data/DxServerString.cpp \
        data/Gridsquare.cpp \
        data/HostsPortString.cpp \
        data/MainLayoutProfile.cpp \
        data/RigProfile.cpp \
        data/RotProfile.cpp \
        data/RotUsrButtonsProfile.cpp \
        data/SerialPort.cpp \
        data/StationProfile.cpp \
        data/UpdatableSQLRecord.cpp \
        logformat/AdiFormat.cpp \
        logformat/AdxFormat.cpp \
        logformat/CabrilloFormat.cpp \
        logformat/CSVFormat.cpp \
        logformat/JsonFormat.cpp \
        logformat/LogFormat.cpp \
        logformat/PotaAdiFormat.cpp \
        models/AlertTableModel.cpp \
        models/AwardsTableModel.cpp \
        models/DxccTableModel.cpp \
        models/LogbookModel.cpp \
        models/RigTypeModel.cpp \
        models/RotTypeModel.cpp \
        models/SearchFilterProxyModel.cpp \
        models/ShortcutEditorModel.cpp \
        models/SqlListModel.cpp \
        models/WsjtxTableModel.cpp \
        rig/Rig.cpp \
        rig/RigCaps.cpp \
        rig/RigctldManager.cpp \
        rig/drivers/FlrigRigDrv.cpp \
        rig/drivers/GenericRigDrv.cpp \
        rig/drivers/HamlibRigDrv.cpp \
        rig/drivers/TCIRigDrv.cpp \
        rotator/RotCaps.cpp \
        rotator/Rotator.cpp \
        rotator/drivers/GenericRotDrv.cpp \
        rotator/drivers/HamlibRotDrv.cpp \
        rotator/drivers/PSTRotDrv.cpp \
        service/GenericCallbook.cpp \
        service/GenericQSLDownloader.cpp \
        service/GenericQSOUploader.cpp \
        service/cloudlog/Cloudlog.cpp \
        service/clublog/ClubLog.cpp \
        service/eqsl/Eqsl.cpp \
        service/hamqth/HamQTH.cpp \
        service/hrdlog/HRDLog.cpp \
        service/kstchat/KSTChat.cpp \
        service/lotw/Lotw.cpp \
        service/potaapp/PotaApp.cpp \
        service/qrzcom/QRZ.cpp \
        ui/ActivityEditor.cpp \
        ui/AlertRuleDetail.cpp \
        ui/AlertSettingDialog.cpp \
        ui/AlertWidget.cpp \
        ui/AwardsDialog.cpp \
        ui/DXCCSubmissionDialog.cpp \
        ui/BandmapWidget.cpp \
        ui/CWConsoleWidget.cpp \
        ui/ChatWidget.cpp \
        ui/ClockWidget.cpp \
        ui/ColumnSettingDialog.cpp \
        ui/DevToolsDialog.cpp \
        ui/DownloadQSLDialog.cpp \
        ui/DxFilterDialog.cpp \
        ui/DxWidget.cpp \
        ui/DxccTableWidget.cpp \
        ui/EditActivitiesDialog.cpp \
        ui/CabrilloExportDialog.cpp \
        ui/CabrilloTemplateDialog.cpp \
        ui/ExportDialog.cpp \
        ui/ExportPasswordDialog.cpp \
        ui/LoadDatabaseDialog.cpp \
        ui/PlatformSettingsDialog.cpp \
        ui/QSLGalleryDialog.cpp \
        ui/QSLPrintLabelDialog.cpp \
        ui/RigctldAdvancedDialog.cpp \
        ui/ImportDialog.cpp \
        ui/InputPasswordDialog.cpp \
        ui/KSTChatWidget.cpp \
        ui/KSTHighlightRuleDetail.cpp \
        ui/KSTHighlighterSettingDialog.cpp \
        ui/LogbookWidget.cpp \
        ui/MainWindow.cpp \
        ui/MapWebChannelHandler.cpp \
        ui/MapWidget.cpp \
        ui/ModeSelectionController.cpp \
        ui/NewContactWidget.cpp \
        ui/OnlineMapWidget.cpp \
        ui/PaperQSLDialog.cpp \
        ui/ProfileImageWidget.cpp \
        ui/QSLImportStatDialog.cpp \
        ui/QSODetailDialog.cpp \
        ui/QSOFilterDetail.cpp \
        ui/QSOFilterDialog.cpp \
        ui/QTableQSOView.cpp \
        ui/RigWidget.cpp \
        ui/RotatorWidget.cpp \
        ui/SettingsDialog.cpp \
        ui/ShowUploadDialog.cpp \
        ui/StatisticsWidget.cpp \
        ui/UploadQSODialog.cpp \
        ui/WebEnginePage.cpp \
        ui/WsjtxFilterDialog.cpp \
        ui/WsjtxWidget.cpp \
        ui/component/BaseDoubleSpinBox.cpp \
        ui/component/EditLine.cpp \
        ui/component/FreqQSpinBox.cpp \
        ui/component/MultiselectCompleter.cpp \
        ui/component/RepeatButton.cpp \
        ui/component/SmartSearchBox.cpp \
        ui/component/SqlHighlighter.cpp \
        ui/component/SwitchButton.cpp

HEADERS += \
        awards/AwardDefinition.h \
        awards/AwardDXCC.h \
        awards/AwardGridsquare.h \
        awards/AwardIOTA.h \
        awards/AwardITU.h \
        awards/AwardJapan.h \
        awards/AwardNZ.h \
        awards/AwardRDA.h \
        awards/AwardSpanishDME.h \
        awards/AwardUKD.h \
        awards/AwardUSCounty.h \
        awards/AwardPOTAActivator.h \
        awards/AwardPOTAHunter.h \
        awards/AwardSOTA.h \
        awards/SecondarySubdivisionAward.h \
        awards/AwardWAC.h \
        awards/AwardWAS.h \
        awards/AwardWAZ.h \
        awards/AwardWPX.h \
        awards/AwardWWFF.h \
        awards/BandTableAward.h \
        core/AlertEvaluator.h \
        core/AppGuard.h \
        core/CallbookManager.h \
        core/CredentialStore.h \
        core/FileCompressor.h \
        core/FldigiTCPServer.h \
        core/LOVDownloader.h \
        core/LogDatabase.h \
        core/LogLocale.h \
        core/LogParam.h \
        core/MembershipQE.h \
        core/Migration.h \
        core/NetworkNotification.h \
        core/PasswordCipher.h \
        core/PlatformParameterManager.h \
        core/PotaQE.h \
        core/PropConditions.h \
        core/QSLPrintLabelRenderer.h \
        core/QSLStorage.h \
        core/QSOFilterManager.h \
        core/QuadKeyCache.h \
        core/WsjtxUDPReceiver.h \
        core/csv.hpp \
        core/debug.h \
        core/EmergencyFrequency.h \
        core/zonedetect.h \
        cwkey/CWKeyer.h \
        cwkey/drivers/CWCatKey.h \
        cwkey/drivers/CWDaemonKey.h \
        cwkey/drivers/CWDummyKey.h \
        cwkey/drivers/CWFldigiKey.h \
        cwkey/drivers/CWKey.h \
        cwkey/drivers/CWWinKey.h \
        data/ActivityProfile.h \
        data/AntProfile.h \
        data/Band.h \
        data/BandPlan.h \
        data/CWKeyProfile.h \
        data/CWShortcutProfile.h \
        data/Callsign.h \
        data/Data.h \
        data/DxServerString.h \
        data/DxSpot.h \
        data/Dxcc.h \
        data/Gridsquare.h \
        data/HostsPortString.h \
        data/MainLayoutProfile.h \
        data/POTAEntity.h \
        data/POTASpot.h \
        data/ProfileManager.h \
        data/RigProfile.h \
        data/RotProfile.h \
        data/RotUsrButtonsProfile.h \
        data/SOTAEntity.h \
        data/SerialPort.h \
        data/SpotAlert.h \
        data/StationProfile.h \
        data/ToAllSpot.h \
        data/UpdatableSQLRecord.h \
        data/WCYSpot.h \
        data/WWFFEntity.h \
        data/WWVSpot.h \
        data/WsjtxDecode.h \
        data/WsjtxEntry.h \
        data/WsjtxLog.h \
        data/WsjtxLogADIF.h \
        data/WsjtxStatus.h \
        logformat/AdiFormat.h \
        logformat/AdxFormat.h \
        logformat/CabrilloFormat.h \
        logformat/CSVFormat.h \
        logformat/JsonFormat.h \
        logformat/LogFormat.h \
        logformat/PotaAdiFormat.h \
        models/AlertTableModel.h \
        models/AwardsTableModel.h \
        models/DxccTableModel.h \
        models/LogbookModel.h \
        models/RigTypeModel.h \
        models/RotTypeModel.h \
        models/SearchFilterProxyModel.h \
        models/ShortcutEditorModel.h \
        models/SqlListModel.h \
        models/WsjtxTableModel.h \
        rig/Rig.h \
        rig/RigCaps.h \
        rig/RigctldManager.h \
        rig/drivers/FlrigRigDrv.h \
        rig/drivers/GenericRigDrv.h \
        rig/drivers/HamlibRigDrv.h \
        rig/drivers/TCIRigDrv.h \
        rig/macros.h \
        rotator/RotCaps.h \
        rotator/Rotator.h \
        rotator/drivers/GenericRotDrv.h \
        rotator/drivers/HamlibRotDrv.h \
        rotator/drivers/PSTRotDrv.h \
        service/GenericCallbook.h \
        service/GenericQSLDownloader.h \
        service/GenericQSOUploader.h \
        service/cloudlog/Cloudlog.h \
        service/clublog/ClubLog.h \
        service/eqsl/Eqsl.h \
        service/hamqth/HamQTH.h \
        service/hrdlog/HRDLog.h \
        service/kstchat/KSTChat.h \
        service/lotw/Lotw.h \
        service/potaapp/PotaApp.h \
        service/qrzcom/QRZ.h \
        ui/ActivityEditor.h \
        ui/AlertRuleDetail.h \
        ui/AlertSettingDialog.h \
        ui/AlertWidget.h \
        ui/AwardsDialog.h \
        ui/DXCCSubmissionDialog.h \
        ui/BandmapWidget.h \
        ui/CWConsoleWidget.h \
        ui/ChatWidget.h \
        ui/ClockWidget.h \
        ui/ColumnSettingDialog.h \
        ui/DevToolsDialog.h \
        ui/DownloadQSLDialog.h \
        ui/DxFilterDialog.h \
        ui/DxWidget.h \
        ui/DxccTableWidget.h \
        ui/EditActivitiesDialog.h \
        ui/CabrilloExportDialog.h \
        ui/CabrilloTemplateDialog.h \
        ui/ExportDialog.h \
        ui/ExportPasswordDialog.h \
        ui/LoadDatabaseDialog.h \
        ui/PlatformSettingsDialog.h \
        ui/QSLGalleryDialog.h \
        ui/QSLPrintLabelDialog.h \
        ui/RigctldAdvancedDialog.h \
        ui/ImportDialog.h \
        ui/InputPasswordDialog.h \
        ui/KSTChatWidget.h \
        ui/KSTHighlightRuleDetail.h \
        ui/KSTHighlighterSettingDialog.h \
        ui/LogbookWidget.h \
        ui/MainWindow.h \
        ui/MapWebChannelHandler.h \
        ui/MapWidget.h \
        ui/ModeSelectionController.h \
        ui/NewContactWidget.h \
        ui/OnlineMapWidget.h \
        ui/PaperQSLDialog.h \
        ui/ProfileImageWidget.h \
        ui/QSLImportStatDialog.h \
        ui/QSODetailDialog.h \
        ui/QSOFilterDetail.h \
        ui/QSOFilterDialog.h \
        ui/QTableQSOView.h \
        ui/ShowUploadDialog.h \
        ui/SplashScreen.h \
        ui/RigWidget.h \
        ui/RotatorWidget.h \
        ui/SettingsDialog.h \
        ui/StatisticsWidget.h \
        ui/UploadQSODialog.h \
        ui/WebEnginePage.h \
        ui/WsjtxFilterDialog.h \
        ui/WsjtxWidget.h \
        i18n/dbstrings.tri \
        i18n/datastrings.tri \
        ui/component/BaseDoubleSpinBox.h \
        ui/component/ButtonStyle.h \
        ui/component/EditLine.h \
        ui/component/FreqQSpinBox.h \
        ui/component/MultiselectCompleter.h \
        ui/component/RepeatButton.h \
        ui/component/ShutdownAwareWidget.h \
        ui/component/SmartSearchBox.h \
        ui/component/SqlHighlighter.h \
        ui/component/StyleItemDelegate.h \
        ui/component/SwitchButton.h

FORMS += \
        ui/ActivityEditor.ui \
        ui/AlertRuleDetail.ui \
        ui/AlertSettingDialog.ui \
        ui/AlertWidget.ui \
        ui/AwardsDialog.ui \
        ui/DXCCSubmissionDialog.ui \
        ui/BandmapWidget.ui \
        ui/CWConsoleWidget.ui \
        ui/ChatWidget.ui \
        ui/ClockWidget.ui \
        ui/ColumnSettingDialog.ui \
        ui/ColumnSettingSimpleDialog.ui \
        ui/DevToolsDialog.ui \
        ui/DownloadQSLDialog.ui \
        ui/DxFilterDialog.ui \
        ui/DxWidget.ui \
        ui/EditActivitiesDialog.ui \
        ui/CabrilloExportDialog.ui \
        ui/CabrilloTemplateDialog.ui \
        ui/ExportDialog.ui \
        ui/ExportPasswordDialog.ui \
        ui/LoadDatabaseDialog.ui \
        ui/PlatformSettingsDialog.ui \
        ui/QSLGalleryDialog.ui \
        ui/QSLPrintLabelDialog.ui \
        ui/RigctldAdvancedDialog.ui \
        ui/ImportDialog.ui \
        ui/InputPasswordDialog.ui \
        ui/KSTChatWidget.ui \
        ui/KSTHighlightRuleDetail.ui \
        ui/KSTHighlighterSettingDialog.ui \
        ui/LogbookWidget.ui \
        ui/MainWindow.ui \
        ui/NewContactWidget.ui \
        ui/PaperQSLDialog.ui \
        ui/ProfileImageWidget.ui \
        ui/QSLImportStatDialog.ui \
        ui/QSODetailDialog.ui \
        ui/QSOFilterDetail.ui \
        ui/QSOFilterDialog.ui \
        ui/RigWidget.ui \
        ui/RotatorWidget.ui \
        ui/SettingsDialog.ui \
        ui/ShowUploadDialog.ui \
        ui/StatisticsWidget.ui \
        ui/UploadQSODialog.ui \
        ui/WsjtxFilterDialog.ui \
        ui/WsjtxWidget.ui

RESOURCES += \
    i18n/i18n.qrc \
    res/flags/flags.qrc \
    res/icons/icons.qrc \
    res/res.qrc

OTHER_FILES += \
    res/stylesheet.css \
    res/qlog.rc \
    res/qlog.desktop \
    res/qlog.1 \
    res/io.github.foldynl.QLog.metainfo.xml

TRANSLATIONS = i18n/qlog_cs.ts \
               i18n/qlog_de.ts \
               i18n/qlog_es.ts \
               i18n/qlog_fr.ts \
               i18n/qlog_it.ts \
               i18n/qlog_zh_CN.ts

RC_ICONS = res/qlog.ico
ICON = res/qlog.icns

# https://stackoverflow.com/questions/56734224/qmake-and-pkg-config?rq=1
defineReplace(findPackage) {
    pkg = $${1}Version
    !defined($$pkg, var) {
        $$pkg = $$system($$pkgConfigExecutable() --modversion $$1)
        isEmpty($$pkg): $$pkg = 0
        cache($$pkg, stash)
    }
    return($$eval($$pkg))
}

defineReplace(removeNonDigi) {
    output = $$1
    output = $$replace(output, [^0-9], " ")
    output = $$split(output, " ")
    return($$member(output, 0))
}

isEmpty(HAMLIBVERSION_MAJOR) {
   HAMLIBVERSIONSTRING =  $$findPackage(hamlib)
   HAMLIBVERSIONS = $$split(HAMLIBVERSIONSTRING, ".")
   HAMLIBVERSION_MAJOR = $$member(HAMLIBVERSIONS, 0)
   HAMLIBVERSION_MINOR = $$member(HAMLIBVERSIONS, 1)
   HAMLIBVERSION_PATCH = $$member(HAMLIBVERSIONS, 2)
}

HAMLIBVERSION_MINOR = $$removeNonDigi($$HAMLIBVERSION_MINOR)

isEmpty(HAMLIBVERSION_MINOR){
   HAMLIBVERSION_MINOR=0
}

HAMLIBVERSION_PATCH = $$removeNonDigi($$HAMLIBVERSION_PATCH)

isEmpty(HAMLIBVERSION_PATCH){
  HAMLIBVERSION_PATCH=0
}

!isEmpty(HAMLIBINCLUDEPATH) {
   INCLUDEPATH += $$HAMLIBINCLUDEPATH
}

!isEmpty(QTKEYCHAININCLUDEPATH) {
   INCLUDEPATH += $$QTKEYCHAININCLUDEPATH
}

!isEmpty(PTHREADINCLUDEPATH) {
   INCLUDEPATH += $$PTHREADINCLUDEPATH
}

!isEmpty(ZLIBINCLUDEPATH) {
   INCLUDEPATH += $$ZLIBINCLUDEPATH
}

!isEmpty(OPENSSLINCLUDEPATH) {
   INCLUDEPATH += $$OPENSSLINCLUDEPATH
}

!isEmpty(HAMLIBLIBPATH) {
   LIBS += -L$$HAMLIBLIBPATH
}

!isEmpty(QTKEYCHAINLIBPATH) {
   LIBS += -L$$QTKEYCHAINLIBPATH
}

!isEmpty(PTHREADINCLUDEPATH) {
   LIBS += -L$$PTHREADINCLUDEPATH
}

!isEmpty(ZLIBLIBPATH) {
   LIBS += -L$$ZLIBLIBPATH
}

!isEmpty(OPENSSLLIBPATH) {
   LIBS += -L$$OPENSSLLIBPATH
}

unix:!macx {
   isEmpty(PREFIX) {
     PREFIX = /usr/local
   }

   target.path = $$PREFIX/bin

   desktop.path = $$PREFIX/share/applications/
   desktop.files += res/$${TARGET}.desktop

   manpage.path = $$PREFIX/share/man/man1
   manpage.files += res/$${TARGET}.1

   icon.path = $$PREFIX/share/icons/hicolor/256x256/apps
   icon.files += res/$${TARGET}.png

   metainfo.path = $$PREFIX/share/metainfo/
   metainfo.files += res/io.github.foldynl.QLog.metainfo.xml

   INSTALLS += target desktop icon metainfo manpage

   INCLUDEPATH += /usr/local/include
   PKGCONFIG += openssl
   LIBS += -L/usr/local/lib -lhamlib -lsqlite3 -lz
   equals(QT_MAJOR_VERSION, 6): LIBS += -lqt6keychain
   equals(QT_MAJOR_VERSION, 5): LIBS += -lqt5keychain
}

macx: {
   # This allows the app to be shipped in a non-bundeled version
   !isEmpty(PREFIX) {
      target.path = $$PREFIX
      INSTALLS += target
   }

   INCLUDEPATH += /usr/local/include /opt/homebrew/include /opt/local/include
   LIBS += -L/usr/local/lib -L/opt/homebrew/lib -lhamlib -lsqlite3 -lz -L/opt/local/lib -lssl -lcrypto
   equals(QT_MAJOR_VERSION, 6): LIBS += -lqt6keychain
   equals(QT_MAJOR_VERSION, 5): LIBS += -lqt5keychain
   DISTFILES +=
}

win32: {
   INCLUDEPATH += \
        /usr/local/include \
        $$[QT_INSTALL_PREFIX]/../Src/qtbase/src/3rdparty/sqlite/

   SOURCES += \
        rig/drivers/OmnirigRigDrv.cpp \
        rig/drivers/Omnirigv2RigDrv.cpp \
        $$[QT_INSTALL_PREFIX]/../Src/qtbase/src/3rdparty/sqlite/sqlite3.c


   HEADERS += \
        rig/drivers/OmnirigRigDrv.h \
        rig/drivers/Omnirigv2RigDrv.h \
        rig/drivers/OmniRigEventSink.h \
        $$[QT_INSTALL_PREFIX]/../Src/qtbase/src/3rdparty/sqlite/sqlite3.h

   TARGET = qlog
   QMAKE_TARGET_COMPANY = OK1MLG
   QMAKE_TARGET_DESCRIPTION = Hamradio logging

   LIBS += -lws2_32 -llibhamlib-4 -lzlib -llibssl -llibcrypto
   equals(QT_MAJOR_VERSION, 6): LIBS += -lqt6keychain
   equals(QT_MAJOR_VERSION, 5): LIBS += -lqt5keychain

   DEFINES += WIN32_LEAN_AND_MEAN
   DEFINES += ZD_EXPORT=
}

DEFINES += HAMLIBVERSION_MAJOR=$$HAMLIBVERSION_MAJOR
DEFINES += HAMLIBVERSION_MINOR=$$HAMLIBVERSION_MINOR
DEFINES += HAMLIBVERSION_PATCH=$$HAMLIBVERSION_PATCH

DISTFILES += \
    Changelog \
    i18n/dbstrings.tri \
    res/data/sat_modes


================================================
FILE: README.md
================================================
# QLog

QLog is an Amateur Radio logging application for Linux, Windows. It
is based on the Qt framework and uses SQLite as database backend.

QLogs aims to be as simple as possible, but to provide everything the operator expects from the log to be. This log is not currently focused on contests.

![Screenshot](https://foldynl.github.io/QLog/screens/qlog_main.png)

## Features

- Customizable GUI
- Rig control via Hamlib, Omnirig v1 (Windows only), Omnirig v2 (Windows only), TCI, FLRig
- Rotator control via Hamlib, PSTRotator
- HamQTH and QRZ.com callbook integration
- DX cluster integration
- **LoTW**, **eQSL**, **QRZ.com**, **Clublog**, **HRDLog.net**, **ON4KST Chat**, **Cloudlog/Wavelog** integration (**eQSL includes QSL pictures download**)
- **Secure Password Storage** for all services with password or security token
- **Online** and **Offline** map
- Club Member lookup
- CW Keyer Support - CWDaemon, FLDigi (all supported modes), Morse Over CAT, WinKey v1 or v2
- Bandmap
- CW Console
- WSJT-X integration
- Station Location Profile support
- Various station statistics
- Basic Awards support
- Basic Contest support
- Custom QSO Filters
- **NO** ads, **NO** user tracking, **NO** hidden telemetry - simply free and open-source
- SQLite backend.

### Supported OS
* Linux
* Windows 10/11 (64bit)
* MacOS (experimental - only for developers)

### Supported Rigs
* all supported by [Hamlib](https://hamlib.github.io/)
* all supported by [Omnirig v1](https://www.dxatlas.com/omnirig/) (Windows only)
* all supported by [Omnirig v2](https://www.hb9ryz.ch/omnirig/) (Windows only)
* all supported by [TCI](https://eesdr.com/en/software-en/software-en)
* all supported by [FLRig](http://www.w1hkj.com/flrig-help/supported_transceivers.html)

### Supported Rotators
* all supported by [Hamlib](https://hamlib.github.io/)

### Supported Keyers
* [CWDaemon](https://cwdaemon.sourceforge.net/)
* [FLDigi](http://www.w1hkj.com/)
* Morse Over CAT
* WinKey v1 or v2 compatible hardware

### Supported Secure Password Storage
* Linux: LibSecretKeyring, GnomeKeyring, Kwallet4, Kwallet5
* Windows: Windows Credential Store
* MacOS: macOS Keychain

### Third-party software
* [TQSL](http://www.arrl.org/tqsl-download) – optional, needed for LoTW support

For more details, screenshots etc, please, see [QLog Wiki](https://github.com/foldynl/QLog/wiki)

Please, used [QLog Issues](https://github.com/foldynl/QLog/issues) for reporting any issue or open a [discussion](https://github.com/foldynl/QLog/discussions).
You can also use [QLog mailing list](https://groups.io/g/qlog)


## Installation

### Minimum Hardware Requirements
- The recommended graphical resolution: 1920x1080
- CPU and memory: minimum requirements the same as for your OS
- Graphic Card with OpenGL support
- Serial connection if radio control is used

### Linux

Prerequisites:

- Installed Trusted QSL (Optional) - `sudo apt install trustedqsl` or from [ARRL](http://www.arrl.org/tqsl-download)

**DEB packages** for currently supported Ubuntu versions are available for amd64, arm64 platforms via [Ubuntu PPA](https://launchpad.net/~foldyna/+archive/ubuntu/qlog). Ubuntu users can use following commands:

`sudo add-apt-repository ppa:foldyna/qlog`

`sudo apt update`

`sudo apt install qlog`

Fedora **RPM packages** are available via GitHub [Releases](https://github.com/foldynl/QLog/releases/latest)

<a href='https://flathub.org/apps/io.github.foldynl.QLog'>   <img width='120' alt='Download on Flathub' src='https://dl.flathub.org/assets/badges/flathub-badge-en.png'/></a>

**Flatpak** package is available via [Flathub](https://flathub.org/apps/io.github.foldynl.QLog). The package contains built-in TrustedQSL.

The above packages are maintained by the application maintainer. However, there are many other unofficial packages available for other distributions — see the Unofficial Repositories on [QLog Wiki](https://github.com/foldynl/QLog/wiki).

### Windows

Prerequisites:

- Installed [Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-supported-redistributable-version)
- Installed [Trusted QSL](http://www.arrl.org/tqsl-download) (Optional)
- Installed [Omnirig v1](https://www.dxatlas.com/omnirig/) (Optional)
- Installed [Omnirig v2](https://www.hb9ryz.ch/omnirig/) (Optional)

Installation package is available via GitHub [Releases](https://github.com/foldynl/QLog/releases) .

### MacOS

MacOS DMG: https://github.com/aa5sh/QLog/releases

## Disclaimer Regarding Forks and Clones

This project is released as open source and may be forked or modified in accordance with its license.

If you are using a fork, clone, or any modified version of this project that is not maintained in this official repository, please note:

- We do **not** provide support for any forks, clones, or modified versions of this project.
- This includes support requests related to "core features" as changes introduced in forks may directly or indirectly affect their behavior.
- Any issues, bug reports, or feature requests concerning a forked or modified version must be directed to the maintainer of that specific repository.

Support is provided exclusively for the original, unmodified version of the project distributed from this official source.

By using a fork or modified version, you acknowledge that compatibility, stability, and functionality may differ from the original project, and responsibility
for such differences lies solely with the maintainer of that fork.

## Compilation

### General

Prerequisites

- Installed Qt
- Installed [qtkeychain-devel](https://github.com/frankosterfeld/qtkeychain) library and headers
- Installed [OpenSSL-devel](https://wiki.openssl.org/index.php/Binaries) libraries and headers
- Installed [HamLib-devel](https://github.com/Hamlib/Hamlib/releases/latest) libraries and headers

`qmake` supports listed input parameters that affect the compilation process.

- `HAMLIBINCLUDEPATH` - the path to Hamlib Includes 
- `HAMLIBLIBPATH` - the path to Hamlib Library 
- `HAMLIBVERSION_MAJOR` - Hamlib version - major number (must be present if `pkg-config` cannot determine Hamlib version)
- `HAMLIBVERSION_MINOR` - Hamlib version - minor number (must be present if `pkg-config` cannot determine Hamlib version)
- `HAMLIBVERSION_PATCH` - Hamlib version - patch number (must be present if `pkg-config` cannot determine Hamlib version)
- `PTHREADINCLUDEPATH`  - the path to pthread Includes - needed for Windows Hamlib 4.5 and later. Leave empty if system libraries should be used.
- `PTHREADLIBPATH` - the path to pthread Library - needed for Windows Hamlib 4.5 and later. Leave empty if system libraries should be used.
- `QTKEYCHAININCLUDEPATH` - the path to QtKeyChain Includes 
- `QTKEYCHAINLIBPATH`- the path to QtKeyChain Library
- `ZLIBINCLUDEPATH` - the path to ZLIB Includes
- `ZLIBLIBPATH` - the path to ZLIB Library

Leave variables empty if system libraries and Hamlib version autodetect (calling `pkg-config`) should be used during compilation (for Windows, the parameter must be present)

An example of use:

`
C:/Qt/6.4.1/msvc2019_64/bin/qmake.exe C:\Users\devel\development\QLog\QLog.pro -spec win32-msvc "CONFIG+=qtquickcompiler" "HAMLIBINCLUDEPATH = C:\Users\devel\development\hamlib\include" "HAMLIBLIBPATH =  C:\Users\devel\development\hamlib\lib\gcc" "HAMLIBVERSION_MAJOR = 4" "HAMLIBVERSION_MINOR = 5" "HAMLIBVERSION_PATCH = 0" "QTKEYCHAININCLUDEPATH = C:\Users\devel\development\qtkeychain_build\include" "QTKEYCHAINLIBPATH = C:\Users\devel\development\qtkeychain_build\lib" && C:/Qt/Tools/QtCreator/bin/jom/jom.exe qmake_all
`

### Windows

Prerequisites

- [Visual Studio 2022](https://visualstudio.microsoft.com/vs/community/)
- QT with source codes (6.x, Qt Webengine, OpenSSL Toolkit)
- [Omnirig v1](https://www.dxatlas.com/omnirig/)
- [Omnirig v2](https://www.hb9ryz.ch/omnirig/)
- [Hamlib](https://github.com/Hamlib/Hamlib/releases)
  - hamlib-w64-4.5.5.exe is the latest
    - Need to run the following commands to "fix" the library *** Fix Paths if necessary ***
      CD "C:\Program Files\hamlib-w64-4.5.5\lib\msvc"
      "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\bin\Hostx64\x64\link.exe" /lib /machine:X64 /def:libhamlib-4.def
      copy libhamlib-4.lib hamlib.lib
- Install C++ Module - https://learn.microsoft.com/en-us/vcpkg/get_started/get-started-vscode?pivots=shell-powershell

	cd C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg
	vcpkg install pthreads
	vcpkg install qtkeychain-qt6

System Environmental Path Settings
	C:\Program Files\hamlib-w64-4.5.5\bin
	C:\QTTools\vcpkg\packages\qtkeychain-qt6_x64-windows\bin

Clone QLog Master Branch
In QT Creator Projects->Desktop Qt 6.8.0 MSVC2022 64Bit->Build Steps->Additional Arguments
	**** You need to update the paths accordingly ****
	**** Need to be on same line seperated by spaces ****
	"HAMLIBINCLUDEPATH='C:\Program Files\hamlib-w64-4.5.5\include'"
	"HAMLIBLIBPATH='C:\Program Files\hamlib-w64-4.5.5\lib\msvc'"
	"HAMLIBVERSION_MAJOR=4"
	"HAMLIBVERSION_MINOR=5"
	"HAMLIBVERSION_PATCH=5"
	"QTKEYCHAININCLUDEPATH=C:\QTTools\vcpkg\packages\qtkeychain-qt6_x64-windows\include"
	"QTKEYCHAINLIBPATH=C:\QTTools\vcpkg\packages\qtkeychain-qt6_x64-windows\lib"
	"PTHREADLIBPATH=C:\QTTools\vcpkg\packages\pthreads_x64-windows\lib"
	"PTHREADINCLUDEPATH=C:\QTTools\vcpkg\packages\pthreads_x64-windows\include"


### Linux

for Debian:

`sudo apt-get -y install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libsqlite3-dev libhamlib++-dev libqt5charts5-dev qttools5-dev-tools libqt5keychain1 qt5keychain-dev qtwebengine5-dev build-essential libqt5serialport5-dev pkg-config libqt5websockets5-dev libssl-dev`

for Debian (QT6):

`sudo apt-get -y install libhamlib-dev build-essential pkg-config qt6-base-dev qtkeychain-qt6-dev qt6-webengine-dev libqt6charts6-dev libqt6serialport6 libqt6webenginecore6-bin libqt6svg6-dev libgl-dev libqt6websockets6-dev qt6-serialport-dev libsqlite3-dev libssl-dev`

for Fedora:

`dnf install qt5-qtbase-devel qt5-qtwebengine-devel qt5-qtcharts-devel hamlib-devel qtkeychain-qt5-devel qt5-qtserialport-devel pkg-config qt5-qtwebsockets-devel libsqlite3x-devel openssl-devel`

for both:

`git clone https://github.com/foldynl/QLog.git`

`cd  QLog`

for Debian:

`qmake QLog.pro`

for Debian (QT6):

`qmake6 QLog.pro`

for Fedora:

`/usr/bin/qmake-qt5`

NOTE: if it is necessary then use `qmake` input parameters described above to affect compilation. The input parameter must be use in case when Hamlib or qtkeychain are compiled from their source code repos.

for all:

`make`

### MacOS

In order to build QLog on MacOS, following prerequisites must be satisfied.

1. [Xcode](#xcode) command line tools
2. [Homebrew](https://brew.sh)
3. [Qt](https://www.qt.io) with QtCreator

##### Xcode

Xcode command line tools can be installed by issuing a command in command terminal:

```
xcode-select --install
```

**N.B.:** This command doesn't install Xcode itself, however It will take some time to download and
install the tools anyway.

##### MacOS build

Last dependencies before building QLog are:

```
 brew install qt6
 brew link qt6 --force
 brew install hamlib
 brew link hamlib --force
 brew install qtkeychain
 brew install dbus-glib
 brew install brotli
 brew install icu4c
 brew install pkg-config
```

As soon as the steps above are finished, QLog source can be opened in QtCreator, configured, built and run.
QLog app (qlog.app) from the build artifacts folder can be later copied (`installed`) to `~/Applications` and
accessed via Spotlight search bar.

NOTE: if it is necessary then use `qmake` input parameters described above to affect compilation. The input parameter must be use in case when hamlib or qtkeychain is compiled from their source code repos.



## License

Copyright (C) 2020  Thomas Gatzweiler

Copyright (C) 2021-2026  Ladislav Foldyna

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.


================================================
FILE: awards/AwardDXCC.cpp
================================================
#include <QCoreApplication>
#include "AwardDXCC.h"

QString AwardDXCC::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "DXCC");
}

QString AwardDXCC::headersColumns(const QString &) const
{
    return QStringLiteral("translate_to_locale(d.name) col1, d.prefix col2 ");
}

QString AwardDXCC::sqlDetailTable(const QString &entity) const
{
    return " FROM (SELECT id, name, prefix FROM dxcc_entities_clublog WHERE deleted = 0 "
           "       UNION "
           "       SELECT DISTINCT dxcc, b.name, b.prefix || ' ("
           + QCoreApplication::translate("AwardsDialog", "DELETED") + ")' "
           "             FROM source_contacts a INNER JOIN dxcc_entities_clublog b ON a.dxcc = b.id AND b.deleted = 1 where a.my_dxcc = '" + entity + "') d "
           "   LEFT OUTER JOIN source_contacts c ON (d.id = c.dxcc AND (c.id IS NULL OR c.my_dxcc = '" + entity + "'))"
           "   LEFT OUTER JOIN modes m on c.mode = m.name ";
}

QString AwardDXCC::additionalWhere(const QString &) const
{
    return QString();
}

QString AwardDXCC::clickFilter(const QString &, const QString &) const
{
    return QString();
}

bool AwardDXCC::clickUsesCountryName() const
{
    return true;
}


================================================
FILE: awards/AwardDXCC.h
================================================
#ifndef QLOG_AWARDS_AWARDDXCC_H
#define QLOG_AWARDS_AWARDDXCC_H

#include "BandTableAward.h"

class AwardDXCC : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("dxcc"); }
    QString displayName() const override;

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
    bool clickUsesCountryName() const override;
};

#endif // QLOG_AWARDS_AWARDDXCC_H


================================================
FILE: awards/AwardDefinition.cpp
================================================
#include "AwardDefinition.h"

bool AwardDefinition::entityInputEnabled() const
{
    return true;
}

bool AwardDefinition::notWorkedEnabled() const
{
    return true;
}

AwardDefinition::ConditionResult AwardDefinition::getConditionSelected(const QModelIndex &) const
{
    return ConditionResult();
}


================================================
FILE: awards/AwardDefinition.h
================================================
#ifndef QLOG_AWARDS_AWARDDEFINITION_H
#define QLOG_AWARDS_AWARDDEFINITION_H

#include <QString>
#include <QStringList>
#include <QWidget>
#include <QModelIndex>

/* Filter parameters collected from the AwardsDialog UI controls.
 * Passed to AwardDefinition::updateData() on every filter change. */
struct AwardFilterParams
{
    QString entitySelected;            /* DXCC entity ID from the "My DXCC Entity" combo */
    QStringList modes;                 /* SQL IN-list values, e.g. {"'NONE'", "'CW'", "'PHONE'"} */
    QStringList confirmedConditions;   /* SQL OR-conditions for confirmed status */
    bool notWorkedOnly;                /* Show only entities with no QSOs on any band */
    bool notConfirmedOnly;             /* Show only entities worked but not confirmed */
    QString userFilterWhereClause;     /* Extra WHERE clause from QSOFilterManager (includes leading "AND") */
};

/* Abstract base class for all award definitions.
 *
 * To add a completely custom award (non-table display), subclass this directly
 * and implement createWidget() / updateData().
 *
 * For the common band-column table display, subclass BandTableAward instead.
 *
 * Registration: add one line to AwardsDialog::createAwards(). */
class AwardDefinition
{
public:
    virtual ~AwardDefinition() = default;

    /* Unique internal key (e.g. "dxcc", "sota", "grid4"). Used as combo item data. */
    virtual QString key() const = 0;

    /*Translatable display name shown in the Award combo box. */
    virtual QString displayName() const = 0;

    /*Whether the "My DXCC Entity" combo is shown. Default: true. */
    virtual bool entityInputEnabled() const;

    /*Whether the Not-Worked / Not-Confirmed checkboxes are shown. Default: true. */
    virtual bool notWorkedEnabled() const;

    /*Create the display widget. Called once on first selection. Store in m_widget. */
    virtual QWidget* createWidget(QWidget *parent) = 0;

    /*Refresh data using the current filter parameters. Called on every filter change. */
    virtual void updateData(const AwardFilterParams &params) = 0;

    /* Return filter data for the logbook based on a double-clicked cell.
     * The dialog uses ConditionResult to emit AwardConditionSelected(country, band, filter)
     * which opens the logbook filtered to matching QSOs.
     * Default implementation returns an invalid (no-op) result. */
    struct ConditionResult
    {
        QString country;   /* Country name for the logbook filter (empty = not used) */
        QString band;      /* Band name from the column header (empty = all bands) */
        QString filter;    /* SQL WHERE clause fragment, e.g. "(sota_ref = 'OE/TI-001')" */
        bool valid = false;
    };
    virtual ConditionResult getConditionSelected(const QModelIndex &clickedIndex) const;

    /*Returns the cached widget (nullptr before createWidget()). */
    QWidget* widget() const { return m_widget; }

protected:
    QWidget *m_widget = nullptr;
};

#endif // QLOG_AWARDS_AWARDDEFINITION_H


================================================
FILE: awards/AwardGridsquare.cpp
================================================
#include <QCoreApplication>
#include "AwardGridsquare.h"

AwardGridsquare::AwardGridsquare(int chars)
    : m_chars(chars)
{
}

QString AwardGridsquare::key() const
{
    return QString("grid%1").arg(m_chars);
}

QString AwardGridsquare::displayName() const
{
    switch ( m_chars )
    {
    case 2: return QCoreApplication::translate("AwardsDialog", "Gridsquare 2-Chars");
    case 4: return QCoreApplication::translate("AwardsDialog", "Gridsquare 4-Chars");
    case 6: return QCoreApplication::translate("AwardsDialog", "Gridsquare 6-Chars");
    default: return QCoreApplication::translate("AwardsDialog", "Gridsquare %1-Chars").arg(m_chars);
    }
}

QString AwardGridsquare::headersColumns(const QString &) const
{
    return QString("substr(c.gridsquare, 1, %1) col1, NULL col2 ").arg(m_chars);
}

QString AwardGridsquare::sqlDetailTable(const QString &entity) const
{
    return " FROM source_contacts c"
           "      INNER JOIN modes m ON c.mode = m.name AND c.my_dxcc = '" + entity + "' ";
}

QString AwardGridsquare::additionalWhere(const QString &) const
{
    return QString(" AND length(c.gridsquare) >= %1 ").arg(m_chars);
}

QString AwardGridsquare::clickFilter(const QString &col1Value, const QString &) const
{
    return QString("gridsquare LIKE '%1%%'").arg(col1Value);
}


================================================
FILE: awards/AwardGridsquare.h
================================================
#ifndef QLOG_AWARDS_AWARDGRIDSQUARE_H
#define QLOG_AWARDS_AWARDGRIDSQUARE_H

#include "BandTableAward.h"

class AwardGridsquare : public BandTableAward
{
public:
    explicit AwardGridsquare(int chars);

    QString key() const override;
    QString displayName() const override;
    bool notWorkedEnabled() const override { return false; }

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;

private:
    int m_chars;
};

#endif // QLOG_AWARDS_AWARDGRIDSQUARE_H


================================================
FILE: awards/AwardIOTA.cpp
================================================
#include <QCoreApplication>
#include "AwardIOTA.h"

QString AwardIOTA::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "IOTA");
}

QString AwardIOTA::headersColumns(const QString &) const
{
    return QStringLiteral("c.iota col1, NULL col2 ");
}

QString AwardIOTA::sqlDetailTable(const QString &entity) const
{
    return " FROM source_contacts c"
           "      INNER JOIN modes m ON c.mode = m.name AND c.my_dxcc = '" + entity + "'";
}

QString AwardIOTA::additionalWhere(const QString &) const
{
    return " AND c.iota is not NULL ";
}

QString AwardIOTA::clickFilter(const QString &col1Value, const QString &) const
{
    return QString("iota = '%1'").arg(col1Value);
}


================================================
FILE: awards/AwardIOTA.h
================================================
#ifndef QLOG_AWARDS_AWARDIOTA_H
#define QLOG_AWARDS_AWARDIOTA_H

#include "BandTableAward.h"

class AwardIOTA : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("iota"); }
    QString displayName() const override;
    bool notWorkedEnabled() const override { return false; }

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
};

#endif // QLOG_AWARDS_AWARDIOTA_H


================================================
FILE: awards/AwardITU.cpp
================================================
#include <QCoreApplication>
#include "AwardITU.h"

QString AwardITU::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "ITU");
}

QString AwardITU::headersColumns(const QString &) const
{
    return QStringLiteral("d.n col1, null col2 ");
}

QString AwardITU::sqlDetailTable(const QString &entity) const
{
    return " FROM ituzCTE d "
           "   LEFT OUTER JOIN source_contacts c ON d.n = c.ituz AND c.my_dxcc = '" + entity + "'"
           "   LEFT OUTER JOIN modes m on c.mode = m.name";
}

QString AwardITU::additionalWhere(const QString &) const
{
    return QString();
}

QStringList AwardITU::additionalCTEs(const QString &, const QString &) const
{
    return { generateNumberRangeCTE("ituzCTE", 1, 90) };
}

QString AwardITU::clickFilter(const QString &col1Value, const QString &) const
{
    return QString("ituz = '%1'").arg(col1Value);
}


================================================
FILE: awards/AwardITU.h
================================================
#ifndef QLOG_AWARDS_AWARDITU_H
#define QLOG_AWARDS_AWARDITU_H

#include "BandTableAward.h"

class AwardITU : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("itu"); }
    QString displayName() const override;

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QStringList additionalCTEs(const QString &entity, const QString &contactFilter) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
};

#endif // QLOG_AWARDS_AWARDITU_H


================================================
FILE: awards/AwardJapan.cpp
================================================
#include <QCoreApplication>
#include "AwardJapan.h"

AwardJapan::AwardJapan()
    : SecondarySubdivisionAward(QStringLiteral("japan"), QStringLiteral("339"))
{
}

QString AwardJapan::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "Japanese Cities/Ku/Guns");
}


================================================
FILE: awards/AwardJapan.h
================================================
#ifndef QLOG_AWARDS_AWARDJAPAN_H
#define QLOG_AWARDS_AWARDJAPAN_H

#include "SecondarySubdivisionAward.h"

class AwardJapan : public SecondarySubdivisionAward
{
public:
    AwardJapan();
    QString displayName() const override;
};

#endif // QLOG_AWARDS_AWARDJAPAN_H


================================================
FILE: awards/AwardNZ.cpp
================================================
#include <QCoreApplication>
#include "AwardNZ.h"

AwardNZ::AwardNZ()
    : SecondarySubdivisionAward(QStringLiteral("nz"), QStringLiteral("170"))
{
}

QString AwardNZ::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "NZ Counties");
}


================================================
FILE: awards/AwardNZ.h
================================================
#ifndef QLOG_AWARDS_AWARDNZ_H
#define QLOG_AWARDS_AWARDNZ_H

#include "SecondarySubdivisionAward.h"

class AwardNZ : public SecondarySubdivisionAward
{
public:
    AwardNZ();
    QString displayName() const override;
};

#endif // QLOG_AWARDS_AWARDNZ_H


================================================
FILE: awards/AwardPOTAActivator.cpp
================================================
#include <QCoreApplication>
#include "AwardPOTAActivator.h"

QString AwardPOTAActivator::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "POTA Activator");
}

QString AwardPOTAActivator::headersColumns(const QString &) const
{
    return QStringLiteral("p.reference col1, p.name col2 ");
}

QString AwardPOTAActivator::sqlDetailTable(const QString &) const
{
    return " FROM pota_directory p "
           "      INNER JOIN source_contacts c ON SUBSTR(c.my_pota_ref_str, 1, COALESCE(NULLIF(INSTR(c.my_pota_ref_str, '@'), 0) - 1, LENGTH(c.my_pota_ref_str))) = p.reference"
           "      INNER JOIN modes m on c.mode = m.name ";
}

QString AwardPOTAActivator::additionalWhere(const QString &) const
{
    return " AND c.my_pota_ref_str is not NULL ";
}

QStringList AwardPOTAActivator::additionalCTEs(const QString &, const QString &contactFilter) const
{
    return { generateSplitCTE("my_pota_ref", "my_pota_ref_str", contactFilter) };
}

QString AwardPOTAActivator::sourceContactsOverride(const QString &) const
{
    return generateSplitSourceContacts("my_pota_ref_str");
}

QString AwardPOTAActivator::clickFilter(const QString &col1Value, const QString &) const
{
    // Bug fix: original had "my_pota_ref LIKE = '%%1%'" (extra '=')
    return QString("my_pota_ref LIKE '%%1%'").arg(col1Value);
}


================================================
FILE: awards/AwardPOTAActivator.h
================================================
#ifndef QLOG_AWARDS_AWARDPOTAACTIVATOR_H
#define QLOG_AWARDS_AWARDPOTAACTIVATOR_H

#include "BandTableAward.h"

class AwardPOTAActivator : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("potaa"); }
    QString displayName() const override;
    bool entityInputEnabled() const override { return false; }
    bool notWorkedEnabled() const override { return false; }

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QStringList additionalCTEs(const QString &entity, const QString &contactFilter) const override;
    QString sourceContactsOverride(const QString &contactFilter) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
};

#endif // QLOG_AWARDS_AWARDPOTAACTIVATOR_H


================================================
FILE: awards/AwardPOTAHunter.cpp
================================================
#include <QCoreApplication>
#include "AwardPOTAHunter.h"

QString AwardPOTAHunter::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "POTA Hunter");
}

QString AwardPOTAHunter::headersColumns(const QString &) const
{
    return QStringLiteral("p.reference col1, p.name col2 ");
}

QString AwardPOTAHunter::sqlDetailTable(const QString &) const
{
    return " FROM pota_directory p "
           "      INNER JOIN source_contacts c ON SUBSTR(c.pota, 1, COALESCE(NULLIF(INSTR(c.pota, '@'), 0) - 1, LENGTH(c.pota))) = p.reference"
           "      INNER JOIN modes m on c.mode = m.name ";
}

QString AwardPOTAHunter::additionalWhere(const QString &) const
{
    return " AND c.pota is not NULL ";
}

QStringList AwardPOTAHunter::additionalCTEs(const QString &, const QString &contactFilter) const
{
    return { generateSplitCTE("pota_ref", "pota", contactFilter) };
}

QString AwardPOTAHunter::sourceContactsOverride(const QString &) const
{
    return generateSplitSourceContacts("pota");
}

QString AwardPOTAHunter::clickFilter(const QString &col1Value, const QString &) const
{
    return QString("pota_ref LIKE '%%1%'").arg(col1Value);
}


================================================
FILE: awards/AwardPOTAHunter.h
================================================
#ifndef QLOG_AWARDS_AWARDPOTAHUNTER_H
#define QLOG_AWARDS_AWARDPOTAHUNTER_H

#include "BandTableAward.h"

class AwardPOTAHunter : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("potah"); }
    QString displayName() const override;
    bool entityInputEnabled() const override { return false; }
    bool notWorkedEnabled() const override { return false; }

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QStringList additionalCTEs(const QString &entity, const QString &contactFilter) const override;
    QString sourceContactsOverride(const QString &contactFilter) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
};

#endif // QLOG_AWARDS_AWARDPOTAHUNTER_H


================================================
FILE: awards/AwardRDA.cpp
================================================
#include <QCoreApplication>
#include "AwardRDA.h"

AwardRDA::AwardRDA()
    : SecondarySubdivisionAward(QStringLiteral("rda"), QStringLiteral("15, 54, 61, 126, 151"))
{
}

QString AwardRDA::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "Russian Districts");
}


================================================
FILE: awards/AwardRDA.h
================================================
#ifndef QLOG_AWARDS_AWARDRDA_H
#define QLOG_AWARDS_AWARDRDA_H

#include "SecondarySubdivisionAward.h"

class AwardRDA : public SecondarySubdivisionAward
{
public:
    AwardRDA();
    QString displayName() const override;
};

#endif // QLOG_AWARDS_AWARDRDA_H


================================================
FILE: awards/AwardSOTA.cpp
================================================
#include <QCoreApplication>
#include "AwardSOTA.h"

QString AwardSOTA::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "SOTA");
}

QString AwardSOTA::headersColumns(const QString &) const
{
    return QStringLiteral("s.summit_code col1, NULL col2 ");
}

QString AwardSOTA::sqlDetailTable(const QString &) const
{
    return " FROM sota_summits s "
           "     INNER JOIN source_contacts c ON c.sota_ref = s.summit_code "
           "     INNER JOIN modes m on c.mode = m.name ";
}

QString AwardSOTA::additionalWhere(const QString &) const
{
    return QString();
}

QString AwardSOTA::clickFilter(const QString &col1Value, const QString &) const
{
    return QString("sota_ref = '%1'").arg(col1Value);
}


================================================
FILE: awards/AwardSOTA.h
================================================
#ifndef QLOG_AWARDS_AWARDSOTA_H
#define QLOG_AWARDS_AWARDSOTA_H

#include "BandTableAward.h"

class AwardSOTA : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("sota"); }
    QString displayName() const override;
    bool entityInputEnabled() const override { return false; }
    bool notWorkedEnabled() const override { return false; }

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
};

#endif // QLOG_AWARDS_AWARDSOTA_H


================================================
FILE: awards/AwardSpanishDME.cpp
================================================
#include <QCoreApplication>
#include "AwardSpanishDME.h"

AwardSpanishDME::AwardSpanishDME()
    : SecondarySubdivisionAward(QStringLiteral("spanishdme"), QStringLiteral("21, 29, 32, 281"))
{
}

QString AwardSpanishDME::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "Spanish DMEs");
}


================================================
FILE: awards/AwardSpanishDME.h
================================================
#ifndef QLOG_AWARDS_AWARDSPANISHDME_H
#define QLOG_AWARDS_AWARDSPANISHDME_H

#include "SecondarySubdivisionAward.h"

class AwardSpanishDME : public SecondarySubdivisionAward
{
public:
    AwardSpanishDME();
    QString displayName() const override;
};

#endif // QLOG_AWARDS_AWARDSPANISHDME_H


================================================
FILE: awards/AwardUKD.cpp
================================================
#include <QCoreApplication>
#include "AwardUKD.h"

AwardUKD::AwardUKD()
    : SecondarySubdivisionAward(QStringLiteral("ukd"), QStringLiteral("288"))
{
}

QString AwardUKD::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "Ukrainian Districts");
}


================================================
FILE: awards/AwardUKD.h
================================================
#ifndef QLOG_AWARDS_AWARDUKD_H
#define QLOG_AWARDS_AWARDUKD_H

#include "SecondarySubdivisionAward.h"

class AwardUKD : public SecondarySubdivisionAward
{
public:
    AwardUKD();
    QString displayName() const override;
};

#endif // QLOG_AWARDS_AWARDUKD_H


================================================
FILE: awards/AwardUSCounty.cpp
================================================
#include <QCoreApplication>
#include "AwardUSCounty.h"

AwardUSCounty::AwardUSCounty()
    : SecondarySubdivisionAward(QStringLiteral("uscounty"), QStringLiteral("291, 6, 110"))
{
}

QString AwardUSCounty::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "US Counties");
}


================================================
FILE: awards/AwardUSCounty.h
================================================
#ifndef QLOG_AWARDS_AWARDUSCOUNTY_H
#define QLOG_AWARDS_AWARDUSCOUNTY_H

#include "SecondarySubdivisionAward.h"

class AwardUSCounty : public SecondarySubdivisionAward
{
public:
    AwardUSCounty();
    QString displayName() const override;
};

#endif // QLOG_AWARDS_AWARDUSCOUNTY_H


================================================
FILE: awards/AwardWAC.cpp
================================================
#include <QCoreApplication>
#include "AwardWAC.h"


/* https://www.arrl.org/wac */

QString AwardWAC::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "WAC");
}

QString AwardWAC::headersColumns(const QString &) const
{
    return QStringLiteral("d.column2 col1, d.column1 col2 ");
}

QString AwardWAC::sqlDetailTable(const QString &entity) const
{
    return " FROM continents d "
           "   LEFT OUTER JOIN source_contacts c ON d.column1 = c.cont AND c.my_dxcc = '" + entity + "'"
           "   LEFT OUTER JOIN modes m on c.mode = m.name ";
}

QString AwardWAC::additionalWhere(const QString &) const
{
    return QString();
}

QStringList AwardWAC::additionalCTEs(const QString &, const QString &) const
{
    return { generateValuesCTE("continents",
                               { { QStringLiteral("NA"), QCoreApplication::translate("AwardsDialog", "North America") },
                                 { QStringLiteral("SA"), QCoreApplication::translate("AwardsDialog", "South America") },
                                 { QStringLiteral("EU"), QCoreApplication::translate("AwardsDialog", "Europe") },
                                 { QStringLiteral("AF"), QCoreApplication::translate("AwardsDialog", "Africa") },
                                 { QStringLiteral("OC"), QCoreApplication::translate("AwardsDialog", "Oceania") },
                                 { QStringLiteral("AS"), QCoreApplication::translate("AwardsDialog", "Asia") }
                               }) };
}

QString AwardWAC::clickFilter(const QString &, const QString &col2Value) const
{
    return QString("cont = '%1'").arg(col2Value);
}


================================================
FILE: awards/AwardWAC.h
================================================
#ifndef QLOG_AWARDS_AWARDWAC_H
#define QLOG_AWARDS_AWARDWAC_H

#include "BandTableAward.h"

class AwardWAC : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("wac"); }
    QString displayName() const override;

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QStringList additionalCTEs(const QString &entity, const QString &contactFilter) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
};

#endif // QLOG_AWARDS_AWARDWAC_H


================================================
FILE: awards/AwardWAS.cpp
================================================
#include <QCoreApplication>
#include "AwardWAS.h"

QString AwardWAS::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "WAS");
}

QString AwardWAS::headersColumns(const QString &) const
{
    return QStringLiteral("d.subdivision_name col1, d.code col2 ");
}

QString AwardWAS::sqlDetailTable(const QString &entity) const
{
    return " FROM adif_enum_primary_subdivision d"
           "   LEFT OUTER JOIN source_contacts c ON d.dxcc = c.dxcc AND d.code = c.state AND c.my_dxcc = '" + entity + "' AND d.dxcc in (6, 110, 291)"
           "   LEFT OUTER JOIN modes m on c.mode = m.name";
}

QString AwardWAS::additionalWhere(const QString &) const
{
    return " AND d.dxcc in (6, 110, 291) ";
}

QString AwardWAS::clickFilter(const QString &, const QString &col2Value) const
{
    return QString("state = '%1' and dxcc in (6, 110, 291)").arg(col2Value);
}


================================================
FILE: awards/AwardWAS.h
================================================
#ifndef QLOG_AWARDS_AWARDWAS_H
#define QLOG_AWARDS_AWARDWAS_H

#include "BandTableAward.h"

class AwardWAS : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("was"); }
    QString displayName() const override;

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
};

#endif // QLOG_AWARDS_AWARDWAS_H


================================================
FILE: awards/AwardWAZ.cpp
================================================
#include <QCoreApplication>
#include "AwardWAZ.h"

QString AwardWAZ::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "WAZ");
}

QString AwardWAZ::headersColumns(const QString &) const
{
    return QStringLiteral("d.n col1, null col2 ");
}

QString AwardWAZ::sqlDetailTable(const QString &entity) const
{
    return " FROM cqzCTE d "
           "   LEFT OUTER JOIN source_contacts c ON d.n = c.cqz AND c.my_dxcc = '" + entity + "'"
           "   LEFT OUTER JOIN modes m on c.mode = m.name ";
}

QString AwardWAZ::additionalWhere(const QString &) const
{
    return QString();
}

QStringList AwardWAZ::additionalCTEs(const QString &, const QString &) const
{
    return { generateNumberRangeCTE("cqzCTE", 1, 40) };
}

QString AwardWAZ::clickFilter(const QString &col1Value, const QString &) const
{
    return QString("cqz = '%1'").arg(col1Value);
}


================================================
FILE: awards/AwardWAZ.h
================================================
#ifndef QLOG_AWARDS_AWARDWAZ_H
#define QLOG_AWARDS_AWARDWAZ_H

#include "BandTableAward.h"

class AwardWAZ : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("waz"); }
    QString displayName() const override;

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QStringList additionalCTEs(const QString &entity, const QString &contactFilter) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
};

#endif // QLOG_AWARDS_AWARDWAZ_H


================================================
FILE: awards/AwardWPX.cpp
================================================
#include <QCoreApplication>
#include "AwardWPX.h"

QString AwardWPX::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "WPX");
}

QString AwardWPX::headersColumns(const QString &) const
{
    return QStringLiteral("c.pfx col1, null col2 ");
}

QString AwardWPX::sqlDetailTable(const QString &entity) const
{
    return " FROM source_contacts c"
           "      INNER JOIN modes m ON c.mode = m.name AND c.my_dxcc = '" + entity + "'";
}

QString AwardWPX::additionalWhere(const QString &) const
{
    return " AND c.pfx is not null ";
}

QString AwardWPX::clickFilter(const QString &col1Value, const QString &) const
{
    return QString("pfx = '%1'").arg(col1Value);
}


================================================
FILE: awards/AwardWPX.h
================================================
#ifndef QLOG_AWARDS_AWARDWPX_H
#define QLOG_AWARDS_AWARDWPX_H

#include "BandTableAward.h"

class AwardWPX : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("wpx"); }
    QString displayName() const override;
    bool notWorkedEnabled() const override { return false; }

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
};

#endif // QLOG_AWARDS_AWARDWPX_H


================================================
FILE: awards/AwardWWFF.cpp
================================================
#include <QCoreApplication>
#include "AwardWWFF.h"

QString AwardWWFF::displayName() const
{
    return QCoreApplication::translate("AwardsDialog", "WWFF");
}

QString AwardWWFF::headersColumns(const QString &) const
{
    return QStringLiteral("w.reference col1, w.name col2 ");
}

QString AwardWWFF::sqlDetailTable(const QString &) const
{
    return " FROM wwff_directory w "
           "     INNER JOIN source_contacts c ON c.wwff_ref = w.reference "
           "     INNER JOIN modes m on c.mode = m.name ";
}

QString AwardWWFF::additionalWhere(const QString &) const
{
    return QString();
}

QString AwardWWFF::clickFilter(const QString &col1Value, const QString &) const
{
    return QString("wwff_ref = '%1'").arg(col1Value);
}


================================================
FILE: awards/AwardWWFF.h
================================================
#ifndef QLOG_AWARDS_AWARDWWFF_H
#define QLOG_AWARDS_AWARDWWFF_H

#include "BandTableAward.h"

class AwardWWFF : public BandTableAward
{
public:
    QString key() const override { return QStringLiteral("wwff"); }
    QString displayName() const override;
    bool entityInputEnabled() const override { return false; }
    bool notWorkedEnabled() const override { return false; }

protected:
    QString headersColumns(const QString &entity) const override;
    QString sqlDetailTable(const QString &entity) const override;
    QString additionalWhere(const QString &entity) const override;
    QString clickFilter(const QString &col1Value, const QString &col2Value) const override;
};

#endif // QLOG_AWARDS_AWARDWWFF_H


================================================
FILE: awards/BandTableAward.cpp
================================================
#include <QHeaderView>
#include "BandTableAward.h"
#include "core/debug.h"
#include "data/Band.h"
#include "data/BandPlan.h"

MODULE_IDENTIFICATION("qlog.awards.bandtableaward");

QWidget* BandTableAward::createWidget(QWidget *parent)
{
    FCT_IDENTIFICATION;

    m_tableView = new QTableView(parent);
    m_model = new AwardsTableModel(m_tableView);

    m_tableView->setFocusPolicy(Qt::ClickFocus);
    m_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    m_tableView->setAlternatingRowColors(true);
    m_tableView->setSelectionMode(QAbstractItemView::SingleSelection);
    m_tableView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
    m_tableView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
    m_tableView->horizontalHeader()->setVisible(true);
    m_tableView->horizontalHeader()->setCascadingSectionResizes(true);
    m_tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
    m_tableView->verticalHeader()->setVisible(false);
    m_tableView->verticalHeader()->setMinimumSectionSize(20);
    m_tableView->verticalHeader()->setDefaultSectionSize(20);
    m_tableView->verticalHeader()->setHighlightSections(false);

    m_widget = m_tableView;
    return m_widget;
}

void BandTableAward::updateData(const AwardFilterParams &params)
{
    FCT_IDENTIFICATION;

    const QList<Band>& dxccBands = BandPlan::bandsList(false, true);

    if ( dxccBands.size() == 0 )
        return;

    m_currentEntity = params.entitySelected;

    const QString innerConfirmedCase(QString(" CASE WHEN (%1) THEN 2 ELSE 1 END ")
                                         .arg(params.confirmedConditions.isEmpty()
                                                  ? QStringLiteral("1=2")
                                                  : params.confirmedConditions.join(" or ")));

    QStringList stmt_max_part;
    QStringList stmt_total_padding;
    QStringList stmt_sum_confirmed;
    QStringList stmt_sum_worked;
    QStringList stmt_sum_total;
    QStringList stmt_having;
    QStringList stmt_total_band_condition_work;
    QStringList stmt_total_band_condition_confirmed;
    QStringList stmt_not_confirmed;
    QStringList stmt_any_worked;

    for ( const Band& band : dxccBands )
    {
        stmt_max_part << QString(" MAX(CASE WHEN band = '%1' AND m.dxcc IN (%2) THEN %3 ELSE 0 END) as '%4'")
                             .arg(band.name, params.modes.join(","), innerConfirmedCase, band.name);
        stmt_total_padding << QString(" NULL '%1'").arg(band.name);
        stmt_sum_confirmed << QString("SUM(CASE WHEN a.'%1' > 1 THEN 1 ELSE 0 END) '%2'").arg(band.name, band.name);
        stmt_sum_worked << QString("SUM(CASE WHEN a.'%1' > 0 THEN 1 ELSE 0 END) '%2'").arg(band.name, band.name);
        stmt_sum_total << QString("SUM(d.'%1') '%2'").arg(band.name, band.name);
        stmt_having << QString("SUM(d.'%1') = 0").arg(band.name);
        stmt_total_band_condition_work << QString("e.'%1' > 0").arg(band.name);
        stmt_total_band_condition_confirmed << QString("e.'%1' > 1").arg(band.name);
        stmt_not_confirmed << QString("MAX(d.'%1') < 2").arg(band.name);
        stmt_any_worked << QString("MAX(d.'%1') > 0").arg(band.name);
    }

    stmt_max_part << QString(" MAX(CASE WHEN prop_mode = 'SAT' AND m.dxcc IN (%1) THEN %2 ELSE 0 END) as 'SAT' ").arg(params.modes.join(","), innerConfirmedCase)
                  << QString(" MAX(CASE WHEN prop_mode = 'EME' AND m.dxcc IN (%1) THEN %2 ELSE 0 END) as 'EME' ").arg(params.modes.join(","), innerConfirmedCase);
    stmt_total_padding << " NULL 'SAT' "
                       << " NULL 'EME' ";
    stmt_sum_confirmed << " SUM(CASE WHEN a.'SAT' > 1 THEN 1 ELSE 0 END) 'SAT' "
                       << " SUM(CASE WHEN a.'EME' > 1 THEN 1 ELSE 0 END) 'EME' ";
    stmt_sum_worked << " SUM(CASE WHEN a.'SAT' > 0 THEN 1 ELSE 0 END) 'SAT' "
                    << " SUM(CASE WHEN a.'EME' > 0 THEN 1 ELSE 0 END) 'EME' ";
    stmt_sum_total << " SUM(d.'SAT') 'SAT' "
                   << " SUM(d.'EME') 'EME' ";
    stmt_having << " SUM(d.'SAT') = 0"
                << " SUM(d.'EME') = 0";
    stmt_total_band_condition_work << "e.'SAT' > 0"
                                   << "e.'EME' > 0";
    stmt_total_band_condition_confirmed << "e.'SAT' > 1"
                                        << "e.'EME' > 1";
    stmt_not_confirmed << " MAX(d.'SAT') < 2"
                       << " MAX(d.'EME') < 2";
    stmt_any_worked << " MAX(d.'SAT') > 0"
                    << " MAX(d.'EME') > 0";

    const QString &entity = params.entitySelected;

    QString sourceContactsTable = sourceContactsOverride(params.userFilterWhereClause);
    if ( sourceContactsTable.isEmpty() )
    {
        sourceContactsTable = QString(" source_contacts AS "
                                      " (SELECT * "
                                      "  FROM contacts "
                                      "  WHERE 1=1 %1 ) ").arg(params.userFilterWhereClause);
    }

    QStringList addlCTEs = additionalCTEs(entity, params.userFilterWhereClause);
    addlCTEs.append(sourceContactsTable);

    QStringList havingConditions;
    if ( params.notWorkedOnly )
        havingConditions << QString("(%1)").arg(stmt_having.join(" AND "));
    if ( params.notConfirmedOnly )
        havingConditions << QString("(%1) AND (%2)").arg(stmt_not_confirmed.join(" AND "),
                                                         stmt_any_worked.join(" OR "));

    QString havingClause;
    if ( !havingConditions.isEmpty() )
        havingClause = QString("HAVING %1").arg(havingConditions.join(" OR "));

    QString finalSQL(QString(
              "WITH "
              "   %1, "
              "   detail_table AS ( "
              "     SELECT %2, %3 "
              "     %4"
              "     WHERE 1=1 %5"
              "     GROUP BY  1,2), "
              "   unique_worked AS ("
              "     SELECT DISTINCT col1"
              "     FROM detail_table e"
              "      WHERE %6), "
              "   unique_confirmed AS ("
              "     SELECT DISTINCT col1"
              "     FROM detail_table e"
              "      WHERE %7) "
              "SELECT * FROM ( "
              "     SELECT 0 column_idx, '%8', COUNT(*), %9"
              "     FROM unique_worked"
              "   UNION ALL "
              "     SELECT 0 column_idx, '%10', COUNT(*), %11"
              "     FROM unique_confirmed"
              "   UNION ALL "
              "     SELECT 1 column_idx, '%12', NULL prefix, %13"
              "     FROM detail_table a "
              "     GROUP BY 1 "
              "   UNION ALL "
              "     SELECT 2 column_idx, '%14', NULL prefix, %15"
              "     FROM detail_table a "
              "     GROUP BY 1 "
              "   UNION ALL "
              "     SELECT 3 column_idx, col1, col2, %16"
              "     FROM detail_table d "
              "     GROUP BY 2,3 "
              "     %17"
              ") "
              "ORDER BY 1,2 COLLATE LOCALEAWARE ASC ").arg(addlCTEs.join(","), // 1
                                                           headersColumns(entity), // 2
                                                           stmt_max_part.join(","), // 3
                                                           sqlDetailTable(entity), // 4
                                               
Download .txt
gitextract_54fyuzui/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── 01-Bug Report.yml
│   │   ├── 02-Feature Request.yml
│   │   └── config.yml
│   └── workflows/
│       ├── c-cpp.yml
│       └── macOSBuild.yml
├── .gitignore
├── .gitmodules
├── AUTHORS
├── CONTRIBUTING.md
├── Changelog
├── LICENSE
├── QLog.pro
├── README.md
├── awards/
│   ├── AwardDXCC.cpp
│   ├── AwardDXCC.h
│   ├── AwardDefinition.cpp
│   ├── AwardDefinition.h
│   ├── AwardGridsquare.cpp
│   ├── AwardGridsquare.h
│   ├── AwardIOTA.cpp
│   ├── AwardIOTA.h
│   ├── AwardITU.cpp
│   ├── AwardITU.h
│   ├── AwardJapan.cpp
│   ├── AwardJapan.h
│   ├── AwardNZ.cpp
│   ├── AwardNZ.h
│   ├── AwardPOTAActivator.cpp
│   ├── AwardPOTAActivator.h
│   ├── AwardPOTAHunter.cpp
│   ├── AwardPOTAHunter.h
│   ├── AwardRDA.cpp
│   ├── AwardRDA.h
│   ├── AwardSOTA.cpp
│   ├── AwardSOTA.h
│   ├── AwardSpanishDME.cpp
│   ├── AwardSpanishDME.h
│   ├── AwardUKD.cpp
│   ├── AwardUKD.h
│   ├── AwardUSCounty.cpp
│   ├── AwardUSCounty.h
│   ├── AwardWAC.cpp
│   ├── AwardWAC.h
│   ├── AwardWAS.cpp
│   ├── AwardWAS.h
│   ├── AwardWAZ.cpp
│   ├── AwardWAZ.h
│   ├── AwardWPX.cpp
│   ├── AwardWPX.h
│   ├── AwardWWFF.cpp
│   ├── AwardWWFF.h
│   ├── BandTableAward.cpp
│   ├── BandTableAward.h
│   ├── SecondarySubdivisionAward.cpp
│   └── SecondarySubdivisionAward.h
├── core/
│   ├── AlertEvaluator.cpp
│   ├── AlertEvaluator.h
│   ├── AppGuard.cpp
│   ├── AppGuard.h
│   ├── CallbookManager.cpp
│   ├── CallbookManager.h
│   ├── CredentialStore.cpp
│   ├── CredentialStore.h
│   ├── EmergencyFrequency.cpp
│   ├── EmergencyFrequency.h
│   ├── FileCompressor.cpp
│   ├── FileCompressor.h
│   ├── FldigiTCPServer.cpp
│   ├── FldigiTCPServer.h
│   ├── LOVDownloader.cpp
│   ├── LOVDownloader.h
│   ├── LogDatabase.cpp
│   ├── LogDatabase.h
│   ├── LogLocale.cpp
│   ├── LogLocale.h
│   ├── LogParam.cpp
│   ├── LogParam.h
│   ├── MembershipQE.cpp
│   ├── MembershipQE.h
│   ├── Migration.cpp
│   ├── Migration.h
│   ├── NetworkNotification.cpp
│   ├── NetworkNotification.h
│   ├── PasswordCipher.cpp
│   ├── PasswordCipher.h
│   ├── PlatformParameterManager.cpp
│   ├── PlatformParameterManager.h
│   ├── PotaQE.cpp
│   ├── PotaQE.h
│   ├── PropConditions.cpp
│   ├── PropConditions.h
│   ├── QSLPrintLabelRenderer.cpp
│   ├── QSLPrintLabelRenderer.h
│   ├── QSLStorage.cpp
│   ├── QSLStorage.h
│   ├── QSOFilterManager.cpp
│   ├── QSOFilterManager.h
│   ├── QuadKeyCache.h
│   ├── WsjtxUDPReceiver.cpp
│   ├── WsjtxUDPReceiver.h
│   ├── csv.hpp
│   ├── debug.cpp
│   ├── debug.h
│   ├── main.cpp
│   ├── zonedetect.c
│   └── zonedetect.h
├── cwkey/
│   ├── CWKeyer.cpp
│   ├── CWKeyer.h
│   └── drivers/
│       ├── CWCatKey.cpp
│       ├── CWCatKey.h
│       ├── CWDaemonKey.cpp
│       ├── CWDaemonKey.h
│       ├── CWDummyKey.cpp
│       ├── CWDummyKey.h
│       ├── CWFldigiKey.cpp
│       ├── CWFldigiKey.h
│       ├── CWKey.cpp
│       ├── CWKey.h
│       ├── CWWinKey.cpp
│       └── CWWinKey.h
├── data/
│   ├── Accents.cpp
│   ├── ActivityProfile.cpp
│   ├── ActivityProfile.h
│   ├── AntProfile.cpp
│   ├── AntProfile.h
│   ├── Band.h
│   ├── BandPlan.cpp
│   ├── BandPlan.h
│   ├── CWKeyProfile.cpp
│   ├── CWKeyProfile.h
│   ├── CWShortcutProfile.cpp
│   ├── CWShortcutProfile.h
│   ├── Callsign.cpp
│   ├── Callsign.h
│   ├── Data.cpp
│   ├── Data.h
│   ├── DxServerString.cpp
│   ├── DxServerString.h
│   ├── DxSpot.h
│   ├── Dxcc.h
│   ├── Gridsquare.cpp
│   ├── Gridsquare.h
│   ├── HostsPortString.cpp
│   ├── HostsPortString.h
│   ├── MainLayoutProfile.cpp
│   ├── MainLayoutProfile.h
│   ├── POTAEntity.h
│   ├── POTASpot.h
│   ├── ProfileManager.h
│   ├── RigProfile.cpp
│   ├── RigProfile.h
│   ├── RotProfile.cpp
│   ├── RotProfile.h
│   ├── RotUsrButtonsProfile.cpp
│   ├── RotUsrButtonsProfile.h
│   ├── SOTAEntity.h
│   ├── SerialPort.cpp
│   ├── SerialPort.h
│   ├── SpotAlert.h
│   ├── StationProfile.cpp
│   ├── StationProfile.h
│   ├── ToAllSpot.h
│   ├── UpdatableSQLRecord.cpp
│   ├── UpdatableSQLRecord.h
│   ├── WCYSpot.h
│   ├── WWFFEntity.h
│   ├── WWVSpot.h
│   ├── WsjtxDecode.h
│   ├── WsjtxEntry.h
│   ├── WsjtxLog.h
│   ├── WsjtxLogADIF.h
│   └── WsjtxStatus.h
├── debian/
│   ├── changelog
│   ├── control
│   ├── copyright
│   ├── rules
│   ├── source/
│   │   └── format
│   └── watch
├── devtools/
│   ├── ADIF/
│   │   ├── all_ADIF_fields_example.adi
│   │   ├── min_ADIF_fields_example.adi
│   │   └── test_intl.adi
│   ├── TCISimulator/
│   │   ├── client.html
│   │   └── server.py
│   ├── cabrillo/
│   │   └── generate_cabrillo_templates.py
│   ├── deployment/
│   │   └── finalize_release.sh
│   ├── timezones/
│   │   ├── README.md
│   │   ├── builder/
│   │   │   ├── builder.cpp
│   │   │   ├── buildspec.yml
│   │   │   ├── makedb.sh
│   │   │   └── zoneToAlpha.h
│   │   ├── country_DATA_LICENSE
│   │   └── timezone_DATA_LICENSE
│   ├── translit/
│   │   └── generate.py
│   └── windowsMake/
│       ├── make.bat
│       └── tests.bat
├── doc/
│   └── UDP_Notifications.txt
├── entitlements.xml
├── i18n/
│   ├── datastrings.tri
│   ├── dbstrings.tri
│   ├── i18n.qrc
│   ├── qlog_cs.qm
│   ├── qlog_cs.ts
│   ├── qlog_de.qm
│   ├── qlog_de.ts
│   ├── qlog_es.qm
│   ├── qlog_es.ts
│   ├── qlog_fr.qm
│   ├── qlog_fr.ts
│   ├── qlog_it.qm
│   ├── qlog_it.ts
│   ├── qlog_zh_CN.qm
│   └── qlog_zh_CN.ts
├── installer/
│   ├── config/
│   │   └── config.xml
│   └── packages/
│       └── de.dl2ic.qlog/
│           └── meta/
│               ├── installscript.qs
│               ├── package.xml
│               └── targetwidget.ui
├── logformat/
│   ├── AdiFormat.cpp
│   ├── AdiFormat.h
│   ├── AdxFormat.cpp
│   ├── AdxFormat.h
│   ├── CSVFormat.cpp
│   ├── CSVFormat.h
│   ├── CabrilloFormat.cpp
│   ├── CabrilloFormat.h
│   ├── JsonFormat.cpp
│   ├── JsonFormat.h
│   ├── LogFormat.cpp
│   ├── LogFormat.h
│   ├── PotaAdiFormat.cpp
│   └── PotaAdiFormat.h
├── models/
│   ├── AlertTableModel.cpp
│   ├── AlertTableModel.h
│   ├── AwardsTableModel.cpp
│   ├── AwardsTableModel.h
│   ├── DxccTableModel.cpp
│   ├── DxccTableModel.h
│   ├── LogbookModel.cpp
│   ├── LogbookModel.h
│   ├── RigTypeModel.cpp
│   ├── RigTypeModel.h
│   ├── RotTypeModel.cpp
│   ├── RotTypeModel.h
│   ├── SearchFilterProxyModel.cpp
│   ├── SearchFilterProxyModel.h
│   ├── ShortcutEditorModel.cpp
│   ├── ShortcutEditorModel.h
│   ├── SqlListModel.cpp
│   ├── SqlListModel.h
│   ├── WsjtxTableModel.cpp
│   └── WsjtxTableModel.h
├── res/
│   ├── data/
│   │   ├── contests.json
│   │   ├── dxcc.json
│   │   ├── legacy_modes.json
│   │   ├── propagation_modes.json
│   │   └── sat_modes.json
│   ├── flags/
│   │   └── flags.qrc
│   ├── icons/
│   │   └── icons.qrc
│   ├── io.github.foldynl.QLog.metainfo.xml
│   ├── map/
│   │   └── onlinemap.html
│   ├── qlog.1
│   ├── qlog.desktop
│   ├── qlog.icns
│   ├── res.qrc
│   ├── sql/
│   │   ├── contests.sql
│   │   ├── migration_001.sql
│   │   ├── migration_002.sql
│   │   ├── migration_003.sql
│   │   ├── migration_004.sql
│   │   ├── migration_005.sql
│   │   ├── migration_006.sql
│   │   ├── migration_007.sql
│   │   ├── migration_008.sql
│   │   ├── migration_009.sql
│   │   ├── migration_010.sql
│   │   ├── migration_011.sql
│   │   ├── migration_012.sql
│   │   ├── migration_013.sql
│   │   ├── migration_014.sql
│   │   ├── migration_015.sql
│   │   ├── migration_016.sql
│   │   ├── migration_017.sql
│   │   ├── migration_018.sql
│   │   ├── migration_019.sql
│   │   ├── migration_020.sql
│   │   ├── migration_021.sql
│   │   ├── migration_022.sql
│   │   ├── migration_023.sql
│   │   ├── migration_024.sql
│   │   ├── migration_025.sql
│   │   ├── migration_026.sql
│   │   ├── migration_027.sql
│   │   ├── migration_028.sql
│   │   ├── migration_029.sql
│   │   ├── migration_030.sql
│   │   ├── migration_031.sql
│   │   ├── migration_032.sql
│   │   ├── migration_033.sql
│   │   ├── migration_034.sql
│   │   ├── migration_035.sql
│   │   ├── migration_036.sql
│   │   ├── migration_037.sql
│   │   └── migration_038.sql
│   └── stylesheet.css
├── rig/
│   ├── Rig.cpp
│   ├── Rig.h
│   ├── RigCaps.cpp
│   ├── RigCaps.h
│   ├── RigctldManager.cpp
│   ├── RigctldManager.h
│   ├── drivers/
│   │   ├── FlrigRigDrv.cpp
│   │   ├── FlrigRigDrv.h
│   │   ├── GenericRigDrv.cpp
│   │   ├── GenericRigDrv.h
│   │   ├── HamlibRigDrv.cpp
│   │   ├── HamlibRigDrv.h
│   │   ├── OmniRigEventSink.h
│   │   ├── OmnirigRigDrv.cpp
│   │   ├── OmnirigRigDrv.h
│   │   ├── Omnirigv2RigDrv.cpp
│   │   ├── Omnirigv2RigDrv.h
│   │   ├── TCIRigDrv.cpp
│   │   └── TCIRigDrv.h
│   └── macros.h
├── rotator/
│   ├── RotCaps.cpp
│   ├── RotCaps.h
│   ├── Rotator.cpp
│   ├── Rotator.h
│   └── drivers/
│       ├── GenericRotDrv.cpp
│       ├── GenericRotDrv.h
│       ├── HamlibRotDrv.cpp
│       ├── HamlibRotDrv.h
│       ├── PSTRotDrv.cpp
│       └── PSTRotDrv.h
├── rpm_spec/
│   └── qlog.spec
├── service/
│   ├── GenericCallbook.cpp
│   ├── GenericCallbook.h
│   ├── GenericQSLDownloader.cpp
│   ├── GenericQSLDownloader.h
│   ├── GenericQSOUploader.cpp
│   ├── GenericQSOUploader.h
│   ├── cloudlog/
│   │   ├── Cloudlog.cpp
│   │   └── Cloudlog.h
│   ├── clublog/
│   │   ├── ClubLog.cpp
│   │   └── ClubLog.h
│   ├── eqsl/
│   │   ├── Eqsl.cpp
│   │   └── Eqsl.h
│   ├── hamqth/
│   │   ├── HamQTH.cpp
│   │   └── HamQTH.h
│   ├── hrdlog/
│   │   ├── HRDLog.cpp
│   │   └── HRDLog.h
│   ├── kstchat/
│   │   ├── KSTChat.cpp
│   │   └── KSTChat.h
│   ├── lotw/
│   │   ├── Lotw.cpp
│   │   └── Lotw.h
│   ├── potaapp/
│   │   ├── PotaApp.cpp
│   │   └── PotaApp.h
│   └── qrzcom/
│       ├── QRZ.cpp
│       └── QRZ.h
├── tests/
│   ├── AlertEvaluatorTest/
│   │   ├── AlertEvaluatorTest.pro
│   │   └── tst_alertevaluator.cpp
│   ├── BandPlanTest/
│   │   ├── BandPlanTest.pro
│   │   └── tst_bandplan.cpp
│   ├── CallsignTest/
│   │   ├── CallsignTest.pro
│   │   ├── generated_cases.h
│   │   └── tst_callsign.cpp
│   ├── CredentialStoreTest/
│   │   ├── CredentialStoreTest.pro
│   │   ├── test_stubs.cpp
│   │   └── tst_credentialstore.cpp
│   ├── DataTest/
│   │   ├── DataTest.pro
│   │   └── tst_data.cpp
│   ├── DxServerStringTest/
│   │   ├── DxServerStringTest.pro
│   │   └── tst_dxserverstring.cpp
│   ├── FileCompressorTest/
│   │   ├── FileCompressorTest.pro
│   │   └── tst_filecompressor.cpp
│   ├── GridsquareTest/
│   │   ├── GridsquareTest.pro
│   │   └── tst_gridsquare.cpp
│   ├── HostsPortStringTest/
│   │   ├── HostsPortStringTest.pro
│   │   └── tst_hostsportstring.cpp
│   ├── MigrationTest/
│   │   ├── MigrationTest.pro
│   │   └── tst_migration.cpp
│   ├── PasswordCipherTest/
│   │   ├── PasswordCipherTest.pro
│   │   └── tst_passwordcipher.cpp
│   ├── QuadKeyCacheTest/
│   │   ├── QuadKeyCacheTest.pro
│   │   └── tst_quadkeycache.cpp
│   ├── RigctldManagerTest/
│   │   ├── RigctldManagerTest.pro
│   │   ├── core/
│   │   │   └── debug.h
│   │   ├── data/
│   │   │   └── RigProfile.h
│   │   ├── test_stubs.cpp
│   │   └── tst_rigctldmanager.cpp
│   └── tests.pro
└── ui/
    ├── ActivityEditor.cpp
    ├── ActivityEditor.h
    ├── ActivityEditor.ui
    ├── AlertRuleDetail.cpp
    ├── AlertRuleDetail.h
    ├── AlertRuleDetail.ui
    ├── AlertSettingDialog.cpp
    ├── AlertSettingDialog.h
    ├── AlertSettingDialog.ui
    ├── AlertWidget.cpp
    ├── AlertWidget.h
    ├── AlertWidget.ui
    ├── AwardsDialog.cpp
    ├── AwardsDialog.h
    ├── AwardsDialog.ui
    ├── BandmapWidget.cpp
    ├── BandmapWidget.h
    ├── BandmapWidget.ui
    ├── CWConsoleWidget.cpp
    ├── CWConsoleWidget.h
    ├── CWConsoleWidget.ui
    ├── CabrilloExportDialog.cpp
    ├── CabrilloExportDialog.h
    ├── CabrilloExportDialog.ui
    ├── CabrilloTemplateDialog.cpp
    ├── CabrilloTemplateDialog.h
    ├── CabrilloTemplateDialog.ui
    ├── ChatWidget.cpp
    ├── ChatWidget.h
    ├── ChatWidget.ui
    ├── ClockWidget.cpp
    ├── ClockWidget.h
    ├── ClockWidget.ui
    ├── ColumnSettingDialog.cpp
    ├── ColumnSettingDialog.h
    ├── ColumnSettingDialog.ui
    ├── ColumnSettingSimpleDialog.ui
    ├── DXCCSubmissionDialog.cpp
    ├── DXCCSubmissionDialog.h
    ├── DXCCSubmissionDialog.ui
    ├── DevToolsDialog.cpp
    ├── DevToolsDialog.h
    ├── DevToolsDialog.ui
    ├── DownloadQSLDialog.cpp
    ├── DownloadQSLDialog.h
    ├── DownloadQSLDialog.ui
    ├── DxFilterDialog.cpp
    ├── DxFilterDialog.h
    ├── DxFilterDialog.ui
    ├── DxWidget.cpp
    ├── DxWidget.h
    ├── DxWidget.ui
    ├── DxccTableWidget.cpp
    ├── DxccTableWidget.h
    ├── EditActivitiesDialog.cpp
    ├── EditActivitiesDialog.h
    ├── EditActivitiesDialog.ui
    ├── ExportDialog.cpp
    ├── ExportDialog.h
    ├── ExportDialog.ui
    ├── ExportPasswordDialog.cpp
    ├── ExportPasswordDialog.h
    ├── ExportPasswordDialog.ui
    ├── ImportDialog.cpp
    ├── ImportDialog.h
    ├── ImportDialog.ui
    ├── InputPasswordDialog.cpp
    ├── InputPasswordDialog.h
    ├── InputPasswordDialog.ui
    ├── KSTChatWidget.cpp
    ├── KSTChatWidget.h
    ├── KSTChatWidget.ui
    ├── KSTHighlightRuleDetail.cpp
    ├── KSTHighlightRuleDetail.h
    ├── KSTHighlightRuleDetail.ui
    ├── KSTHighlighterSettingDialog.cpp
    ├── KSTHighlighterSettingDialog.h
    ├── KSTHighlighterSettingDialog.ui
    ├── KSTWidget.cpp
    ├── KSTWidget.h
    ├── KSTWidget.ui
    ├── LoadDatabaseDialog.cpp
    ├── LoadDatabaseDialog.h
    ├── LoadDatabaseDialog.ui
    ├── LogbookWidget.cpp
    ├── LogbookWidget.h
    ├── LogbookWidget.ui
    ├── MainWindow.cpp
    ├── MainWindow.h
    ├── MainWindow.ui
    ├── MapWebChannelHandler.cpp
    ├── MapWebChannelHandler.h
    ├── MapWidget.cpp
    ├── MapWidget.h
    ├── ModeSelectionController.cpp
    ├── ModeSelectionController.h
    ├── NewContactWidget.cpp
    ├── NewContactWidget.h
    ├── NewContactWidget.ui
    ├── OnlineMapWidget.cpp
    ├── OnlineMapWidget.h
    ├── PaperQSLDialog.cpp
    ├── PaperQSLDialog.h
    ├── PaperQSLDialog.ui
    ├── PlatformSettingsDialog.cpp
    ├── PlatformSettingsDialog.h
    ├── PlatformSettingsDialog.ui
    ├── ProfileImageWidget.cpp
    ├── ProfileImageWidget.h
    ├── ProfileImageWidget.ui
    ├── QSLGalleryDialog.cpp
    ├── QSLGalleryDialog.h
    ├── QSLGalleryDialog.ui
    ├── QSLImportStatDialog.cpp
    ├── QSLImportStatDialog.h
    ├── QSLImportStatDialog.ui
    ├── QSLPrintLabelDialog.cpp
    ├── QSLPrintLabelDialog.h
    ├── QSLPrintLabelDialog.ui
    ├── QSODetailDialog.cpp
    ├── QSODetailDialog.h
    ├── QSODetailDialog.ui
    ├── QSOFilterDetail.cpp
    ├── QSOFilterDetail.h
    ├── QSOFilterDetail.ui
    ├── QSOFilterDialog.cpp
    ├── QSOFilterDialog.h
    ├── QSOFilterDialog.ui
    ├── QTableQSOView.cpp
    ├── QTableQSOView.h
    ├── RigWidget.cpp
    ├── RigWidget.h
    ├── RigWidget.ui
    ├── RigctldAdvancedDialog.cpp
    ├── RigctldAdvancedDialog.h
    ├── RigctldAdvancedDialog.ui
    ├── RotatorWidget.cpp
    ├── RotatorWidget.h
    ├── RotatorWidget.ui
    ├── SettingsDialog.cpp
    ├── SettingsDialog.h
    ├── SettingsDialog.ui
    ├── ShowUploadDialog.cpp
    ├── ShowUploadDialog.h
    ├── ShowUploadDialog.ui
    ├── SplashScreen.h
    ├── StatisticsWidget.cpp
    ├── StatisticsWidget.h
    ├── StatisticsWidget.ui
    ├── UploadQSODialog.cpp
    ├── UploadQSODialog.h
    ├── UploadQSODialog.ui
    ├── WebEnginePage.cpp
    ├── WebEnginePage.h
    ├── WsjtxFilterDialog.cpp
    ├── WsjtxFilterDialog.h
    ├── WsjtxFilterDialog.ui
    ├── WsjtxWidget.cpp
    ├── WsjtxWidget.h
    ├── WsjtxWidget.ui
    └── component/
        ├── BaseDoubleSpinBox.cpp
        ├── BaseDoubleSpinBox.h
        ├── ButtonStyle.h
        ├── EditLine.cpp
        ├── EditLine.h
        ├── FreqQSpinBox.cpp
        ├── FreqQSpinBox.h
        ├── MultiselectCompleter.cpp
        ├── MultiselectCompleter.h
        ├── RepeatButton.cpp
        ├── RepeatButton.h
        ├── ShutdownAwareWidget.h
        ├── SmartSearchBox.cpp
        ├── SmartSearchBox.h
        ├── SqlHighlighter.cpp
        ├── SqlHighlighter.h
        ├── StyleItemDelegate.h
        ├── SwitchButton.cpp
        └── SwitchButton.h
Copy disabled (too large) Download .txt
Showing preview only (11,526K chars total). Download the full file to get everything.
SYMBOL INDEX (1940 symbols across 368 files)

FILE: awards/AwardDXCC.cpp
  function QString (line 4) | QString AwardDXCC::displayName() const
  function QString (line 9) | QString AwardDXCC::headersColumns(const QString &) const
  function QString (line 14) | QString AwardDXCC::sqlDetailTable(const QString &entity) const
  function QString (line 25) | QString AwardDXCC::additionalWhere(const QString &) const
  function QString (line 30) | QString AwardDXCC::clickFilter(const QString &, const QString &) const

FILE: awards/AwardDXCC.h
  function class (line 6) | class AwardDXCC : public BandTableAward

FILE: awards/AwardDefinition.h
  type AwardFilterParams (line 11) | struct AwardFilterParams
  function class (line 29) | class AwardDefinition

FILE: awards/AwardGridsquare.cpp
  function QString (line 9) | QString AwardGridsquare::key() const
  function QString (line 14) | QString AwardGridsquare::displayName() const
  function QString (line 25) | QString AwardGridsquare::headersColumns(const QString &) const
  function QString (line 30) | QString AwardGridsquare::sqlDetailTable(const QString &entity) const
  function QString (line 36) | QString AwardGridsquare::additionalWhere(const QString &) const
  function QString (line 41) | QString AwardGridsquare::clickFilter(const QString &col1Value, const QSt...

FILE: awards/AwardGridsquare.h
  function class (line 6) | class AwardGridsquare : public BandTableAward

FILE: awards/AwardIOTA.cpp
  function QString (line 4) | QString AwardIOTA::displayName() const
  function QString (line 9) | QString AwardIOTA::headersColumns(const QString &) const
  function QString (line 14) | QString AwardIOTA::sqlDetailTable(const QString &entity) const
  function QString (line 20) | QString AwardIOTA::additionalWhere(const QString &) const
  function QString (line 25) | QString AwardIOTA::clickFilter(const QString &col1Value, const QString &...

FILE: awards/AwardIOTA.h
  function class (line 6) | class AwardIOTA : public BandTableAward

FILE: awards/AwardITU.cpp
  function QString (line 4) | QString AwardITU::displayName() const
  function QString (line 9) | QString AwardITU::headersColumns(const QString &) const
  function QString (line 14) | QString AwardITU::sqlDetailTable(const QString &entity) const
  function QString (line 21) | QString AwardITU::additionalWhere(const QString &) const
  function QStringList (line 26) | QStringList AwardITU::additionalCTEs(const QString &, const QString &) c...
  function QString (line 31) | QString AwardITU::clickFilter(const QString &col1Value, const QString &)...

FILE: awards/AwardITU.h
  function class (line 6) | class AwardITU : public BandTableAward

FILE: awards/AwardJapan.cpp
  function QString (line 9) | QString AwardJapan::displayName() const

FILE: awards/AwardJapan.h
  function class (line 6) | class AwardJapan : public SecondarySubdivisionAward

FILE: awards/AwardNZ.cpp
  function QString (line 9) | QString AwardNZ::displayName() const

FILE: awards/AwardNZ.h
  function class (line 6) | class AwardNZ : public SecondarySubdivisionAward

FILE: awards/AwardPOTAActivator.cpp
  function QString (line 4) | QString AwardPOTAActivator::displayName() const
  function QString (line 9) | QString AwardPOTAActivator::headersColumns(const QString &) const
  function QString (line 14) | QString AwardPOTAActivator::sqlDetailTable(const QString &) const
  function QString (line 21) | QString AwardPOTAActivator::additionalWhere(const QString &) const
  function QStringList (line 26) | QStringList AwardPOTAActivator::additionalCTEs(const QString &, const QS...
  function QString (line 31) | QString AwardPOTAActivator::sourceContactsOverride(const QString &) const
  function QString (line 36) | QString AwardPOTAActivator::clickFilter(const QString &col1Value, const ...

FILE: awards/AwardPOTAActivator.h
  function class (line 6) | class AwardPOTAActivator : public BandTableAward

FILE: awards/AwardPOTAHunter.cpp
  function QString (line 4) | QString AwardPOTAHunter::displayName() const
  function QString (line 9) | QString AwardPOTAHunter::headersColumns(const QString &) const
  function QString (line 14) | QString AwardPOTAHunter::sqlDetailTable(const QString &) const
  function QString (line 21) | QString AwardPOTAHunter::additionalWhere(const QString &) const
  function QStringList (line 26) | QStringList AwardPOTAHunter::additionalCTEs(const QString &, const QStri...
  function QString (line 31) | QString AwardPOTAHunter::sourceContactsOverride(const QString &) const
  function QString (line 36) | QString AwardPOTAHunter::clickFilter(const QString &col1Value, const QSt...

FILE: awards/AwardPOTAHunter.h
  function class (line 6) | class AwardPOTAHunter : public BandTableAward

FILE: awards/AwardRDA.cpp
  function QString (line 9) | QString AwardRDA::displayName() const

FILE: awards/AwardRDA.h
  function class (line 6) | class AwardRDA : public SecondarySubdivisionAward

FILE: awards/AwardSOTA.cpp
  function QString (line 4) | QString AwardSOTA::displayName() const
  function QString (line 9) | QString AwardSOTA::headersColumns(const QString &) const
  function QString (line 14) | QString AwardSOTA::sqlDetailTable(const QString &) const
  function QString (line 21) | QString AwardSOTA::additionalWhere(const QString &) const
  function QString (line 26) | QString AwardSOTA::clickFilter(const QString &col1Value, const QString &...

FILE: awards/AwardSOTA.h
  function class (line 6) | class AwardSOTA : public BandTableAward

FILE: awards/AwardSpanishDME.cpp
  function QString (line 9) | QString AwardSpanishDME::displayName() const

FILE: awards/AwardSpanishDME.h
  function class (line 6) | class AwardSpanishDME : public SecondarySubdivisionAward

FILE: awards/AwardUKD.cpp
  function QString (line 9) | QString AwardUKD::displayName() const

FILE: awards/AwardUKD.h
  function class (line 6) | class AwardUKD : public SecondarySubdivisionAward

FILE: awards/AwardUSCounty.cpp
  function QString (line 9) | QString AwardUSCounty::displayName() const

FILE: awards/AwardUSCounty.h
  function class (line 6) | class AwardUSCounty : public SecondarySubdivisionAward

FILE: awards/AwardWAC.cpp
  function QString (line 7) | QString AwardWAC::displayName() const
  function QString (line 12) | QString AwardWAC::headersColumns(const QString &) const
  function QString (line 17) | QString AwardWAC::sqlDetailTable(const QString &entity) const
  function QString (line 24) | QString AwardWAC::additionalWhere(const QString &) const
  function QStringList (line 29) | QStringList AwardWAC::additionalCTEs(const QString &, const QString &) c...
  function QString (line 41) | QString AwardWAC::clickFilter(const QString &, const QString &col2Value)...

FILE: awards/AwardWAC.h
  function class (line 6) | class AwardWAC : public BandTableAward

FILE: awards/AwardWAS.cpp
  function QString (line 4) | QString AwardWAS::displayName() const
  function QString (line 9) | QString AwardWAS::headersColumns(const QString &) const
  function QString (line 14) | QString AwardWAS::sqlDetailTable(const QString &entity) const
  function QString (line 21) | QString AwardWAS::additionalWhere(const QString &) const
  function QString (line 26) | QString AwardWAS::clickFilter(const QString &, const QString &col2Value)...

FILE: awards/AwardWAS.h
  function class (line 6) | class AwardWAS : public BandTableAward

FILE: awards/AwardWAZ.cpp
  function QString (line 4) | QString AwardWAZ::displayName() const
  function QString (line 9) | QString AwardWAZ::headersColumns(const QString &) const
  function QString (line 14) | QString AwardWAZ::sqlDetailTable(const QString &entity) const
  function QString (line 21) | QString AwardWAZ::additionalWhere(const QString &) const
  function QStringList (line 26) | QStringList AwardWAZ::additionalCTEs(const QString &, const QString &) c...
  function QString (line 31) | QString AwardWAZ::clickFilter(const QString &col1Value, const QString &)...

FILE: awards/AwardWAZ.h
  function class (line 6) | class AwardWAZ : public BandTableAward

FILE: awards/AwardWPX.cpp
  function QString (line 4) | QString AwardWPX::displayName() const
  function QString (line 9) | QString AwardWPX::headersColumns(const QString &) const
  function QString (line 14) | QString AwardWPX::sqlDetailTable(const QString &entity) const
  function QString (line 20) | QString AwardWPX::additionalWhere(const QString &) const
  function QString (line 25) | QString AwardWPX::clickFilter(const QString &col1Value, const QString &)...

FILE: awards/AwardWPX.h
  function class (line 6) | class AwardWPX : public BandTableAward

FILE: awards/AwardWWFF.cpp
  function QString (line 4) | QString AwardWWFF::displayName() const
  function QString (line 9) | QString AwardWWFF::headersColumns(const QString &) const
  function QString (line 14) | QString AwardWWFF::sqlDetailTable(const QString &) const
  function QString (line 21) | QString AwardWWFF::additionalWhere(const QString &) const
  function QString (line 26) | QString AwardWWFF::clickFilter(const QString &col1Value, const QString &...

FILE: awards/AwardWWFF.h
  function class (line 6) | class AwardWWFF : public BandTableAward

FILE: awards/BandTableAward.cpp
  function QWidget (line 9) | QWidget* BandTableAward::createWidget(QWidget *parent)
  function QStringList (line 233) | QStringList BandTableAward::additionalCTEs(const QString &, const QStrin...
  function QString (line 238) | QString BandTableAward::sourceContactsOverride(const QString &) const
  function QString (line 243) | QString BandTableAward::clickFilter(const QString &, const QString &) const
  function QString (line 253) | QString BandTableAward::generateNumberRangeCTE(const QString &name, int ...
  function QString (line 263) | QString BandTableAward::generateValuesCTE(const QString &name,
  function QString (line 273) | QString BandTableAward::generateSplitCTE(const QString &sourceColumn,
  function QString (line 290) | QString BandTableAward::generateSplitSourceContacts(const QString &outpu...

FILE: awards/BandTableAward.h
  function class (line 63) | class BandTableAward : public AwardDefinition

FILE: awards/SecondarySubdivisionAward.cpp
  function QString (line 9) | QString SecondarySubdivisionAward::headersColumns(const QString &) const
  function QString (line 14) | QString SecondarySubdivisionAward::sqlDetailTable(const QString &) const
  function QString (line 24) | QString SecondarySubdivisionAward::additionalWhere(const QString &) const
  function QString (line 29) | QString SecondarySubdivisionAward::clickFilter(const QString &, const QS...

FILE: awards/SecondarySubdivisionAward.h
  function class (line 11) | class SecondarySubdivisionAward : public BandTableAward

FILE: core/AlertEvaluator.h
  function isValid (line 22) | bool isValid() const;

FILE: core/AppGuard.cpp
  function QString (line 13) | QString generateKeyHash( const QString& key, const QString& salt )

FILE: core/AppGuard.h
  function class (line 8) | class AppGuard

FILE: core/CallbookManager.cpp
  function GenericCallbook (line 59) | GenericCallbook *CallbookManager::createCallbook(const QString &callbookID)

FILE: core/CallbookManager.h
  function class (line 8) | class CallbookManager : public QObject

FILE: core/CredentialStore.cpp
  function CredentialRegistry (line 23) | CredentialRegistry &CredentialRegistry::instance()
  function QString (line 91) | QString CredentialStore::getPassword(const QString &storage_key, const Q...
  function QString (line 312) | QString CredentialStore::getImportPassphrase()

FILE: core/CredentialStore.h
  type CredentialDescriptor (line 15) | struct CredentialDescriptor
  function class (line 21) | class CredentialRegistry
  function class (line 62) | class CredentialStore : public QObject

FILE: core/EmergencyFrequency.cpp
  function EmergencyFreqEntry (line 25) | const EmergencyFreqEntry *EmergencyFrequency::inBand(double startMHz, do...
  function EmergencyFreqEntry (line 36) | const EmergencyFreqEntry *EmergencyFrequency::findEmergency(double freqMHz)

FILE: core/EmergencyFrequency.h
  type EmergencyFreqEntry (line 6) | struct EmergencyFreqEntry
  function class (line 12) | class EmergencyFrequency

FILE: core/FileCompressor.cpp
  function QByteArray (line 11) | QByteArray FileCompressor::gzip(const QByteArray &in)
  function QByteArray (line 49) | QByteArray FileCompressor::gunzip(const QByteArray &in)

FILE: core/FileCompressor.h
  function class (line 10) | class FileCompressor

FILE: core/FldigiTCPServer.cpp
  function QString (line 114) | QString FldigiTCPServer::parseParam(QXmlStreamReader& xml) {
  function QByteArray (line 128) | QByteArray FldigiTCPServer::listMethods() {
  function QByteArray (line 150) | QByteArray FldigiTCPServer::addRecord(QString data) {

FILE: core/FldigiTCPServer.h
  function class (line 9) | class FldigiTCPServer : public QTcpServer {

FILE: core/LOVDownloader.h
  function namespace (line 9) | namespace csv
  function class (line 14) | class LOVDownloader : public QObject

FILE: core/LogDatabase.cpp
  function QDir (line 27) | QDir LogDatabase::dbDirectory()
  function QString (line 32) | QString LogDatabase::dbFilename()
  function QString (line 37) | QString LogDatabase::currentPlatformId()
  function DatabaseInfo (line 275) | DatabaseInfo LogDatabase::inspectDatabase(const QString &filename)
  function QString (line 349) | QString LogDatabase::pendingImportPath()

FILE: core/LogDatabase.h
  type DatabaseInfo (line 7) | struct DatabaseInfo
  function class (line 16) | class LogDatabase

FILE: core/LogLocale.cpp
  function QString (line 31) | const QString LogLocale::formatTimeLongWithoutTZ() const
  function QString (line 44) | const QString LogLocale::formatTimeShort() const
  function QString (line 57) | const QString LogLocale::formatTimeLong() const
  function QString (line 73) | const QString LogLocale::formatDateShortWithYYYY() const
  function QString (line 82) | const QString LogLocale::formatDateTimeShortWithYYYY() const
  function QString (line 122) | const QString LogLocale::getSettingDateFormat() const

FILE: core/LogLocale.h
  function class (line 8) | class LogLocale : public QLocale

FILE: core/LogParam.cpp
  function QDate (line 28) | QDate LogParam::getLOVaParam(const QString &LOVName)
  function QDate (line 38) | QDate LogParam::getLastBackupDate()
  function QString (line 48) | QString LogParam::getLogID()
  function QString (line 88) | QString LogParam::getContestFilter()
  function QString (line 98) | QString LogParam::getContestID()
  function QDateTime (line 108) | QDateTime LogParam::getContestDupeDate()
  function QString (line 170) | QString LogParam::getDXCTrendContinent(const QString &def)
  function QStringList (line 180) | QStringList LogParam::bandmapsWidgets()
  function QVariant (line 200) | QVariant LogParam::getBandmapZoom(const QString &widgetID, const QString...
  function QString (line 240) | QString LogParam::getUploadQSOLastCall()
  function QString (line 265) | QString LogParam::getUploadeqslQTHProfile()
  function QString (line 300) | QString LogParam::getUploadLoTWLocation()
  function QDate (line 320) | QDate LogParam::getDownloadQSLServiceLastDate(const QString &name)
  function QString (line 340) | QString LogParam::getDownloadQSLLoTWLastCall()
  function QString (line 350) | QString LogParam::getDownloadQSLeQSLLastProfile()
  function QString (line 360) | QString LogParam::getQRZCOMCallbookUsername()
  function QStringList (line 370) | QStringList LogParam::getQRZCOMAPICallsignsList()
  function QString (line 380) | QString LogParam::getCloudlogAPIEndpoint()
  function uint (line 390) | uint LogParam::getCloudlogStationID()
  function QString (line 400) | QString LogParam::getClublogLogbookReqEmail()
  function QString (line 420) | QString LogParam::getEQSLLogbookUsername()
  function QString (line 430) | QString LogParam::getHamQTHCallbookUsername()
  function QString (line 440) | QString LogParam::getHRDLogLogbookReqCallsign()
  function QString (line 460) | QString LogParam::getKSTChatUsername()
  function QString (line 470) | QString LogParam::getLoTWCallbookUsername()
  function QString (line 480) | QString LogParam::getLoTWTQSLPath(const QString &defaultPath)
  function QString (line 495) | QString LogParam::getPrimaryCallbook(const QString &defaultValue)
  function QString (line 505) | QString LogParam::getSecondaryCallbook(const QString &defaultValue)
  function QString (line 515) | QString LogParam::getCallbookWebLookupURL(const QString &defaultURL)
  function QString (line 525) | QString LogParam::getNetworkNotifLogQSOAddrs()
  function QString (line 535) | QString LogParam::getNetworkNotifDXCSpotAddrs()
  function QString (line 545) | QString LogParam::getNetworkNotifWSJTXCQSpotAddrs()
  function QString (line 555) | QString LogParam::getNetworkNotifAlertsSpotAddrs()
  function QString (line 565) | QString LogParam::getNetworkNotifRigStateAddrs()
  function QString (line 585) | QString LogParam::getNetworkWsjtxForwardAddrs()
  function QString (line 605) | QString LogParam::getNetworkWsjtxListenerMulticastAddr()
  function QStringList (line 625) | QStringList LogParam::getEnabledMemberlists()
  function QByteArray (line 645) | QByteArray LogParam::getAlertWidgetState()
  function QString (line 685) | QString LogParam::getNewContactMode()
  function QString (line 695) | QString LogParam::getNewContactSubMode()
  function QString (line 725) | QString LogParam::getNewContactQSLSent()
  function QString (line 735) | QString LogParam::getNewContactLoTWQSLSent()
  function QString (line 745) | QString LogParam::getNewContactEQSLWQSLSent()
  function QString (line 755) | QString LogParam::getNewContactQSLVia()
  function QString (line 765) | QString LogParam::getNewContactPropMode()
  function QString (line 785) | QString LogParam::getNewContactSatName()
  function QStringList (line 795) | QStringList LogParam::getMapLayerStates(const QString &widgetID)
  function uint (line 810) | uint LogParam::getWsjtxFilterDxccStatus()
  function QString (line 822) | QString LogParam::getWsjtxFilterContRE()
  function QStringList (line 852) | QStringList LogParam::getWsjtxMemberlists()
  function QByteArray (line 862) | QByteArray LogParam::getWsjtxWidgetState()
  function uint (line 882) | uint LogParam::getDXCFilterDxccStatus()
  function QString (line 894) | QString LogParam::getDXCFilterContRE()
  function QString (line 904) | QString LogParam::getDXCFilterSpotterContRE()
  function QStringList (line 944) | QStringList LogParam::getDXCFilterMemberlists()
  function QByteArray (line 974) | QByteArray LogParam::getDXCDXTableState()
  function QByteArray (line 984) | QByteArray LogParam::getDXCWCYTableState()
  function QByteArray (line 994) | QByteArray LogParam::getDXCWWVTableState()
  function QByteArray (line 1004) | QByteArray LogParam::getDXCTOALLTableState()
  function QStringList (line 1024) | QStringList LogParam::getDXCServerlist()
  function QString (line 1034) | QString LogParam::getDXCLastServer()
  function QString (line 1044) | QString LogParam::getDXCFilterModeRE()
  function QStringList (line 1059) | QStringList LogParam::getDXCExcludedBands()
  function QByteArray (line 1095) | QByteArray LogParam::getLogbookState()
  function QString (line 1115) | QString LogParam::getLogbookFilterBand()
  function QString (line 1125) | QString LogParam::getLogbookFilterMode()
  function QString (line 1135) | QString LogParam::getLogbookFilterCountry()
  function QString (line 1145) | QString LogParam::getLogbookFilterUserFilter()
  function QString (line 1155) | QString LogParam::getLogbookFilterClub()
  function QByteArray (line 1165) | QByteArray LogParam::getEncryptedPasswords()
  function QString (line 1180) | QString LogParam::getSourcePlatform()
  function QByteArray (line 1215) | QByteArray LogParam::getMainWindowGeometry()
  function QByteArray (line 1225) | QByteArray LogParam::getMainWindowState()
  function QString (line 1235) | QString LogParam::getMainWindowBandmapWidgets()
  function QString (line 1260) | QString LogParam::getQslLabelFooterLeft()
  function QString (line 1270) | QString LogParam::getQslLabelFooterRight()
  function QString (line 1400) | QString LogParam::getQslLabelDateFormat()
  function QString (line 1410) | QString LogParam::getQslLabelSansFont()
  function QString (line 1420) | QString LogParam::getQslLabelMonoFont()
  function QString (line 1430) | QString LogParam::getQslLabelExtraColumn()
  function QString (line 1440) | QString LogParam::getQslLabelExtraColumnHeader()
  function QString (line 1450) | QString LogParam::getQslLabelToRadioText()
  function QString (line 1460) | QString LogParam::getQslLabelHdrDate()
  function QString (line 1470) | QString LogParam::getQslLabelHdrTime()
  function QString (line 1480) | QString LogParam::getQslLabelHdrBand()
  function QString (line 1490) | QString LogParam::getQslLabelHdrMode()
  function QString (line 1500) | QString LogParam::getQslLabelHdrQsl()
  function QVariant (line 1592) | QVariant LogParam::getParam(const QString &name, const QVariant &default...
  function QStringList (line 1653) | QStringList LogParam::getParamStringList(const QString &name, const QStr...
  function QStringList (line 1689) | QStringList LogParam::getKeys(const QString &group)
  function QString (line 1727) | QString LogParam::escapeString(const QString &input, QChar escapeChar, Q...
  function QString (line 1738) | QString LogParam::unescapeString(const QString &input, QChar escapeChar)
  function QString (line 1757) | QString LogParam::serializeStringList(const QStringList &list, QChar del...
  function QStringList (line 1765) | QStringList LogParam::deserializeStringList(const QString &input, QChar ...

FILE: core/LogParam.h
  function class (line 9) | class LogParam : public QObject

FILE: core/MembershipQE.cpp
  function QString (line 37) | const QString& ClubInfo::getCallsign() const
  function QString (line 42) | const QString& ClubInfo::getID() const
  function QDate (line 47) | const QDate& ClubInfo::getValidFrom() const
  function QDate (line 52) | const QDate& ClubInfo::getValidTo() const
  function QString (line 57) | const QString& ClubInfo::getClubInfo() const
  function QStringList (line 104) | QStringList MembershipQE::getEnabledClubLists()

FILE: core/MembershipQE.h
  function class (line 12) | class ClubInfo
  function MembershipQE (line 93) | static MembershipQE *instance()

FILE: core/Migration.cpp
  function QString (line 1172) | QString DBSchemaMigration::fixIntlField(const QSqlQuery &query, const QS...

FILE: core/Migration.h
  function class (line 8) | class DBSchemaMigration : public QObject

FILE: core/NetworkNotification.cpp
  function QString (line 15) | QString NetworkNotification::getNotifQSOAdiAddrs()
  function QString (line 29) | QString NetworkNotification::getNotifDXSpotAddrs()
  function QString (line 43) | QString NetworkNotification::getNotifWSJTXCQSpotAddrs()
  function QString (line 57) | QString NetworkNotification::getNotifSpotAlertAddrs()
  function QString (line 71) | QString NetworkNotification::getNotifRigStateAddrs()

FILE: core/NetworkNotification.h
  function class (line 20) | class GenericNotificationMsg : public QObject
  type QSOOperation (line 36) | enum QSOOperation
  function class (line 74) | class DXSpotNotificationMsg : public GenericSpotNotificationMsg
  function class (line 81) | class WSJTXCQSpotNotificationMsg : public GenericSpotNotificationMsg
  function class (line 89) | class SpotAlertNotificationMsg : public GenericSpotNotificationMsg
  function class (line 97) | class WCYSpotNotificationMsg : public GenericNotificationMsg
  function class (line 105) | class WWVSpotNotificationMsg : public GenericNotificationMsg
  function class (line 113) | class ToAllSpotNotificationMsg : public GenericNotificationMsg
  function class (line 121) | class RigStatusNotificationMsg : public GenericNotificationMsg
  function class (line 129) | class NetworkNotification : public QObject

FILE: core/PasswordCipher.cpp
  function QByteArray (line 20) | inline QByteArray toUtf8Norm(const QString& s)
  function randFill (line 25) | inline bool randFill(QByteArray& out)
  function logOpensslError (line 30) | inline void logOpensslError(const char* where)

FILE: core/PasswordCipher.h
  function class (line 24) | class PasswordCipher

FILE: core/PlatformParameterManager.cpp
  function QString (line 151) | QString PlatformParameterManager::pendingParametersPath()
  type ProfileDef (line 182) | struct ProfileDef

FILE: core/PlatformParameterManager.h
  type PlatformParameter (line 8) | struct PlatformParameter
  type ProfileParameter (line 18) | struct ProfileParameter
  function class (line 29) | class PlatformParameterManager

FILE: core/PotaQE.cpp
  function POTASpot (line 45) | const POTASpot PotaQE::findReferenceId(const Callsign &callsign, double ...

FILE: core/PotaQE.h
  function class (line 11) | class PotaQE : public QObject

FILE: core/PropConditions.cpp
  function QNetworkRequest (line 284) | QNetworkRequest PropConditions::prepareRequest(const QUrl &url)
  function QString (line 433) | QString PropConditions::solarSummaryFile()

FILE: core/PropConditions.h
  type MapPoint (line 20) | struct MapPoint
  function clear (line 48) | void clear()
  function class (line 62) | class PropConditions : public QObject

FILE: core/QSLPrintLabelRenderer.cpp
  function qreal (line 96) | qreal QSLPrintLabelRenderer::mmToUnits(const qreal mm,
  function QImage (line 374) | QImage QSLPrintLabelRenderer::renderPage(int pageIndex, int dpi)

FILE: core/QSLPrintLabelRenderer.h
  type LabelTemplate (line 15) | struct LabelTemplate
  type LabelStyleOptions (line 30) | struct LabelStyleOptions
  type QSLLabelData (line 48) | struct QSLLabelData
  function class (line 65) | class QSLPrintLabelRenderer

FILE: core/QSLStorage.cpp
  function QStringList (line 76) | QStringList QSLStorage::getAvailableQSLNames(const QSqlRecord &qso,
  function QSLObject (line 110) | QSLObject QSLStorage::getQSL(const QSqlRecord &qso,
  function executeGalleryQuery (line 202) | static QList<QSLGalleryItem> executeGalleryQuery(QSqlQuery &query)
  function QByteArray (line 391) | QByteArray QSLStorage::getQSLData(qulonglong contactId, int source, cons...

FILE: core/QSLStorage.h
  function class (line 11) | class QSLObject
  type QSLGalleryItem (line 58) | struct QSLGalleryItem
  function class (line 69) | class QSLStorage : public QObject

FILE: core/QSOFilterManager.cpp
  function QStringList (line 149) | QStringList QSOFilterManager::getFilterList() const
  function QSOFilter (line 175) | QSOFilter QSOFilterManager::getFilter(const QString &filterName) const
  function QString (line 215) | QString QSOFilterManager::getWhereClause(const QString &filterName, cons...
  function SqlListModel (line 270) | SqlListModel *QSOFilterManager::QSOFilterModel(const QString &firstValue...

FILE: core/QSOFilterManager.h
  type QSOFilterRule (line 11) | struct QSOFilterRule
  function class (line 23) | class QSOFilter
  function class (line 65) | class QSOFilterManager : public QObject

FILE: core/QuadKeyCache.h
  function insert (line 15) | void insert(const int keyA, const int keyB, const QString& keyC, const Q...
  function Value (line 21) | Value* value(const int keyA, const int keyB, const QString& keyC, const ...
  function contains (line 27) | bool contains(const int keyA, const int keyB, const QString& keyC, const...

FILE: core/WsjtxUDPReceiver.cpp
  function quint16 (line 165) | quint16 WsjtxUDPReceiver::getConfigPort()
  function QString (line 179) | QString WsjtxUDPReceiver::getConfigForwardAddresses()
  function QString (line 214) | QString WsjtxUDPReceiver::getConfigMulticastAddress()

FILE: core/WsjtxUDPReceiver.h
  function class (line 20) | class WsjtxUDPReceiver : public QObject

FILE: core/csv.hpp
  type mio (line 139) | namespace mio {
    type access_mode (line 145) | enum class access_mode
    function page_size (line 158) | inline size_t page_size()
    function make_offset_page_aligned (line 178) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    type basic_mmap (line 221) | struct basic_mmap
      method basic_mmap (line 272) | basic_mmap() = default;
      method basic_mmap (line 281) | basic_mmap(const String& path, const size_type offset = 0, const siz...
      method basic_mmap (line 293) | basic_mmap(const handle_type handle, const size_type offset = 0, con...
      method basic_mmap (line 305) | basic_mmap(const basic_mmap&) = delete;
      method basic_mmap (line 307) | basic_mmap& operator=(const basic_mmap&) = delete;
      method handle_type (line 321) | handle_type file_handle() const noexcept { return file_handle_; }
      method is_open (line 325) | bool is_open() const noexcept { return file_handle_ != invalid_handl...
      method empty (line 332) | bool empty() const noexcept { return length() == 0; }
      method size_type (line 343) | size_type size() const noexcept { return length(); }
      method size_type (line 344) | size_type length() const noexcept { return length_; }
      method size_type (line 345) | size_type mapped_length() const noexcept { return mapped_length_; }
      method size_type (line 348) | size_type mapping_offset() const noexcept
      method pointer (line 360) | pointer data() noexcept { return data_; }
      method const_pointer (line 361) | const_pointer data() const noexcept { return data_; }
      method iterator (line 370) | iterator begin() noexcept { return data(); }
      method const_iterator (line 371) | const_iterator begin() const noexcept { return data(); }
      method const_iterator (line 372) | const_iterator cbegin() const noexcept { return data(); }
      method iterator (line 381) | iterator end() noexcept { return data() + length(); }
      method const_iterator (line 382) | const_iterator end() const noexcept { return data() + length(); }
      method const_iterator (line 383) | const_iterator cend() const noexcept { return data() + length(); }
      method reverse_iterator (line 393) | reverse_iterator rbegin() noexcept { return reverse_iterator(end()); }
      method const_reverse_iterator (line 394) | const_reverse_iterator rbegin() const noexcept
      method const_reverse_iterator (line 396) | const_reverse_iterator crbegin() const noexcept
      method reverse_iterator (line 406) | reverse_iterator rend() noexcept { return reverse_iterator(begin()); }
      method const_reverse_iterator (line 407) | const_reverse_iterator rend() const noexcept
      method const_reverse_iterator (line 409) | const_reverse_iterator crend() const noexcept
      method reference (line 417) | reference operator[](const size_type i) noexcept { return data_[i]; }
      method const_reference (line 418) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 457) | void map(const String& path, std::error_code& error)
      method map (line 495) | void map(const handle_type handle, std::error_code& error)
      method pointer (line 527) | pointer get_mapping_start() noexcept
      method const_pointer (line 532) | const_pointer get_mapping_start() const noexcept
    function MMap (line 604) | MMap make_mmap(const MappingToken& token,
    function mmap_source (line 620) | mmap_source make_mmap_source(const MappingToken& token, mmap_source::s...
    function mmap_source (line 627) | mmap_source make_mmap_source(const MappingToken& token, std::error_cod...
    function mmap_sink (line 640) | mmap_sink make_mmap_sink(const MappingToken& token, mmap_sink::size_ty...
    function mmap_sink (line 647) | mmap_sink make_mmap_sink(const MappingToken& token, std::error_code& e...
    type detail (line 709) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type detail (line 865) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type access_mode (line 1386) | enum class access_mode
    function page_size (line 1399) | inline size_t page_size()
    function make_offset_page_aligned (line 1419) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    class basic_shared_mmap (line 1470) | class basic_shared_mmap
      method basic_shared_mmap (line 1491) | basic_shared_mmap() = default;
      method basic_shared_mmap (line 1492) | basic_shared_mmap(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1493) | basic_shared_mmap& operator=(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1494) | basic_shared_mmap(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1495) | basic_shared_mmap& operator=(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1498) | basic_shared_mmap(mmap_type&& mmap)
      method basic_shared_mmap (line 1503) | basic_shared_mmap& operator=(mmap_type&& mmap)
      method basic_shared_mmap (line 1510) | basic_shared_mmap(std::shared_ptr<mmap_type> mmap) : pimpl_(std::mov...
      method basic_shared_mmap (line 1513) | basic_shared_mmap& operator=(std::shared_ptr<mmap_type> mmap)
      method basic_shared_mmap (line 1526) | basic_shared_mmap(const String& path, const size_type offset = 0, co...
      method basic_shared_mmap (line 1538) | basic_shared_mmap(const handle_type handle, const size_type offset =...
      method get_shared_ptr (line 1554) | std::shared_ptr<mmap_type> get_shared_ptr() { return pimpl_; }
      method handle_type (line 1561) | handle_type file_handle() const noexcept
      method handle_type (line 1566) | handle_type mapping_handle() const noexcept
      method is_open (line 1572) | bool is_open() const noexcept { return pimpl_ && pimpl_->is_open(); }
      method empty (line 1579) | bool empty() const noexcept { return !pimpl_ || pimpl_->empty(); }
      method size_type (line 1587) | size_type size() const noexcept { return pimpl_ ? pimpl_->length() :...
      method size_type (line 1588) | size_type length() const noexcept { return pimpl_ ? pimpl_->length()...
      method size_type (line 1589) | size_type mapped_length() const noexcept
      method pointer (line 1601) | pointer data() noexcept { return pimpl_->data(); }
      method const_pointer (line 1602) | const_pointer data() const noexcept { return pimpl_ ? pimpl_->data()...
      method iterator (line 1608) | iterator begin() noexcept { return pimpl_->begin(); }
      method const_iterator (line 1609) | const_iterator begin() const noexcept { return pimpl_->begin(); }
      method const_iterator (line 1610) | const_iterator cbegin() const noexcept { return pimpl_->cbegin(); }
      method iterator (line 1619) | iterator end() noexcept { return pimpl_->end(); }
      method const_iterator (line 1620) | const_iterator end() const noexcept { return pimpl_->end(); }
      method const_iterator (line 1621) | const_iterator cend() const noexcept { return pimpl_->cend(); }
      method reverse_iterator (line 1631) | reverse_iterator rbegin() noexcept { return pimpl_->rbegin(); }
      method const_reverse_iterator (line 1632) | const_reverse_iterator rbegin() const noexcept { return pimpl_->rbeg...
      method const_reverse_iterator (line 1633) | const_reverse_iterator crbegin() const noexcept { return pimpl_->crb...
      method reverse_iterator (line 1642) | reverse_iterator rend() noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1643) | const_reverse_iterator rend() const noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1644) | const_reverse_iterator crend() const noexcept { return pimpl_->crend...
      method reference (line 1651) | reference operator[](const size_type i) noexcept { return (*pimpl_)[...
      method const_reference (line 1652) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 1675) | void map(const String& path, const size_type offset,
      method map (line 1694) | void map(const String& path, std::error_code& error)
      method map (line 1718) | void map(const handle_type handle, const size_type offset,
      method map (line 1735) | void map(const handle_type handle, std::error_code& error)
      method unmap (line 1749) | void unmap() { if(pimpl_) pimpl_->unmap(); }
      method swap (line 1751) | void swap(basic_shared_mmap& other) { pimpl_.swap(other.pimpl_); }
      method sync (line 1757) | void sync(std::error_code& error) { if(pimpl_) pimpl_->sync(error); }
      method map_impl (line 1793) | void map_impl(const MappingToken& token, const size_type offset,
  type mio (line 204) | namespace mio {
    type access_mode (line 145) | enum class access_mode
    function page_size (line 158) | inline size_t page_size()
    function make_offset_page_aligned (line 178) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    type basic_mmap (line 221) | struct basic_mmap
      method basic_mmap (line 272) | basic_mmap() = default;
      method basic_mmap (line 281) | basic_mmap(const String& path, const size_type offset = 0, const siz...
      method basic_mmap (line 293) | basic_mmap(const handle_type handle, const size_type offset = 0, con...
      method basic_mmap (line 305) | basic_mmap(const basic_mmap&) = delete;
      method basic_mmap (line 307) | basic_mmap& operator=(const basic_mmap&) = delete;
      method handle_type (line 321) | handle_type file_handle() const noexcept { return file_handle_; }
      method is_open (line 325) | bool is_open() const noexcept { return file_handle_ != invalid_handl...
      method empty (line 332) | bool empty() const noexcept { return length() == 0; }
      method size_type (line 343) | size_type size() const noexcept { return length(); }
      method size_type (line 344) | size_type length() const noexcept { return length_; }
      method size_type (line 345) | size_type mapped_length() const noexcept { return mapped_length_; }
      method size_type (line 348) | size_type mapping_offset() const noexcept
      method pointer (line 360) | pointer data() noexcept { return data_; }
      method const_pointer (line 361) | const_pointer data() const noexcept { return data_; }
      method iterator (line 370) | iterator begin() noexcept { return data(); }
      method const_iterator (line 371) | const_iterator begin() const noexcept { return data(); }
      method const_iterator (line 372) | const_iterator cbegin() const noexcept { return data(); }
      method iterator (line 381) | iterator end() noexcept { return data() + length(); }
      method const_iterator (line 382) | const_iterator end() const noexcept { return data() + length(); }
      method const_iterator (line 383) | const_iterator cend() const noexcept { return data() + length(); }
      method reverse_iterator (line 393) | reverse_iterator rbegin() noexcept { return reverse_iterator(end()); }
      method const_reverse_iterator (line 394) | const_reverse_iterator rbegin() const noexcept
      method const_reverse_iterator (line 396) | const_reverse_iterator crbegin() const noexcept
      method reverse_iterator (line 406) | reverse_iterator rend() noexcept { return reverse_iterator(begin()); }
      method const_reverse_iterator (line 407) | const_reverse_iterator rend() const noexcept
      method const_reverse_iterator (line 409) | const_reverse_iterator crend() const noexcept
      method reference (line 417) | reference operator[](const size_type i) noexcept { return data_[i]; }
      method const_reference (line 418) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 457) | void map(const String& path, std::error_code& error)
      method map (line 495) | void map(const handle_type handle, std::error_code& error)
      method pointer (line 527) | pointer get_mapping_start() noexcept
      method const_pointer (line 532) | const_pointer get_mapping_start() const noexcept
    function MMap (line 604) | MMap make_mmap(const MappingToken& token,
    function mmap_source (line 620) | mmap_source make_mmap_source(const MappingToken& token, mmap_source::s...
    function mmap_source (line 627) | mmap_source make_mmap_source(const MappingToken& token, std::error_cod...
    function mmap_sink (line 640) | mmap_sink make_mmap_sink(const MappingToken& token, mmap_sink::size_ty...
    function mmap_sink (line 647) | mmap_sink make_mmap_sink(const MappingToken& token, std::error_code& e...
    type detail (line 709) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type detail (line 865) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type access_mode (line 1386) | enum class access_mode
    function page_size (line 1399) | inline size_t page_size()
    function make_offset_page_aligned (line 1419) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    class basic_shared_mmap (line 1470) | class basic_shared_mmap
      method basic_shared_mmap (line 1491) | basic_shared_mmap() = default;
      method basic_shared_mmap (line 1492) | basic_shared_mmap(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1493) | basic_shared_mmap& operator=(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1494) | basic_shared_mmap(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1495) | basic_shared_mmap& operator=(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1498) | basic_shared_mmap(mmap_type&& mmap)
      method basic_shared_mmap (line 1503) | basic_shared_mmap& operator=(mmap_type&& mmap)
      method basic_shared_mmap (line 1510) | basic_shared_mmap(std::shared_ptr<mmap_type> mmap) : pimpl_(std::mov...
      method basic_shared_mmap (line 1513) | basic_shared_mmap& operator=(std::shared_ptr<mmap_type> mmap)
      method basic_shared_mmap (line 1526) | basic_shared_mmap(const String& path, const size_type offset = 0, co...
      method basic_shared_mmap (line 1538) | basic_shared_mmap(const handle_type handle, const size_type offset =...
      method get_shared_ptr (line 1554) | std::shared_ptr<mmap_type> get_shared_ptr() { return pimpl_; }
      method handle_type (line 1561) | handle_type file_handle() const noexcept
      method handle_type (line 1566) | handle_type mapping_handle() const noexcept
      method is_open (line 1572) | bool is_open() const noexcept { return pimpl_ && pimpl_->is_open(); }
      method empty (line 1579) | bool empty() const noexcept { return !pimpl_ || pimpl_->empty(); }
      method size_type (line 1587) | size_type size() const noexcept { return pimpl_ ? pimpl_->length() :...
      method size_type (line 1588) | size_type length() const noexcept { return pimpl_ ? pimpl_->length()...
      method size_type (line 1589) | size_type mapped_length() const noexcept
      method pointer (line 1601) | pointer data() noexcept { return pimpl_->data(); }
      method const_pointer (line 1602) | const_pointer data() const noexcept { return pimpl_ ? pimpl_->data()...
      method iterator (line 1608) | iterator begin() noexcept { return pimpl_->begin(); }
      method const_iterator (line 1609) | const_iterator begin() const noexcept { return pimpl_->begin(); }
      method const_iterator (line 1610) | const_iterator cbegin() const noexcept { return pimpl_->cbegin(); }
      method iterator (line 1619) | iterator end() noexcept { return pimpl_->end(); }
      method const_iterator (line 1620) | const_iterator end() const noexcept { return pimpl_->end(); }
      method const_iterator (line 1621) | const_iterator cend() const noexcept { return pimpl_->cend(); }
      method reverse_iterator (line 1631) | reverse_iterator rbegin() noexcept { return pimpl_->rbegin(); }
      method const_reverse_iterator (line 1632) | const_reverse_iterator rbegin() const noexcept { return pimpl_->rbeg...
      method const_reverse_iterator (line 1633) | const_reverse_iterator crbegin() const noexcept { return pimpl_->crb...
      method reverse_iterator (line 1642) | reverse_iterator rend() noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1643) | const_reverse_iterator rend() const noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1644) | const_reverse_iterator crend() const noexcept { return pimpl_->crend...
      method reference (line 1651) | reference operator[](const size_type i) noexcept { return (*pimpl_)[...
      method const_reference (line 1652) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 1675) | void map(const String& path, const size_type offset,
      method map (line 1694) | void map(const String& path, std::error_code& error)
      method map (line 1718) | void map(const handle_type handle, const size_type offset,
      method map (line 1735) | void map(const handle_type handle, std::error_code& error)
      method unmap (line 1749) | void unmap() { if(pimpl_) pimpl_->unmap(); }
      method swap (line 1751) | void swap(basic_shared_mmap& other) { pimpl_.swap(other.pimpl_); }
      method sync (line 1757) | void sync(std::error_code& error) { if(pimpl_) pimpl_->sync(error); }
      method map_impl (line 1793) | void map_impl(const MappingToken& token, const size_type offset,
  type mio (line 708) | namespace mio {
    type access_mode (line 145) | enum class access_mode
    function page_size (line 158) | inline size_t page_size()
    function make_offset_page_aligned (line 178) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    type basic_mmap (line 221) | struct basic_mmap
      method basic_mmap (line 272) | basic_mmap() = default;
      method basic_mmap (line 281) | basic_mmap(const String& path, const size_type offset = 0, const siz...
      method basic_mmap (line 293) | basic_mmap(const handle_type handle, const size_type offset = 0, con...
      method basic_mmap (line 305) | basic_mmap(const basic_mmap&) = delete;
      method basic_mmap (line 307) | basic_mmap& operator=(const basic_mmap&) = delete;
      method handle_type (line 321) | handle_type file_handle() const noexcept { return file_handle_; }
      method is_open (line 325) | bool is_open() const noexcept { return file_handle_ != invalid_handl...
      method empty (line 332) | bool empty() const noexcept { return length() == 0; }
      method size_type (line 343) | size_type size() const noexcept { return length(); }
      method size_type (line 344) | size_type length() const noexcept { return length_; }
      method size_type (line 345) | size_type mapped_length() const noexcept { return mapped_length_; }
      method size_type (line 348) | size_type mapping_offset() const noexcept
      method pointer (line 360) | pointer data() noexcept { return data_; }
      method const_pointer (line 361) | const_pointer data() const noexcept { return data_; }
      method iterator (line 370) | iterator begin() noexcept { return data(); }
      method const_iterator (line 371) | const_iterator begin() const noexcept { return data(); }
      method const_iterator (line 372) | const_iterator cbegin() const noexcept { return data(); }
      method iterator (line 381) | iterator end() noexcept { return data() + length(); }
      method const_iterator (line 382) | const_iterator end() const noexcept { return data() + length(); }
      method const_iterator (line 383) | const_iterator cend() const noexcept { return data() + length(); }
      method reverse_iterator (line 393) | reverse_iterator rbegin() noexcept { return reverse_iterator(end()); }
      method const_reverse_iterator (line 394) | const_reverse_iterator rbegin() const noexcept
      method const_reverse_iterator (line 396) | const_reverse_iterator crbegin() const noexcept
      method reverse_iterator (line 406) | reverse_iterator rend() noexcept { return reverse_iterator(begin()); }
      method const_reverse_iterator (line 407) | const_reverse_iterator rend() const noexcept
      method const_reverse_iterator (line 409) | const_reverse_iterator crend() const noexcept
      method reference (line 417) | reference operator[](const size_type i) noexcept { return data_[i]; }
      method const_reference (line 418) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 457) | void map(const String& path, std::error_code& error)
      method map (line 495) | void map(const handle_type handle, std::error_code& error)
      method pointer (line 527) | pointer get_mapping_start() noexcept
      method const_pointer (line 532) | const_pointer get_mapping_start() const noexcept
    function MMap (line 604) | MMap make_mmap(const MappingToken& token,
    function mmap_source (line 620) | mmap_source make_mmap_source(const MappingToken& token, mmap_source::s...
    function mmap_source (line 627) | mmap_source make_mmap_source(const MappingToken& token, std::error_cod...
    function mmap_sink (line 640) | mmap_sink make_mmap_sink(const MappingToken& token, mmap_sink::size_ty...
    function mmap_sink (line 647) | mmap_sink make_mmap_sink(const MappingToken& token, std::error_code& e...
    type detail (line 709) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type detail (line 865) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type access_mode (line 1386) | enum class access_mode
    function page_size (line 1399) | inline size_t page_size()
    function make_offset_page_aligned (line 1419) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    class basic_shared_mmap (line 1470) | class basic_shared_mmap
      method basic_shared_mmap (line 1491) | basic_shared_mmap() = default;
      method basic_shared_mmap (line 1492) | basic_shared_mmap(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1493) | basic_shared_mmap& operator=(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1494) | basic_shared_mmap(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1495) | basic_shared_mmap& operator=(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1498) | basic_shared_mmap(mmap_type&& mmap)
      method basic_shared_mmap (line 1503) | basic_shared_mmap& operator=(mmap_type&& mmap)
      method basic_shared_mmap (line 1510) | basic_shared_mmap(std::shared_ptr<mmap_type> mmap) : pimpl_(std::mov...
      method basic_shared_mmap (line 1513) | basic_shared_mmap& operator=(std::shared_ptr<mmap_type> mmap)
      method basic_shared_mmap (line 1526) | basic_shared_mmap(const String& path, const size_type offset = 0, co...
      method basic_shared_mmap (line 1538) | basic_shared_mmap(const handle_type handle, const size_type offset =...
      method get_shared_ptr (line 1554) | std::shared_ptr<mmap_type> get_shared_ptr() { return pimpl_; }
      method handle_type (line 1561) | handle_type file_handle() const noexcept
      method handle_type (line 1566) | handle_type mapping_handle() const noexcept
      method is_open (line 1572) | bool is_open() const noexcept { return pimpl_ && pimpl_->is_open(); }
      method empty (line 1579) | bool empty() const noexcept { return !pimpl_ || pimpl_->empty(); }
      method size_type (line 1587) | size_type size() const noexcept { return pimpl_ ? pimpl_->length() :...
      method size_type (line 1588) | size_type length() const noexcept { return pimpl_ ? pimpl_->length()...
      method size_type (line 1589) | size_type mapped_length() const noexcept
      method pointer (line 1601) | pointer data() noexcept { return pimpl_->data(); }
      method const_pointer (line 1602) | const_pointer data() const noexcept { return pimpl_ ? pimpl_->data()...
      method iterator (line 1608) | iterator begin() noexcept { return pimpl_->begin(); }
      method const_iterator (line 1609) | const_iterator begin() const noexcept { return pimpl_->begin(); }
      method const_iterator (line 1610) | const_iterator cbegin() const noexcept { return pimpl_->cbegin(); }
      method iterator (line 1619) | iterator end() noexcept { return pimpl_->end(); }
      method const_iterator (line 1620) | const_iterator end() const noexcept { return pimpl_->end(); }
      method const_iterator (line 1621) | const_iterator cend() const noexcept { return pimpl_->cend(); }
      method reverse_iterator (line 1631) | reverse_iterator rbegin() noexcept { return pimpl_->rbegin(); }
      method const_reverse_iterator (line 1632) | const_reverse_iterator rbegin() const noexcept { return pimpl_->rbeg...
      method const_reverse_iterator (line 1633) | const_reverse_iterator crbegin() const noexcept { return pimpl_->crb...
      method reverse_iterator (line 1642) | reverse_iterator rend() noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1643) | const_reverse_iterator rend() const noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1644) | const_reverse_iterator crend() const noexcept { return pimpl_->crend...
      method reference (line 1651) | reference operator[](const size_type i) noexcept { return (*pimpl_)[...
      method const_reference (line 1652) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 1675) | void map(const String& path, const size_type offset,
      method map (line 1694) | void map(const String& path, std::error_code& error)
      method map (line 1718) | void map(const handle_type handle, const size_type offset,
      method map (line 1735) | void map(const handle_type handle, std::error_code& error)
      method unmap (line 1749) | void unmap() { if(pimpl_) pimpl_->unmap(); }
      method swap (line 1751) | void swap(basic_shared_mmap& other) { pimpl_.swap(other.pimpl_); }
      method sync (line 1757) | void sync(std::error_code& error) { if(pimpl_) pimpl_->sync(error); }
      method map_impl (line 1793) | void map_impl(const MappingToken& token, const size_type offset,
  type mio (line 864) | namespace mio {
    type access_mode (line 145) | enum class access_mode
    function page_size (line 158) | inline size_t page_size()
    function make_offset_page_aligned (line 178) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    type basic_mmap (line 221) | struct basic_mmap
      method basic_mmap (line 272) | basic_mmap() = default;
      method basic_mmap (line 281) | basic_mmap(const String& path, const size_type offset = 0, const siz...
      method basic_mmap (line 293) | basic_mmap(const handle_type handle, const size_type offset = 0, con...
      method basic_mmap (line 305) | basic_mmap(const basic_mmap&) = delete;
      method basic_mmap (line 307) | basic_mmap& operator=(const basic_mmap&) = delete;
      method handle_type (line 321) | handle_type file_handle() const noexcept { return file_handle_; }
      method is_open (line 325) | bool is_open() const noexcept { return file_handle_ != invalid_handl...
      method empty (line 332) | bool empty() const noexcept { return length() == 0; }
      method size_type (line 343) | size_type size() const noexcept { return length(); }
      method size_type (line 344) | size_type length() const noexcept { return length_; }
      method size_type (line 345) | size_type mapped_length() const noexcept { return mapped_length_; }
      method size_type (line 348) | size_type mapping_offset() const noexcept
      method pointer (line 360) | pointer data() noexcept { return data_; }
      method const_pointer (line 361) | const_pointer data() const noexcept { return data_; }
      method iterator (line 370) | iterator begin() noexcept { return data(); }
      method const_iterator (line 371) | const_iterator begin() const noexcept { return data(); }
      method const_iterator (line 372) | const_iterator cbegin() const noexcept { return data(); }
      method iterator (line 381) | iterator end() noexcept { return data() + length(); }
      method const_iterator (line 382) | const_iterator end() const noexcept { return data() + length(); }
      method const_iterator (line 383) | const_iterator cend() const noexcept { return data() + length(); }
      method reverse_iterator (line 393) | reverse_iterator rbegin() noexcept { return reverse_iterator(end()); }
      method const_reverse_iterator (line 394) | const_reverse_iterator rbegin() const noexcept
      method const_reverse_iterator (line 396) | const_reverse_iterator crbegin() const noexcept
      method reverse_iterator (line 406) | reverse_iterator rend() noexcept { return reverse_iterator(begin()); }
      method const_reverse_iterator (line 407) | const_reverse_iterator rend() const noexcept
      method const_reverse_iterator (line 409) | const_reverse_iterator crend() const noexcept
      method reference (line 417) | reference operator[](const size_type i) noexcept { return data_[i]; }
      method const_reference (line 418) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 457) | void map(const String& path, std::error_code& error)
      method map (line 495) | void map(const handle_type handle, std::error_code& error)
      method pointer (line 527) | pointer get_mapping_start() noexcept
      method const_pointer (line 532) | const_pointer get_mapping_start() const noexcept
    function MMap (line 604) | MMap make_mmap(const MappingToken& token,
    function mmap_source (line 620) | mmap_source make_mmap_source(const MappingToken& token, mmap_source::s...
    function mmap_source (line 627) | mmap_source make_mmap_source(const MappingToken& token, std::error_cod...
    function mmap_sink (line 640) | mmap_sink make_mmap_sink(const MappingToken& token, mmap_sink::size_ty...
    function mmap_sink (line 647) | mmap_sink make_mmap_sink(const MappingToken& token, std::error_code& e...
    type detail (line 709) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type detail (line 865) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type access_mode (line 1386) | enum class access_mode
    function page_size (line 1399) | inline size_t page_size()
    function make_offset_page_aligned (line 1419) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    class basic_shared_mmap (line 1470) | class basic_shared_mmap
      method basic_shared_mmap (line 1491) | basic_shared_mmap() = default;
      method basic_shared_mmap (line 1492) | basic_shared_mmap(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1493) | basic_shared_mmap& operator=(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1494) | basic_shared_mmap(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1495) | basic_shared_mmap& operator=(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1498) | basic_shared_mmap(mmap_type&& mmap)
      method basic_shared_mmap (line 1503) | basic_shared_mmap& operator=(mmap_type&& mmap)
      method basic_shared_mmap (line 1510) | basic_shared_mmap(std::shared_ptr<mmap_type> mmap) : pimpl_(std::mov...
      method basic_shared_mmap (line 1513) | basic_shared_mmap& operator=(std::shared_ptr<mmap_type> mmap)
      method basic_shared_mmap (line 1526) | basic_shared_mmap(const String& path, const size_type offset = 0, co...
      method basic_shared_mmap (line 1538) | basic_shared_mmap(const handle_type handle, const size_type offset =...
      method get_shared_ptr (line 1554) | std::shared_ptr<mmap_type> get_shared_ptr() { return pimpl_; }
      method handle_type (line 1561) | handle_type file_handle() const noexcept
      method handle_type (line 1566) | handle_type mapping_handle() const noexcept
      method is_open (line 1572) | bool is_open() const noexcept { return pimpl_ && pimpl_->is_open(); }
      method empty (line 1579) | bool empty() const noexcept { return !pimpl_ || pimpl_->empty(); }
      method size_type (line 1587) | size_type size() const noexcept { return pimpl_ ? pimpl_->length() :...
      method size_type (line 1588) | size_type length() const noexcept { return pimpl_ ? pimpl_->length()...
      method size_type (line 1589) | size_type mapped_length() const noexcept
      method pointer (line 1601) | pointer data() noexcept { return pimpl_->data(); }
      method const_pointer (line 1602) | const_pointer data() const noexcept { return pimpl_ ? pimpl_->data()...
      method iterator (line 1608) | iterator begin() noexcept { return pimpl_->begin(); }
      method const_iterator (line 1609) | const_iterator begin() const noexcept { return pimpl_->begin(); }
      method const_iterator (line 1610) | const_iterator cbegin() const noexcept { return pimpl_->cbegin(); }
      method iterator (line 1619) | iterator end() noexcept { return pimpl_->end(); }
      method const_iterator (line 1620) | const_iterator end() const noexcept { return pimpl_->end(); }
      method const_iterator (line 1621) | const_iterator cend() const noexcept { return pimpl_->cend(); }
      method reverse_iterator (line 1631) | reverse_iterator rbegin() noexcept { return pimpl_->rbegin(); }
      method const_reverse_iterator (line 1632) | const_reverse_iterator rbegin() const noexcept { return pimpl_->rbeg...
      method const_reverse_iterator (line 1633) | const_reverse_iterator crbegin() const noexcept { return pimpl_->crb...
      method reverse_iterator (line 1642) | reverse_iterator rend() noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1643) | const_reverse_iterator rend() const noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1644) | const_reverse_iterator crend() const noexcept { return pimpl_->crend...
      method reference (line 1651) | reference operator[](const size_type i) noexcept { return (*pimpl_)[...
      method const_reference (line 1652) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 1675) | void map(const String& path, const size_type offset,
      method map (line 1694) | void map(const String& path, std::error_code& error)
      method map (line 1718) | void map(const handle_type handle, const size_type offset,
      method map (line 1735) | void map(const handle_type handle, std::error_code& error)
      method unmap (line 1749) | void unmap() { if(pimpl_) pimpl_->unmap(); }
      method swap (line 1751) | void swap(basic_shared_mmap& other) { pimpl_.swap(other.pimpl_); }
      method sync (line 1757) | void sync(std::error_code& error) { if(pimpl_) pimpl_->sync(error); }
      method map_impl (line 1793) | void map_impl(const MappingToken& token, const size_type offset,
  type mio (line 1380) | namespace mio {
    type access_mode (line 145) | enum class access_mode
    function page_size (line 158) | inline size_t page_size()
    function make_offset_page_aligned (line 178) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    type basic_mmap (line 221) | struct basic_mmap
      method basic_mmap (line 272) | basic_mmap() = default;
      method basic_mmap (line 281) | basic_mmap(const String& path, const size_type offset = 0, const siz...
      method basic_mmap (line 293) | basic_mmap(const handle_type handle, const size_type offset = 0, con...
      method basic_mmap (line 305) | basic_mmap(const basic_mmap&) = delete;
      method basic_mmap (line 307) | basic_mmap& operator=(const basic_mmap&) = delete;
      method handle_type (line 321) | handle_type file_handle() const noexcept { return file_handle_; }
      method is_open (line 325) | bool is_open() const noexcept { return file_handle_ != invalid_handl...
      method empty (line 332) | bool empty() const noexcept { return length() == 0; }
      method size_type (line 343) | size_type size() const noexcept { return length(); }
      method size_type (line 344) | size_type length() const noexcept { return length_; }
      method size_type (line 345) | size_type mapped_length() const noexcept { return mapped_length_; }
      method size_type (line 348) | size_type mapping_offset() const noexcept
      method pointer (line 360) | pointer data() noexcept { return data_; }
      method const_pointer (line 361) | const_pointer data() const noexcept { return data_; }
      method iterator (line 370) | iterator begin() noexcept { return data(); }
      method const_iterator (line 371) | const_iterator begin() const noexcept { return data(); }
      method const_iterator (line 372) | const_iterator cbegin() const noexcept { return data(); }
      method iterator (line 381) | iterator end() noexcept { return data() + length(); }
      method const_iterator (line 382) | const_iterator end() const noexcept { return data() + length(); }
      method const_iterator (line 383) | const_iterator cend() const noexcept { return data() + length(); }
      method reverse_iterator (line 393) | reverse_iterator rbegin() noexcept { return reverse_iterator(end()); }
      method const_reverse_iterator (line 394) | const_reverse_iterator rbegin() const noexcept
      method const_reverse_iterator (line 396) | const_reverse_iterator crbegin() const noexcept
      method reverse_iterator (line 406) | reverse_iterator rend() noexcept { return reverse_iterator(begin()); }
      method const_reverse_iterator (line 407) | const_reverse_iterator rend() const noexcept
      method const_reverse_iterator (line 409) | const_reverse_iterator crend() const noexcept
      method reference (line 417) | reference operator[](const size_type i) noexcept { return data_[i]; }
      method const_reference (line 418) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 457) | void map(const String& path, std::error_code& error)
      method map (line 495) | void map(const handle_type handle, std::error_code& error)
      method pointer (line 527) | pointer get_mapping_start() noexcept
      method const_pointer (line 532) | const_pointer get_mapping_start() const noexcept
    function MMap (line 604) | MMap make_mmap(const MappingToken& token,
    function mmap_source (line 620) | mmap_source make_mmap_source(const MappingToken& token, mmap_source::s...
    function mmap_source (line 627) | mmap_source make_mmap_source(const MappingToken& token, std::error_cod...
    function mmap_sink (line 640) | mmap_sink make_mmap_sink(const MappingToken& token, mmap_sink::size_ty...
    function mmap_sink (line 647) | mmap_sink make_mmap_sink(const MappingToken& token, std::error_code& e...
    type detail (line 709) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type detail (line 865) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type access_mode (line 1386) | enum class access_mode
    function page_size (line 1399) | inline size_t page_size()
    function make_offset_page_aligned (line 1419) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    class basic_shared_mmap (line 1470) | class basic_shared_mmap
      method basic_shared_mmap (line 1491) | basic_shared_mmap() = default;
      method basic_shared_mmap (line 1492) | basic_shared_mmap(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1493) | basic_shared_mmap& operator=(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1494) | basic_shared_mmap(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1495) | basic_shared_mmap& operator=(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1498) | basic_shared_mmap(mmap_type&& mmap)
      method basic_shared_mmap (line 1503) | basic_shared_mmap& operator=(mmap_type&& mmap)
      method basic_shared_mmap (line 1510) | basic_shared_mmap(std::shared_ptr<mmap_type> mmap) : pimpl_(std::mov...
      method basic_shared_mmap (line 1513) | basic_shared_mmap& operator=(std::shared_ptr<mmap_type> mmap)
      method basic_shared_mmap (line 1526) | basic_shared_mmap(const String& path, const size_type offset = 0, co...
      method basic_shared_mmap (line 1538) | basic_shared_mmap(const handle_type handle, const size_type offset =...
      method get_shared_ptr (line 1554) | std::shared_ptr<mmap_type> get_shared_ptr() { return pimpl_; }
      method handle_type (line 1561) | handle_type file_handle() const noexcept
      method handle_type (line 1566) | handle_type mapping_handle() const noexcept
      method is_open (line 1572) | bool is_open() const noexcept { return pimpl_ && pimpl_->is_open(); }
      method empty (line 1579) | bool empty() const noexcept { return !pimpl_ || pimpl_->empty(); }
      method size_type (line 1587) | size_type size() const noexcept { return pimpl_ ? pimpl_->length() :...
      method size_type (line 1588) | size_type length() const noexcept { return pimpl_ ? pimpl_->length()...
      method size_type (line 1589) | size_type mapped_length() const noexcept
      method pointer (line 1601) | pointer data() noexcept { return pimpl_->data(); }
      method const_pointer (line 1602) | const_pointer data() const noexcept { return pimpl_ ? pimpl_->data()...
      method iterator (line 1608) | iterator begin() noexcept { return pimpl_->begin(); }
      method const_iterator (line 1609) | const_iterator begin() const noexcept { return pimpl_->begin(); }
      method const_iterator (line 1610) | const_iterator cbegin() const noexcept { return pimpl_->cbegin(); }
      method iterator (line 1619) | iterator end() noexcept { return pimpl_->end(); }
      method const_iterator (line 1620) | const_iterator end() const noexcept { return pimpl_->end(); }
      method const_iterator (line 1621) | const_iterator cend() const noexcept { return pimpl_->cend(); }
      method reverse_iterator (line 1631) | reverse_iterator rbegin() noexcept { return pimpl_->rbegin(); }
      method const_reverse_iterator (line 1632) | const_reverse_iterator rbegin() const noexcept { return pimpl_->rbeg...
      method const_reverse_iterator (line 1633) | const_reverse_iterator crbegin() const noexcept { return pimpl_->crb...
      method reverse_iterator (line 1642) | reverse_iterator rend() noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1643) | const_reverse_iterator rend() const noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1644) | const_reverse_iterator crend() const noexcept { return pimpl_->crend...
      method reference (line 1651) | reference operator[](const size_type i) noexcept { return (*pimpl_)[...
      method const_reference (line 1652) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 1675) | void map(const String& path, const size_type offset,
      method map (line 1694) | void map(const String& path, std::error_code& error)
      method map (line 1718) | void map(const handle_type handle, const size_type offset,
      method map (line 1735) | void map(const handle_type handle, std::error_code& error)
      method unmap (line 1749) | void unmap() { if(pimpl_) pimpl_->unmap(); }
      method swap (line 1751) | void swap(basic_shared_mmap& other) { pimpl_.swap(other.pimpl_); }
      method sync (line 1757) | void sync(std::error_code& error) { if(pimpl_) pimpl_->sync(error); }
      method map_impl (line 1793) | void map_impl(const MappingToken& token, const size_type offset,
  type mio (line 1458) | namespace mio {
    type access_mode (line 145) | enum class access_mode
    function page_size (line 158) | inline size_t page_size()
    function make_offset_page_aligned (line 178) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    type basic_mmap (line 221) | struct basic_mmap
      method basic_mmap (line 272) | basic_mmap() = default;
      method basic_mmap (line 281) | basic_mmap(const String& path, const size_type offset = 0, const siz...
      method basic_mmap (line 293) | basic_mmap(const handle_type handle, const size_type offset = 0, con...
      method basic_mmap (line 305) | basic_mmap(const basic_mmap&) = delete;
      method basic_mmap (line 307) | basic_mmap& operator=(const basic_mmap&) = delete;
      method handle_type (line 321) | handle_type file_handle() const noexcept { return file_handle_; }
      method is_open (line 325) | bool is_open() const noexcept { return file_handle_ != invalid_handl...
      method empty (line 332) | bool empty() const noexcept { return length() == 0; }
      method size_type (line 343) | size_type size() const noexcept { return length(); }
      method size_type (line 344) | size_type length() const noexcept { return length_; }
      method size_type (line 345) | size_type mapped_length() const noexcept { return mapped_length_; }
      method size_type (line 348) | size_type mapping_offset() const noexcept
      method pointer (line 360) | pointer data() noexcept { return data_; }
      method const_pointer (line 361) | const_pointer data() const noexcept { return data_; }
      method iterator (line 370) | iterator begin() noexcept { return data(); }
      method const_iterator (line 371) | const_iterator begin() const noexcept { return data(); }
      method const_iterator (line 372) | const_iterator cbegin() const noexcept { return data(); }
      method iterator (line 381) | iterator end() noexcept { return data() + length(); }
      method const_iterator (line 382) | const_iterator end() const noexcept { return data() + length(); }
      method const_iterator (line 383) | const_iterator cend() const noexcept { return data() + length(); }
      method reverse_iterator (line 393) | reverse_iterator rbegin() noexcept { return reverse_iterator(end()); }
      method const_reverse_iterator (line 394) | const_reverse_iterator rbegin() const noexcept
      method const_reverse_iterator (line 396) | const_reverse_iterator crbegin() const noexcept
      method reverse_iterator (line 406) | reverse_iterator rend() noexcept { return reverse_iterator(begin()); }
      method const_reverse_iterator (line 407) | const_reverse_iterator rend() const noexcept
      method const_reverse_iterator (line 409) | const_reverse_iterator crend() const noexcept
      method reference (line 417) | reference operator[](const size_type i) noexcept { return data_[i]; }
      method const_reference (line 418) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 457) | void map(const String& path, std::error_code& error)
      method map (line 495) | void map(const handle_type handle, std::error_code& error)
      method pointer (line 527) | pointer get_mapping_start() noexcept
      method const_pointer (line 532) | const_pointer get_mapping_start() const noexcept
    function MMap (line 604) | MMap make_mmap(const MappingToken& token,
    function mmap_source (line 620) | mmap_source make_mmap_source(const MappingToken& token, mmap_source::s...
    function mmap_source (line 627) | mmap_source make_mmap_source(const MappingToken& token, std::error_cod...
    function mmap_sink (line 640) | mmap_sink make_mmap_sink(const MappingToken& token, mmap_sink::size_ty...
    function mmap_sink (line 647) | mmap_sink make_mmap_sink(const MappingToken& token, std::error_code& e...
    type detail (line 709) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type detail (line 865) | namespace detail {
      type char_type_helper (line 721) | struct char_type_helper {
      type char_type (line 726) | struct char_type {
      type char_type<char*> (line 732) | struct char_type<char*> {
      type char_type<const char*> (line 737) | struct char_type<const char*> {
      type char_type<char[N]> (line 742) | struct char_type<char[N]> {
      type char_type<const char[N]> (line 747) | struct char_type<const char[N]> {
      type char_type<wchar_t*> (line 753) | struct char_type<wchar_t*> {
      type char_type<const wchar_t*> (line 758) | struct char_type<const wchar_t*> {
      type char_type<wchar_t[N]> (line 763) | struct char_type<wchar_t[N]> {
      type char_type<const wchar_t[N]> (line 768) | struct char_type<const wchar_t[N]> {
      type is_c_str_helper (line 774) | struct is_c_str_helper
      type is_c_str (line 792) | struct is_c_str
      type is_c_wstr (line 799) | struct is_c_wstr
      type is_c_str_or_c_wstr (line 806) | struct is_c_str_or_c_wstr
      function empty (line 828) | bool empty(const String& path)
      function empty (line 844) | bool empty(String path)
      type win (line 868) | namespace win {
        function DWORD (line 871) | inline DWORD int64_high(int64_t n) noexcept
        function DWORD (line 877) | inline DWORD int64_low(int64_t n) noexcept
        function file_handle_type (line 887) | file_handle_type open_file_helper(const String& path, const access...
        function open_file_helper (line 899) | typename std::enable_if<
      function last_error (line 920) | inline std::error_code last_error() noexcept
      function file_handle_type (line 932) | file_handle_type open_file(const String& path, const access_mode mode,
      function query_file_size (line 954) | inline size_t query_file_size(file_handle_type handle, std::error_co...
      type mmap_context (line 976) | struct mmap_context
      function mmap_context (line 986) | inline mmap_context memory_map(const file_handle_type file_handle, c...
    type access_mode (line 1386) | enum class access_mode
    function page_size (line 1399) | inline size_t page_size()
    function make_offset_page_aligned (line 1419) | inline size_t make_offset_page_aligned(size_t offset) noexcept
    class basic_shared_mmap (line 1470) | class basic_shared_mmap
      method basic_shared_mmap (line 1491) | basic_shared_mmap() = default;
      method basic_shared_mmap (line 1492) | basic_shared_mmap(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1493) | basic_shared_mmap& operator=(const basic_shared_mmap&) = default;
      method basic_shared_mmap (line 1494) | basic_shared_mmap(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1495) | basic_shared_mmap& operator=(basic_shared_mmap&&) = default;
      method basic_shared_mmap (line 1498) | basic_shared_mmap(mmap_type&& mmap)
      method basic_shared_mmap (line 1503) | basic_shared_mmap& operator=(mmap_type&& mmap)
      method basic_shared_mmap (line 1510) | basic_shared_mmap(std::shared_ptr<mmap_type> mmap) : pimpl_(std::mov...
      method basic_shared_mmap (line 1513) | basic_shared_mmap& operator=(std::shared_ptr<mmap_type> mmap)
      method basic_shared_mmap (line 1526) | basic_shared_mmap(const String& path, const size_type offset = 0, co...
      method basic_shared_mmap (line 1538) | basic_shared_mmap(const handle_type handle, const size_type offset =...
      method get_shared_ptr (line 1554) | std::shared_ptr<mmap_type> get_shared_ptr() { return pimpl_; }
      method handle_type (line 1561) | handle_type file_handle() const noexcept
      method handle_type (line 1566) | handle_type mapping_handle() const noexcept
      method is_open (line 1572) | bool is_open() const noexcept { return pimpl_ && pimpl_->is_open(); }
      method empty (line 1579) | bool empty() const noexcept { return !pimpl_ || pimpl_->empty(); }
      method size_type (line 1587) | size_type size() const noexcept { return pimpl_ ? pimpl_->length() :...
      method size_type (line 1588) | size_type length() const noexcept { return pimpl_ ? pimpl_->length()...
      method size_type (line 1589) | size_type mapped_length() const noexcept
      method pointer (line 1601) | pointer data() noexcept { return pimpl_->data(); }
      method const_pointer (line 1602) | const_pointer data() const noexcept { return pimpl_ ? pimpl_->data()...
      method iterator (line 1608) | iterator begin() noexcept { return pimpl_->begin(); }
      method const_iterator (line 1609) | const_iterator begin() const noexcept { return pimpl_->begin(); }
      method const_iterator (line 1610) | const_iterator cbegin() const noexcept { return pimpl_->cbegin(); }
      method iterator (line 1619) | iterator end() noexcept { return pimpl_->end(); }
      method const_iterator (line 1620) | const_iterator end() const noexcept { return pimpl_->end(); }
      method const_iterator (line 1621) | const_iterator cend() const noexcept { return pimpl_->cend(); }
      method reverse_iterator (line 1631) | reverse_iterator rbegin() noexcept { return pimpl_->rbegin(); }
      method const_reverse_iterator (line 1632) | const_reverse_iterator rbegin() const noexcept { return pimpl_->rbeg...
      method const_reverse_iterator (line 1633) | const_reverse_iterator crbegin() const noexcept { return pimpl_->crb...
      method reverse_iterator (line 1642) | reverse_iterator rend() noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1643) | const_reverse_iterator rend() const noexcept { return pimpl_->rend(); }
      method const_reverse_iterator (line 1644) | const_reverse_iterator crend() const noexcept { return pimpl_->crend...
      method reference (line 1651) | reference operator[](const size_type i) noexcept { return (*pimpl_)[...
      method const_reference (line 1652) | const_reference operator[](const size_type i) const noexcept { retur...
      method map (line 1675) | void map(const String& path, const size_type offset,
      method map (line 1694) | void map(const String& path, std::error_code& error)
      method map (line 1718) | void map(const handle_type handle, const size_type offset,
      method map (line 1735) | void map(const handle_type handle, std::error_code& error)
      method unmap (line 1749) | void unmap() { if(pimpl_) pimpl_->unmap(); }
      method swap (line 1751) | void swap(basic_shared_mmap& other) { pimpl_.swap(other.pimpl_); }
      method sync (line 1757) | void sync(std::error_code& error) { if(pimpl_) pimpl_->sync(error); }
      method map_impl (line 1793) | void map_impl(const MappingToken& token, const size_type offset,
  type nonstd (line 2057) | namespace nonstd {
    function to_string (line 2060) | std::basic_string<CharT, Traits, Allocator>
    function to_string_view (line 2067) | std::basic_string_view<CharT, Traits>
    type literals (line 2083) | inline namespace literals {
      type string_view_literals (line 2084) | inline namespace string_view_literals {
    type sv_lite (line 2345) | namespace sv_lite {
      class basic_string_view (line 2352) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      class basic_string_view (line 2363) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      function nssv_constexpr (line 2857) | nssv_constexpr bool operator== (
      function nssv_constexpr (line 2863) | nssv_constexpr bool operator!= (
      function nssv_constexpr (line 2869) | nssv_constexpr bool operator< (
      function nssv_constexpr (line 2875) | nssv_constexpr bool operator<= (
      function nssv_constexpr (line 2881) | nssv_constexpr bool operator> (
      function nssv_constexpr (line 2887) | nssv_constexpr bool operator>= (
      class Traits (line 2909) | class Traits
      function nssv_constexpr (line 2910) | nssv_constexpr bool operator==(
      class Traits (line 2915) | class Traits
      function nssv_constexpr (line 2916) | nssv_constexpr bool operator==(
      class Traits (line 2923) | class Traits
      function nssv_constexpr (line 2924) | nssv_constexpr bool operator!= (
      class Traits (line 2929) | class Traits
      function nssv_constexpr (line 2930) | nssv_constexpr bool operator!= (
      class Traits (line 2937) | class Traits
      function nssv_constexpr (line 2938) | nssv_constexpr bool operator< (
      class Traits (line 2943) | class Traits
      function nssv_constexpr (line 2944) | nssv_constexpr bool operator< (
      class Traits (line 2951) | class Traits
      function nssv_constexpr (line 2952) | nssv_constexpr bool operator<= (
      class Traits (line 2957) | class Traits
      function nssv_constexpr (line 2958) | nssv_constexpr bool operator<= (
      class Traits (line 2965) | class Traits
      function nssv_constexpr (line 2966) | nssv_constexpr bool operator> (
      class Traits (line 2971) | class Traits
      function nssv_constexpr (line 2972) | nssv_constexpr bool operator> (
      class Traits (line 2979) | class Traits
      function nssv_constexpr (line 2980) | nssv_constexpr bool operator>= (
      class Traits (line 2985) | class Traits
      function nssv_constexpr (line 2986) | nssv_constexpr bool operator>= (
      type detail (line 2998) | namespace detail {
        function write_padding (line 3001) | void write_padding( Stream & os, std::streamsize n )
        function Stream (line 3008) | Stream & write_to_stream( Stream & os, View const & sv )
      function to_string (line 3134) | std::basic_string<CharT, Traits, Allocator>
      function to_string (line 3143) | std::basic_string<CharT, Traits>
      function to_string (line 3150) | std::basic_string<CharT, Traits, Allocator>
      function to_string_view (line 3159) | basic_string_view<CharT, Traits>
    function nssv_inline_ns (line 3065) | nssv_inline_ns namespace literals {
    type sv_lite (line 3127) | namespace sv_lite {
      class basic_string_view (line 2352) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      class basic_string_view (line 2363) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      function nssv_constexpr (line 2857) | nssv_constexpr bool operator== (
      function nssv_constexpr (line 2863) | nssv_constexpr bool operator!= (
      function nssv_constexpr (line 2869) | nssv_constexpr bool operator< (
      function nssv_constexpr (line 2875) | nssv_constexpr bool operator<= (
      function nssv_constexpr (line 2881) | nssv_constexpr bool operator> (
      function nssv_constexpr (line 2887) | nssv_constexpr bool operator>= (
      class Traits (line 2909) | class Traits
      function nssv_constexpr (line 2910) | nssv_constexpr bool operator==(
      class Traits (line 2915) | class Traits
      function nssv_constexpr (line 2916) | nssv_constexpr bool operator==(
      class Traits (line 2923) | class Traits
      function nssv_constexpr (line 2924) | nssv_constexpr bool operator!= (
      class Traits (line 2929) | class Traits
      function nssv_constexpr (line 2930) | nssv_constexpr bool operator!= (
      class Traits (line 2937) | class Traits
      function nssv_constexpr (line 2938) | nssv_constexpr bool operator< (
      class Traits (line 2943) | class Traits
      function nssv_constexpr (line 2944) | nssv_constexpr bool operator< (
      class Traits (line 2951) | class Traits
      function nssv_constexpr (line 2952) | nssv_constexpr bool operator<= (
      class Traits (line 2957) | class Traits
      function nssv_constexpr (line 2958) | nssv_constexpr bool operator<= (
      class Traits (line 2965) | class Traits
      function nssv_constexpr (line 2966) | nssv_constexpr bool operator> (
      class Traits (line 2971) | class Traits
      function nssv_constexpr (line 2972) | nssv_constexpr bool operator> (
      class Traits (line 2979) | class Traits
      function nssv_constexpr (line 2980) | nssv_constexpr bool operator>= (
      class Traits (line 2985) | class Traits
      function nssv_constexpr (line 2986) | nssv_constexpr bool operator>= (
      type detail (line 2998) | namespace detail {
        function write_padding (line 3001) | void write_padding( Stream & os, std::streamsize n )
        function Stream (line 3008) | Stream & write_to_stream( Stream & os, View const & sv )
      function to_string (line 3134) | std::basic_string<CharT, Traits, Allocator>
      function to_string (line 3143) | std::basic_string<CharT, Traits>
      function to_string (line 3150) | std::basic_string<CharT, Traits, Allocator>
      function to_string_view (line 3159) | basic_string_view<CharT, Traits>
  type nonstd (line 2115) | namespace nonstd {
    function to_string (line 2060) | std::basic_string<CharT, Traits, Allocator>
    function to_string_view (line 2067) | std::basic_string_view<CharT, Traits>
    type literals (line 2083) | inline namespace literals {
      type string_view_literals (line 2084) | inline namespace string_view_literals {
    type sv_lite (line 2345) | namespace sv_lite {
      class basic_string_view (line 2352) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      class basic_string_view (line 2363) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      function nssv_constexpr (line 2857) | nssv_constexpr bool operator== (
      function nssv_constexpr (line 2863) | nssv_constexpr bool operator!= (
      function nssv_constexpr (line 2869) | nssv_constexpr bool operator< (
      function nssv_constexpr (line 2875) | nssv_constexpr bool operator<= (
      function nssv_constexpr (line 2881) | nssv_constexpr bool operator> (
      function nssv_constexpr (line 2887) | nssv_constexpr bool operator>= (
      class Traits (line 2909) | class Traits
      function nssv_constexpr (line 2910) | nssv_constexpr bool operator==(
      class Traits (line 2915) | class Traits
      function nssv_constexpr (line 2916) | nssv_constexpr bool operator==(
      class Traits (line 2923) | class Traits
      function nssv_constexpr (line 2924) | nssv_constexpr bool operator!= (
      class Traits (line 2929) | class Traits
      function nssv_constexpr (line 2930) | nssv_constexpr bool operator!= (
      class Traits (line 2937) | class Traits
      function nssv_constexpr (line 2938) | nssv_constexpr bool operator< (
      class Traits (line 2943) | class Traits
      function nssv_constexpr (line 2944) | nssv_constexpr bool operator< (
      class Traits (line 2951) | class Traits
      function nssv_constexpr (line 2952) | nssv_constexpr bool operator<= (
      class Traits (line 2957) | class Traits
      function nssv_constexpr (line 2958) | nssv_constexpr bool operator<= (
      class Traits (line 2965) | class Traits
      function nssv_constexpr (line 2966) | nssv_constexpr bool operator> (
      class Traits (line 2971) | class Traits
      function nssv_constexpr (line 2972) | nssv_constexpr bool operator> (
      class Traits (line 2979) | class Traits
      function nssv_constexpr (line 2980) | nssv_constexpr bool operator>= (
      class Traits (line 2985) | class Traits
      function nssv_constexpr (line 2986) | nssv_constexpr bool operator>= (
      type detail (line 2998) | namespace detail {
        function write_padding (line 3001) | void write_padding( Stream & os, std::streamsize n )
        function Stream (line 3008) | Stream & write_to_stream( Stream & os, View const & sv )
      function to_string (line 3134) | std::basic_string<CharT, Traits, Allocator>
      function to_string (line 3143) | std::basic_string<CharT, Traits>
      function to_string (line 3150) | std::basic_string<CharT, Traits, Allocator>
      function to_string_view (line 3159) | basic_string_view<CharT, Traits>
    function nssv_inline_ns (line 3065) | nssv_inline_ns namespace literals {
    type sv_lite (line 3127) | namespace sv_lite {
      class basic_string_view (line 2352) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      class basic_string_view (line 2363) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      function nssv_constexpr (line 2857) | nssv_constexpr bool operator== (
      function nssv_constexpr (line 2863) | nssv_constexpr bool operator!= (
      function nssv_constexpr (line 2869) | nssv_constexpr bool operator< (
      function nssv_constexpr (line 2875) | nssv_constexpr bool operator<= (
      function nssv_constexpr (line 2881) | nssv_constexpr bool operator> (
      function nssv_constexpr (line 2887) | nssv_constexpr bool operator>= (
      class Traits (line 2909) | class Traits
      function nssv_constexpr (line 2910) | nssv_constexpr bool operator==(
      class Traits (line 2915) | class Traits
      function nssv_constexpr (line 2916) | nssv_constexpr bool operator==(
      class Traits (line 2923) | class Traits
      function nssv_constexpr (line 2924) | nssv_constexpr bool operator!= (
      class Traits (line 2929) | class Traits
      function nssv_constexpr (line 2930) | nssv_constexpr bool operator!= (
      class Traits (line 2937) | class Traits
      function nssv_constexpr (line 2938) | nssv_constexpr bool operator< (
      class Traits (line 2943) | class Traits
      function nssv_constexpr (line 2944) | nssv_constexpr bool operator< (
      class Traits (line 2951) | class Traits
      function nssv_constexpr (line 2952) | nssv_constexpr bool operator<= (
      class Traits (line 2957) | class Traits
      function nssv_constexpr (line 2958) | nssv_constexpr bool operator<= (
      class Traits (line 2965) | class Traits
      function nssv_constexpr (line 2966) | nssv_constexpr bool operator> (
      class Traits (line 2971) | class Traits
      function nssv_constexpr (line 2972) | nssv_constexpr bool operator> (
      class Traits (line 2979) | class Traits
      function nssv_constexpr (line 2980) | nssv_constexpr bool operator>= (
      class Traits (line 2985) | class Traits
      function nssv_constexpr (line 2986) | nssv_constexpr bool operator>= (
      type detail (line 2998) | namespace detail {
        function write_padding (line 3001) | void write_padding( Stream & os, std::streamsize n )
        function Stream (line 3008) | Stream & write_to_stream( Stream & os, View const & sv )
      function to_string (line 3134) | std::basic_string<CharT, Traits, Allocator>
      function to_string (line 3143) | std::basic_string<CharT, Traits>
      function to_string (line 3150) | std::basic_string<CharT, Traits, Allocator>
      function to_string_view (line 3159) | basic_string_view<CharT, Traits>
  type nonstd (line 2345) | namespace nonstd { namespace sv_lite {
    function to_string (line 2060) | std::basic_string<CharT, Traits, Allocator>
    function to_string_view (line 2067) | std::basic_string_view<CharT, Traits>
    type literals (line 2083) | inline namespace literals {
      type string_view_literals (line 2084) | inline namespace string_view_literals {
    type sv_lite (line 2345) | namespace sv_lite {
      class basic_string_view (line 2352) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      class basic_string_view (line 2363) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      function nssv_constexpr (line 2857) | nssv_constexpr bool operator== (
      function nssv_constexpr (line 2863) | nssv_constexpr bool operator!= (
      function nssv_constexpr (line 2869) | nssv_constexpr bool operator< (
      function nssv_constexpr (line 2875) | nssv_constexpr bool operator<= (
      function nssv_constexpr (line 2881) | nssv_constexpr bool operator> (
      function nssv_constexpr (line 2887) | nssv_constexpr bool operator>= (
      class Traits (line 2909) | class Traits
      function nssv_constexpr (line 2910) | nssv_constexpr bool operator==(
      class Traits (line 2915) | class Traits
      function nssv_constexpr (line 2916) | nssv_constexpr bool operator==(
      class Traits (line 2923) | class Traits
      function nssv_constexpr (line 2924) | nssv_constexpr bool operator!= (
      class Traits (line 2929) | class Traits
      function nssv_constexpr (line 2930) | nssv_constexpr bool operator!= (
      class Traits (line 2937) | class Traits
      function nssv_constexpr (line 2938) | nssv_constexpr bool operator< (
      class Traits (line 2943) | class Traits
      function nssv_constexpr (line 2944) | nssv_constexpr bool operator< (
      class Traits (line 2951) | class Traits
      function nssv_constexpr (line 2952) | nssv_constexpr bool operator<= (
      class Traits (line 2957) | class Traits
      function nssv_constexpr (line 2958) | nssv_constexpr bool operator<= (
      class Traits (line 2965) | class Traits
      function nssv_constexpr (line 2966) | nssv_constexpr bool operator> (
      class Traits (line 2971) | class Traits
      function nssv_constexpr (line 2972) | nssv_constexpr bool operator> (
      class Traits (line 2979) | class Traits
      function nssv_constexpr (line 2980) | nssv_constexpr bool operator>= (
      class Traits (line 2985) | class Traits
      function nssv_constexpr (line 2986) | nssv_constexpr bool operator>= (
      type detail (line 2998) | namespace detail {
        function write_padding (line 3001) | void write_padding( Stream & os, std::streamsize n )
        function Stream (line 3008) | Stream & write_to_stream( Stream & os, View const & sv )
      function to_string (line 3134) | std::basic_string<CharT, Traits, Allocator>
      function to_string (line 3143) | std::basic_string<CharT, Traits>
      function to_string (line 3150) | std::basic_string<CharT, Traits, Allocator>
      function to_string_view (line 3159) | basic_string_view<CharT, Traits>
    function nssv_inline_ns (line 3065) | nssv_inline_ns namespace literals {
    type sv_lite (line 3127) | namespace sv_lite {
      class basic_string_view (line 2352) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | nssv_constexpr14 size_type find( basic_string_view v, size_type po...
        method nssv_constexpr14 (line 2609) | nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) cons...
        method nssv_constexpr14 (line 2614) | nssv_constexpr14 size_type find( CharT const * s, size_type pos, s...
        method nssv_constexpr14 (line 2619) | nssv_constexpr14 size_type find( CharT const * s, size_type pos = ...
        method nssv_constexpr14 (line 2626) | nssv_constexpr14 size_type rfind( basic_string_view v, size_type p...
        method nssv_constexpr14 (line 2640) | nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) ...
        method nssv_constexpr14 (line 2645) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, ...
        method nssv_constexpr14 (line 2650) | nssv_constexpr14 size_type rfind( CharT const * s, size_type pos =...
        method nssv_constexpr (line 2657) | nssv_constexpr size_type find_first_of( basic_string_view v, size_...
        method nssv_constexpr (line 2664) | nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0...
        method nssv_constexpr (line 2669) | nssv_constexpr size_type find_first_of( CharT const * s, size_type...
        method nssv_constexpr (line 2674) | nssv_constexpr size_type find_first_of(  CharT const * s, size_typ...
        method nssv_constexpr (line 2681) | nssv_constexpr size_type find_last_of( basic_string_view v, size_t...
        method nssv_constexpr (line 2690) | nssv_constexpr size_type find_last_of( CharT c, size_type pos = np...
        method nssv_constexpr (line 2695) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2700) | nssv_constexpr size_type find_last_of( CharT const * s, size_type ...
        method nssv_constexpr (line 2707) | nssv_constexpr size_type find_first_not_of( basic_string_view v, s...
        method nssv_constexpr (line 2714) | nssv_constexpr size_type find_first_not_of( CharT c, size_type pos...
        method nssv_constexpr (line 2719) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2724) | nssv_constexpr size_type find_first_not_of( CharT const * s, size_...
        method nssv_constexpr (line 2731) | nssv_constexpr size_type find_last_not_of( basic_string_view v, si...
        method nssv_constexpr (line 2740) | nssv_constexpr size_type find_last_not_of( CharT c, size_type pos ...
        method nssv_constexpr (line 2745) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        method nssv_constexpr (line 2750) | nssv_constexpr size_type find_last_not_of( CharT const * s, size_t...
        type size_type (line 2760) | enum : size_type { npos = size_type(-1) }
        type not_in_view (line 2766) | struct not_in_view
          method nssv_constexpr (line 2770) | nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {}
          method nssv_constexpr (line 2772) | nssv_constexpr bool operator()( CharT c ) const
        method nssv_constexpr (line 2778) | nssv_constexpr size_type to_pos( const_iterator it ) const
        method nssv_constexpr (line 2783) | nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
        method data_at (line 2788) | data_at( size_type pos ) const
        method basic_string_view (line 2805) | basic_string_view( std::basic_string<CharT, Traits, Allocator> con...
        method to_string (line 2823) | std::basic_string<CharT, Traits, Allocator>
        method to_string (line 2831) | std::basic_string<CharT, Traits>
        method to_string (line 2838) | std::basic_string<CharT, Traits, Allocator>
      class basic_string_view (line 2363) | class basic_string_view
        method nssv_constexpr (line 2392) | nssv_constexpr basic_string_view( basic_string_view const & other ...
        method begin (line 2425) | begin()  const nssv_noexcept { return data_;         }
        method end (line 2426) | end()    const nssv_noexcept { return data_ + size_; }
        method cbegin (line 2428) | cbegin() const nssv_noexcept { return begin(); }
        method cend (line 2429) | cend()   const nssv_noexcept { return end();   }
        method rbegin (line 2431) | rbegin()  const nssv_noexcept { return const_reverse_iterator( end...
        method rend (line 2432) | rend()    const nssv_noexcept { return const_reverse_iterator( beg...
        method crbegin (line 2434) | crbegin() const nssv_noexcept { return rbegin(); }
        method crend (line 2435) | crend()   const nssv_noexcept { return rend();   }
        method nssv_constexpr (line 2439) | nssv_constexpr size_type size()     const nssv_noexcept { return s...
        method nssv_constexpr (line 2440) | nssv_constexpr size_type length()   const nssv_noexcept { return s...
        method nssv_constexpr (line 2441) | nssv_constexpr size_type max_size() const nssv_noexcept { return (...
        method empty (line 2444) | bool empty() const nssv_noexcept
        method at (line 2456) | at( size_type pos ) const
        method front (line 2469) | front() const { return data_at( 0 );          }
        method back (line 2470) | back()  const { return data_at( size() - 1 ); }
        method data (line 2472) | data()  const nssv_noexcept { return data_; }
        method nssv_constexpr14 (line 2476) | nssv_constexpr14 void remove_prefix( size_type n )
        method nssv_constexpr14 (line 2483) | nssv_constexpr14 void remove_suffix( size_type n )
        method nssv_constexpr14 (line 2489) | nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
        method size_type (line 2498) | size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
        method substr (line 2515) | substr( size_type pos = 0, size_type n = npos ) const
        method nssv_constexpr14 (line 2530) | nssv_constexpr14 int compare( basic_string_view other ) const nssv...
        method nssv_constexpr (line 2538) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2543) | nssv_constexpr int compare( size_type pos1, size_type n1, basic_st...
        method nssv_constexpr (line 2548) | nssv_constexpr int compare( CharT const * s ) const // (4)
        method nssv_constexpr (line 2553) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2558) | nssv_constexpr int compare( size_type pos1, size_type n1, CharT co...
        method nssv_constexpr (line 2567) | nssv_constexpr bool starts_with( basic_string_view v ) const nssv_...
        method nssv_constexpr (line 2572) | nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept  //...
        method nssv_constexpr (line 2577) | nssv_constexpr bool starts_with( CharT const * s ) const  // (3)
        method nssv_constexpr (line 2584) | nssv_constexpr bool ends_with( basic_string_view v ) const nssv_no...
        method nssv_constexpr (line 2589) | nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept  // (2)
        method nssv_constexpr (line 2594) | nssv_constexpr bool ends_with( CharT const * s ) const  // (3)
        method nssv_constexpr14 (line 2601) | ns
Copy disabled (too large) Download .json
Condensed preview — 569 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (11,469K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/01-Bug Report.yml",
    "chars": 2058,
    "preview": "name: Bug Report\ndescription: File a bug report\nlabels: [\"bug\", \"triage\"]\nbody:\n  - type: markdown\n    attributes:\n     "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/02-Feature Request.yml",
    "chars": 663,
    "preview": "name: Feature Request\ndescription: Request a new feature or enhancement for QLog\nlabels: [\"enhancement\"]\nbody:\n  - type:"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 323,
    "preview": "blank_issues_enabled: false\ncontact_links:\n- name: \"📖 Find documentation\"\n  url: https://github.com/foldynl/QLog/wiki\n  "
  },
  {
    "path": ".github/workflows/c-cpp.yml",
    "chars": 5617,
    "preview": "name: CI Linux/macOS\n\non:\n  push:\n    branches:\n      - 'testing_*'\n  pull_request:\n    branches:\n      - 'testing_*'\n  "
  },
  {
    "path": ".github/workflows/macOSBuild.yml",
    "chars": 2698,
    "preview": "name: macOS deployment\n\n#on: [push, pull_request]\n\non:\n  workflow_dispatch:\n  push:\n     branches:\n       - master\n\njobs"
  },
  {
    "path": ".gitignore",
    "chars": 607,
    "preview": "# C++ objects and libs\n*.slo\n*.lo\n*.o\n*.a\n*.la\n*.lai\n*.so\n*.dll\n*.dylib\n\n*.patch\n\n# Qt-es\nobject_script.*.Release\nobject"
  },
  {
    "path": ".gitmodules",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "AUTHORS",
    "chars": 391,
    "preview": "MAINTAINERS:\n   Ladislav Foldyna OK1MLG <foldyna@gmail.com>\n\nPAST MAINTAINERS:\n   Thomas Gatzweiler DL2IC <mail@thomasga"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 4715,
    "preview": "## How Can I Contribute?\n\n### Reporting Bugs\n*Please* contact me via the repository's Discussion page or email (you can "
  },
  {
    "path": "Changelog",
    "chars": 45722,
    "preview": "2026/04/26 - 0.50.0\n- [NEW] - Added Split detection\n- [NEW] - Added Developer and Support tools (PR #991 @aa5sh @foldynl"
  },
  {
    "path": "LICENSE",
    "chars": 62775,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "QLog.pro",
    "chars": 20396,
    "preview": "#-------------------------------------------------\n#\n# Project created by QtCreator 2019-06-10T09:13:09\n#\n#-------------"
  },
  {
    "path": "README.md",
    "chars": 12544,
    "preview": "# QLog\n\nQLog is an Amateur Radio logging application for Linux, Windows. It\nis based on the Qt framework and uses SQLite"
  },
  {
    "path": "awards/AwardDXCC.cpp",
    "chars": 1216,
    "preview": "#include <QCoreApplication>\n#include \"AwardDXCC.h\"\n\nQString AwardDXCC::displayName() const\n{\n    return QCoreApplication"
  },
  {
    "path": "awards/AwardDXCC.h",
    "chars": 643,
    "preview": "#ifndef QLOG_AWARDS_AWARDDXCC_H\n#define QLOG_AWARDS_AWARDDXCC_H\n\n#include \"BandTableAward.h\"\n\nclass AwardDXCC : public B"
  },
  {
    "path": "awards/AwardDefinition.cpp",
    "chars": 302,
    "preview": "#include \"AwardDefinition.h\"\n\nbool AwardDefinition::entityInputEnabled() const\n{\n    return true;\n}\n\nbool AwardDefinitio"
  },
  {
    "path": "awards/AwardDefinition.h",
    "chars": 3004,
    "preview": "#ifndef QLOG_AWARDS_AWARDDEFINITION_H\n#define QLOG_AWARDS_AWARDDEFINITION_H\n\n#include <QString>\n#include <QStringList>\n#"
  },
  {
    "path": "awards/AwardGridsquare.cpp",
    "chars": 1298,
    "preview": "#include <QCoreApplication>\n#include \"AwardGridsquare.h\"\n\nAwardGridsquare::AwardGridsquare(int chars)\n    : m_chars(char"
  },
  {
    "path": "awards/AwardGridsquare.h",
    "chars": 715,
    "preview": "#ifndef QLOG_AWARDS_AWARDGRIDSQUARE_H\n#define QLOG_AWARDS_AWARDGRIDSQUARE_H\n\n#include \"BandTableAward.h\"\n\nclass AwardGri"
  },
  {
    "path": "awards/AwardIOTA.cpp",
    "chars": 708,
    "preview": "#include <QCoreApplication>\n#include \"AwardIOTA.h\"\n\nQString AwardIOTA::displayName() const\n{\n    return QCoreApplication"
  },
  {
    "path": "awards/AwardIOTA.h",
    "chars": 656,
    "preview": "#ifndef QLOG_AWARDS_AWARDIOTA_H\n#define QLOG_AWARDS_AWARDIOTA_H\n\n#include \"BandTableAward.h\"\n\nclass AwardIOTA : public B"
  },
  {
    "path": "awards/AwardITU.cpp",
    "chars": 881,
    "preview": "#include <QCoreApplication>\n#include \"AwardITU.h\"\n\nQString AwardITU::displayName() const\n{\n    return QCoreApplication::"
  },
  {
    "path": "awards/AwardITU.h",
    "chars": 690,
    "preview": "#ifndef QLOG_AWARDS_AWARDITU_H\n#define QLOG_AWARDS_AWARDITU_H\n\n#include \"BandTableAward.h\"\n\nclass AwardITU : public Band"
  },
  {
    "path": "awards/AwardJapan.cpp",
    "chars": 290,
    "preview": "#include <QCoreApplication>\n#include \"AwardJapan.h\"\n\nAwardJapan::AwardJapan()\n    : SecondarySubdivisionAward(QStringLit"
  },
  {
    "path": "awards/AwardJapan.h",
    "chars": 268,
    "preview": "#ifndef QLOG_AWARDS_AWARDJAPAN_H\n#define QLOG_AWARDS_AWARDJAPAN_H\n\n#include \"SecondarySubdivisionAward.h\"\n\nclass AwardJa"
  },
  {
    "path": "awards/AwardNZ.cpp",
    "chars": 263,
    "preview": "#include <QCoreApplication>\n#include \"AwardNZ.h\"\n\nAwardNZ::AwardNZ()\n    : SecondarySubdivisionAward(QStringLiteral(\"nz\""
  },
  {
    "path": "awards/AwardNZ.h",
    "chars": 253,
    "preview": "#ifndef QLOG_AWARDS_AWARDNZ_H\n#define QLOG_AWARDS_AWARDNZ_H\n\n#include \"SecondarySubdivisionAward.h\"\n\nclass AwardNZ : pub"
  },
  {
    "path": "awards/AwardPOTAActivator.cpp",
    "chars": 1335,
    "preview": "#include <QCoreApplication>\n#include \"AwardPOTAActivator.h\"\n\nQString AwardPOTAActivator::displayName() const\n{\n    retur"
  },
  {
    "path": "awards/AwardPOTAActivator.h",
    "chars": 937,
    "preview": "#ifndef QLOG_AWARDS_AWARDPOTAACTIVATOR_H\n#define QLOG_AWARDS_AWARDPOTAACTIVATOR_H\n\n#include \"BandTableAward.h\"\n\nclass Aw"
  },
  {
    "path": "awards/AwardPOTAHunter.cpp",
    "chars": 1167,
    "preview": "#include <QCoreApplication>\n#include \"AwardPOTAHunter.h\"\n\nQString AwardPOTAHunter::displayName() const\n{\n    return QCor"
  },
  {
    "path": "awards/AwardPOTAHunter.h",
    "chars": 925,
    "preview": "#ifndef QLOG_AWARDS_AWARDPOTAHUNTER_H\n#define QLOG_AWARDS_AWARDPOTAHUNTER_H\n\n#include \"BandTableAward.h\"\n\nclass AwardPOT"
  },
  {
    "path": "awards/AwardRDA.cpp",
    "chars": 291,
    "preview": "#include <QCoreApplication>\n#include \"AwardRDA.h\"\n\nAwardRDA::AwardRDA()\n    : SecondarySubdivisionAward(QStringLiteral(\""
  },
  {
    "path": "awards/AwardRDA.h",
    "chars": 258,
    "preview": "#ifndef QLOG_AWARDS_AWARDRDA_H\n#define QLOG_AWARDS_AWARDRDA_H\n\n#include \"SecondarySubdivisionAward.h\"\n\nclass AwardRDA : "
  },
  {
    "path": "awards/AwardSOTA.cpp",
    "chars": 739,
    "preview": "#include <QCoreApplication>\n#include \"AwardSOTA.h\"\n\nQString AwardSOTA::displayName() const\n{\n    return QCoreApplication"
  },
  {
    "path": "awards/AwardSOTA.h",
    "chars": 719,
    "preview": "#ifndef QLOG_AWARDS_AWARDSOTA_H\n#define QLOG_AWARDS_AWARDSOTA_H\n\n#include \"BandTableAward.h\"\n\nclass AwardSOTA : public B"
  },
  {
    "path": "awards/AwardSpanishDME.cpp",
    "chars": 316,
    "preview": "#include <QCoreApplication>\n#include \"AwardSpanishDME.h\"\n\nAwardSpanishDME::AwardSpanishDME()\n    : SecondarySubdivisionA"
  },
  {
    "path": "awards/AwardSpanishDME.h",
    "chars": 293,
    "preview": "#ifndef QLOG_AWARDS_AWARDSPANISHDME_H\n#define QLOG_AWARDS_AWARDSPANISHDME_H\n\n#include \"SecondarySubdivisionAward.h\"\n\ncla"
  },
  {
    "path": "awards/AwardUKD.cpp",
    "chars": 276,
    "preview": "#include <QCoreApplication>\n#include \"AwardUKD.h\"\n\nAwardUKD::AwardUKD()\n    : SecondarySubdivisionAward(QStringLiteral(\""
  },
  {
    "path": "awards/AwardUKD.h",
    "chars": 258,
    "preview": "#ifndef QLOG_AWARDS_AWARDUKD_H\n#define QLOG_AWARDS_AWARDUKD_H\n\n#include \"SecondarySubdivisionAward.h\"\n\nclass AwardUKD : "
  },
  {
    "path": "awards/AwardUSCounty.cpp",
    "chars": 301,
    "preview": "#include <QCoreApplication>\n#include \"AwardUSCounty.h\"\n\nAwardUSCounty::AwardUSCounty()\n    : SecondarySubdivisionAward(Q"
  },
  {
    "path": "awards/AwardUSCounty.h",
    "chars": 283,
    "preview": "#ifndef QLOG_AWARDS_AWARDUSCOUNTY_H\n#define QLOG_AWARDS_AWARDUSCOUNTY_H\n\n#include \"SecondarySubdivisionAward.h\"\n\nclass A"
  },
  {
    "path": "awards/AwardWAC.cpp",
    "chars": 1656,
    "preview": "#include <QCoreApplication>\n#include \"AwardWAC.h\"\n\n\n/* https://www.arrl.org/wac */\n\nQString AwardWAC::displayName() cons"
  },
  {
    "path": "awards/AwardWAC.h",
    "chars": 690,
    "preview": "#ifndef QLOG_AWARDS_AWARDWAC_H\n#define QLOG_AWARDS_AWARDWAC_H\n\n#include \"BandTableAward.h\"\n\nclass AwardWAC : public Band"
  },
  {
    "path": "awards/AwardWAS.cpp",
    "chars": 881,
    "preview": "#include <QCoreApplication>\n#include \"AwardWAS.h\"\n\nQString AwardWAS::displayName() const\n{\n    return QCoreApplication::"
  },
  {
    "path": "awards/AwardWAS.h",
    "chars": 590,
    "preview": "#ifndef QLOG_AWARDS_AWARDWAS_H\n#define QLOG_AWARDS_AWARDWAS_H\n\n#include \"BandTableAward.h\"\n\nclass AwardWAS : public Band"
  },
  {
    "path": "awards/AwardWAZ.cpp",
    "chars": 878,
    "preview": "#include <QCoreApplication>\n#include \"AwardWAZ.h\"\n\nQString AwardWAZ::displayName() const\n{\n    return QCoreApplication::"
  },
  {
    "path": "awards/AwardWAZ.h",
    "chars": 690,
    "preview": "#ifndef QLOG_AWARDS_AWARDWAZ_H\n#define QLOG_AWARDS_AWARDWAZ_H\n\n#include \"BandTableAward.h\"\n\nclass AwardWAZ : public Band"
  },
  {
    "path": "awards/AwardWPX.cpp",
    "chars": 698,
    "preview": "#include <QCoreApplication>\n#include \"AwardWPX.h\"\n\nQString AwardWPX::displayName() const\n{\n    return QCoreApplication::"
  },
  {
    "path": "awards/AwardWPX.h",
    "chars": 651,
    "preview": "#ifndef QLOG_AWARDS_AWARDWPX_H\n#define QLOG_AWARDS_AWARDWPX_H\n\n#include \"BandTableAward.h\"\n\nclass AwardWPX : public Band"
  },
  {
    "path": "awards/AwardWWFF.cpp",
    "chars": 739,
    "preview": "#include <QCoreApplication>\n#include \"AwardWWFF.h\"\n\nQString AwardWWFF::displayName() const\n{\n    return QCoreApplication"
  },
  {
    "path": "awards/AwardWWFF.h",
    "chars": 719,
    "preview": "#ifndef QLOG_AWARDS_AWARDWWFF_H\n#define QLOG_AWARDS_AWARDWWFF_H\n\n#include \"BandTableAward.h\"\n\nclass AwardWWFF : public B"
  },
  {
    "path": "awards/BandTableAward.cpp",
    "chars": 13065,
    "preview": "#include <QHeaderView>\n#include \"BandTableAward.h\"\n#include \"core/debug.h\"\n#include \"data/Band.h\"\n#include \"data/BandPla"
  },
  {
    "path": "awards/BandTableAward.h",
    "chars": 11533,
    "preview": "#ifndef QLOG_AWARDS_BANDTABLEAWARD_H\n#define QLOG_AWARDS_BANDTABLEAWARD_H\n\n#include <QTableView>\n#include <QPair>\n#inclu"
  },
  {
    "path": "awards/SecondarySubdivisionAward.cpp",
    "chars": 1142,
    "preview": "#include \"SecondarySubdivisionAward.h\"\n\nSecondarySubdivisionAward::SecondarySubdivisionAward(const QString &key, const Q"
  },
  {
    "path": "awards/SecondarySubdivisionAward.h",
    "chars": 1086,
    "preview": "#ifndef QLOG_AWARDS_SECONDARYSUBDIVISIONAWARD_H\n#define QLOG_AWARDS_SECONDARYSUBDIVISIONAWARD_H\n\n#include \"BandTableAwar"
  },
  {
    "path": "core/AlertEvaluator.cpp",
    "chars": 14202,
    "preview": "#include <QSqlQuery>\n#include <QSqlError>\n#include <QSqlRecord>\n\n#include \"AlertEvaluator.h\"\n#include \"debug.h\"\n#include"
  },
  {
    "path": "core/AlertEvaluator.h",
    "chars": 1467,
    "preview": "#ifndef QLOG_CORE_ALERTEVALUATOR_H\n#define QLOG_CORE_ALERTEVALUATOR_H\n\n#include <QObject>\n#include \"data/DxSpot.h\"\n#incl"
  },
  {
    "path": "core/AppGuard.cpp",
    "chars": 2675,
    "preview": "#include <QCryptographicHash>\n#include <QLoggingCategory>\n#if QT_VERSION >= QT_VERSION_CHECK(6,6,0)\n#include <QNativeIpc"
  },
  {
    "path": "core/AppGuard.h",
    "chars": 525,
    "preview": "#ifndef QLOG_CORE_APPGUARD_H\n#define QLOG_CORE_APPGUARD_H\n\n#include <QObject>\n#include <QSharedMemory>\n#include <QSystem"
  },
  {
    "path": "core/CallbookManager.cpp",
    "chars": 6798,
    "preview": "#include <QCache>\n#include \"CallbookManager.h\"\n#include \"core/debug.h\"\n#include \"service/hamqth/HamQTH.h\"\n#include \"serv"
  },
  {
    "path": "core/CallbookManager.h",
    "chars": 1142,
    "preview": "#ifndef QLOG_CORE_CALLBOOKMANAGER_H\n#define QLOG_CORE_CALLBOOKMANAGER_H\n\n#include <QObject>\n#include <QPointer>\n#include"
  },
  {
    "path": "core/CredentialStore.cpp",
    "chars": 9525,
    "preview": "#include <QEventLoop>\n#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))\n#include <qt5keychain/keychain.h>\n#else\n#include <qt6"
  },
  {
    "path": "core/CredentialStore.h",
    "chars": 4689,
    "preview": "#ifndef QLOG_CORE_CREDENTIALSTORE_H\n#define QLOG_CORE_CREDENTIALSTORE_H\n\n#include <QObject>\n#include <QString>\n\n// - Cen"
  },
  {
    "path": "core/EmergencyFrequency.cpp",
    "chars": 1174,
    "preview": "#include \"EmergencyFrequency.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.core.emergencyfrequency\");\n\ndouble "
  },
  {
    "path": "core/EmergencyFrequency.h",
    "chars": 492,
    "preview": "#ifndef QLOG_CORE_EMERGENCYFREQUENCY_H\n#define QLOG_CORE_EMERGENCYFREQUENCY_H\n\n#include <QString>\n\nstruct EmergencyFreqE"
  },
  {
    "path": "core/FileCompressor.cpp",
    "chars": 8971,
    "preview": "#include <QFile>\n#include <QFileInfo>\n#include <QProgressDialog>\n#include <QCoreApplication>\n#include <zlib.h>\n#include "
  },
  {
    "path": "core/FileCompressor.h",
    "chars": 1336,
    "preview": "#ifndef QLOG_CORE_FILECOMPRESSOR_H\n#define QLOG_CORE_FILECOMPRESSOR_H\n\n#include <QString>\n#include <QByteArray>\n#include"
  },
  {
    "path": "core/FldigiTCPServer.cpp",
    "chars": 4497,
    "preview": "#include <QTcpSocket>\n#include <QtXml>\n#include <QtDebug>\n#include <QSqlTableModel>\n#include <QSqlRecord>\n\n#include \"Fld"
  },
  {
    "path": "core/FldigiTCPServer.h",
    "chars": 639,
    "preview": "#ifndef QLOG_CORE_FLDIGI_H\n#define QLOG_CORE_FLDIGI_H\n\n#include <QTcpServer>\n#include <QSqlRecord>\n\nclass QXmlStreamRead"
  },
  {
    "path": "core/LOVDownloader.cpp",
    "chars": 36516,
    "preview": "#include <QStandardPaths>\n#include <QDir>\n#include <QSqlQuery>\n#include <QTimer>\n#include <QNetworkReply>\n#include <QSql"
  },
  {
    "path": "core/LOVDownloader.h",
    "chars": 6373,
    "preview": "#ifndef QLOG_CORE_LOVDOWNLOADER_H\n#define QLOG_CORE_LOVDOWNLOADER_H\n\n#include <QObject>\n#include <QNetworkAccessManager>"
  },
  {
    "path": "core/LogDatabase.cpp",
    "chars": 13836,
    "preview": "#include <QSqlDatabase>\n#include <QSqlDriver>\n#include <sqlite3.h>\n#include <QSqlError>\n#include <QSqlQuery>\n#include <Q"
  },
  {
    "path": "core/LogDatabase.h",
    "chars": 1689,
    "preview": "#ifndef QLOG_CORE_LOGDATABASE_H\n#define QLOG_CORE_LOGDATABASE_H\n\n#include <QString>\n#include <QDir>\n\nstruct DatabaseInfo"
  },
  {
    "path": "core/LogLocale.cpp",
    "chars": 3300,
    "preview": "#include \"LogLocale.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.core.loglocale\");\n\nLogLocale::LogLocale() :\n"
  },
  {
    "path": "core/LogLocale.h",
    "chars": 1050,
    "preview": "#ifndef QLOG_CORE_LOGLOCALE_H\n#define QLOG_CORE_LOGLOCALE_H\n\n#include <QSettings>\n#include <QLocale>\n#include <QRegularE"
  },
  {
    "path": "core/LogParam.cpp",
    "chars": 42911,
    "preview": "#include <QSqlQuery>\n#include <QCache>\n#include <QSqlError>\n\n#include \"LogParam.h\"\n#include \"debug.h\"\n#include \"data/Dat"
  },
  {
    "path": "core/LogParam.h",
    "chars": 19404,
    "preview": "#ifndef QLOG_CORE_LOGPARAM_H\n#define QLOG_CORE_LOGPARAM_H\n\n#include <QObject>\n#include <QDate>\n#include <QVariant>\n#incl"
  },
  {
    "path": "core/MembershipQE.cpp",
    "chars": 23580,
    "preview": "#include <QSqlDatabase>\n#include <QDir>\n#include <QStandardPaths>\n#include <QSqlQuery>\n#include <QSqlError>\n#include <QN"
  },
  {
    "path": "core/MembershipQE.h",
    "chars": 3888,
    "preview": "#ifndef QLOG_CORE_MEMBERSHIPQE_H\n#define QLOG_CORE_MEMBERSHIPQE_H\n\n#include <QObject>\n#include <QDate>\n#include <QThread"
  },
  {
    "path": "core/Migration.cpp",
    "chars": 51434,
    "preview": "#include <QProgressDialog>\n#include <QMessageBox>\n#include <QtSql>\n#include <QDebug>\n#include <QUuid>\n#include \"core/Mig"
  },
  {
    "path": "core/Migration.h",
    "chars": 1572,
    "preview": "#ifndef QLOG_CORE_MIGRATION_H\n#define QLOG_CORE_MIGRATION_H\n\n#include \"core/LOVDownloader.h\"\n\nclass QProgressDialog;\n\ncl"
  },
  {
    "path": "core/NetworkNotification.cpp",
    "chars": 21526,
    "preview": "#include <QUuid>\n\n#include \"NetworkNotification.h\"\n#include \"debug.h\"\n#include \"LogParam.h\"\n\nMODULE_IDENTIFICATION(\"qlog"
  },
  {
    "path": "core/NetworkNotification.h",
    "chars": 4138,
    "preview": "#ifndef QLOG_CORE_NETWORKNOTIFICATION_H\n#define QLOG_CORE_NETWORKNOTIFICATION_H\n\n#include <QObject>\n#include <QSqlRecord"
  },
  {
    "path": "core/PasswordCipher.cpp",
    "chars": 9795,
    "preview": "#include <QDataStream>\n#include <QIODevice>\n#include <QLoggingCategory>\n\n#include <openssl/evp.h>\n#include <openssl/rand"
  },
  {
    "path": "core/PasswordCipher.h",
    "chars": 1983,
    "preview": "#ifndef PASSWORDCIPHER_H\n#define PASSWORDCIPHER_H\n\n#include <QtCore/QByteArray>\n#include <QtCore/QString>\n\n/*\n  Blob lay"
  },
  {
    "path": "core/PlatformParameterManager.cpp",
    "chars": 14259,
    "preview": "#include <QSqlDatabase>\n#include <QSqlQuery>\n#include <QSqlError>\n#include <QJsonDocument>\n#include <QJsonArray>\n#includ"
  },
  {
    "path": "core/PlatformParameterManager.h",
    "chars": 3360,
    "preview": "#ifndef QLOG_CORE_PLATFORMPARAMETERMANAGER_H\n#define QLOG_CORE_PLATFORMPARAMETERMANAGER_H\n\n#include <QString>\n#include <"
  },
  {
    "path": "core/PotaQE.cpp",
    "chars": 1939,
    "preview": "#include <QJsonParseError>\n#include <QJsonArray>\n#include <QtNumeric>\n\n#include \"core/debug.h\"\n#include \"PotaQE.h\"\n\nMODU"
  },
  {
    "path": "core/PotaQE.h",
    "chars": 831,
    "preview": "#ifndef QLOG_CORE_POTAQE_H\n#define QLOG_CORE_POTAQE_H\n\n#include <QObject>\n#include <QTimer>\n#include <QThread>\n\n#include"
  },
  {
    "path": "core/PropConditions.cpp",
    "chars": 13721,
    "preview": "#include <QNetworkAccessManager>\n#include <QUrl>\n#include <QNetworkRequest>\n#include <QNetworkReply>\n#include <QTimer>\n#"
  },
  {
    "path": "core/PropConditions.h",
    "chars": 2741,
    "preview": "#ifndef QLOG_CORE_PROPCONDITIONS_H\n#define QLOG_CORE_PROPCONDITIONS_H\n\n#include <QObject>\n#include <QDateTime>\n#include "
  },
  {
    "path": "core/QSLPrintLabelRenderer.cpp",
    "chars": 15875,
    "preview": "#include <QPainter>\n#include <QPrinter>\n#include <QFontDatabase>\n#include <QFontMetricsF>\n#include <QPageSize>\n\n#include"
  },
  {
    "path": "core/QSLPrintLabelRenderer.h",
    "chars": 2750,
    "preview": "#ifndef QLOG_CORE_QSLPRINTLABELRENDERER_H\n#define QLOG_CORE_QSLPRINTLABELRENDERER_H\n\n#include <QString>\n#include <QList>"
  },
  {
    "path": "core/QSLStorage.cpp",
    "chars": 14328,
    "preview": "#include <algorithm>\n#include <QDir>\n#include <QSet>\n#include <QSqlQuery>\n#include <QSqlError>\n\n#include \"QSLStorage.h\"\n"
  },
  {
    "path": "core/QSLStorage.h",
    "chars": 3781,
    "preview": "#ifndef QLOG_CORE_QSLSTORAGE_H\n#define QLOG_CORE_QSLSTORAGE_H\n\n#include <QObject>\n#include <QSqlRecord>\n#include <QVaria"
  },
  {
    "path": "core/QSOFilterManager.cpp",
    "chars": 10002,
    "preview": "#include <QSqlError>\n#include <QSqlRecord>\n#include \"QSOFilterManager.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION("
  },
  {
    "path": "core/QSOFilterManager.h",
    "chars": 2768,
    "preview": "#ifndef QSOFILTERMANAGER_H\n#define QSOFILTERMANAGER_H\n\n#include <QObject>\n#include <QSqlQuery>\n#include <QDateTime>\n\n#in"
  },
  {
    "path": "core/QuadKeyCache.h",
    "chars": 1536,
    "preview": "#ifndef QLOG_CORE_QUADKEYCACHE_H\n#define QLOG_CORE_QUADKEYCACHE_H\n\n#include <QCache>\n#include <QString>\n#include <QPair>"
  },
  {
    "path": "core/WsjtxUDPReceiver.cpp",
    "chars": 23614,
    "preview": "#include <QUdpSocket>\n#include <QNetworkDatagram>\n#include <QDataStream>\n#include <QSqlTableModel>\n#include <QSqlRecord>"
  },
  {
    "path": "core/WsjtxUDPReceiver.h",
    "chars": 2833,
    "preview": "#ifndef QLOG_CORE_WSJTXUDPRECEIVER_H\n#define QLOG_CORE_WSJTXUDPRECEIVER_H\n\n#include <QObject>\n#include <QDateTime>\n#incl"
  },
  {
    "path": "core/csv.hpp",
    "chars": 343379,
    "preview": "#pragma once\n/*\nCSV for C++, version 3.4.0\nhttps://github.com/vincentlaucsb/csv-parser\n\nMIT License\n\nCopyright (c) 2017-"
  },
  {
    "path": "core/debug.cpp",
    "chars": 1228,
    "preview": "#include \"debug.h\"\n\nstatic bool logToFile = false;\nstatic QString debugLogFilename;\n\nbool isLogToFileEnabled()\n{\n    ret"
  },
  {
    "path": "core/debug.h",
    "chars": 1379,
    "preview": "#ifndef QLOG_CORE_DEBUG_LOG_H\n#define QLOG_CORE_DEBUG_LOG_H\n\n#include <QLoggingCategory>\n#include <QString>\n\nQ_DECLARE_L"
  },
  {
    "path": "core/main.cpp",
    "chars": 17305,
    "preview": "#include <QApplication>\n#include <QMessageBox>\n#include <QResource>\n#include <QDebug>\n#include <QTime>\n#include <QSystem"
  },
  {
    "path": "core/zonedetect.c",
    "chars": 38527,
    "preview": "/*\n * Copyright (c) 2018, Bertold Van den Bergh (vandenbergh@bertold.org)\n * All rights reserved.\n *\n * Redistribution a"
  },
  {
    "path": "core/zonedetect.h",
    "chars": 3399,
    "preview": "/*\n * Copyright (c) 2018, Bertold Van den Bergh (vandenbergh@bertold.org)\n * All rights reserved.\n *\n * Redistribution a"
  },
  {
    "path": "cwkey/CWKeyer.cpp",
    "chars": 9424,
    "preview": "#include \"CWKeyer.h\"\n#include \"cwkey/drivers/CWKey.h\"\n#include \"cwkey/drivers/CWDummyKey.h\"\n#include \"cwkey/drivers/CWWi"
  },
  {
    "path": "cwkey/CWKeyer.h",
    "chars": 1626,
    "preview": "#ifndef QLOG_CWKEY_CWKEYER_H\n#define QLOG_CWKEY_CWKEYER_H\n\n#include <QObject>\n\n#include \"cwkey/drivers/CWKey.h\"\n#include"
  },
  {
    "path": "cwkey/drivers/CWCatKey.cpp",
    "chars": 5049,
    "preview": "#include \"CWCatKey.h\"\n#include \"core/debug.h\"\n#include \"rig/Rig.h\"\n\nMODULE_IDENTIFICATION(\"qlog.cwkey.driver.cwcatkey\");"
  },
  {
    "path": "cwkey/drivers/CWCatKey.h",
    "chars": 914,
    "preview": "#ifndef QLOG_CWKEY_DRIVERS_CWCATKEY_H\n#define QLOG_CWKEY_DRIVERS_CWCATKEY_H\n\n#include <QObject>\n#include <QMutex>\n#inclu"
  },
  {
    "path": "cwkey/drivers/CWDaemonKey.cpp",
    "chars": 3242,
    "preview": "#include \"CWDaemonKey.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.cwkey.driver.cwdaemonkey\");\n\nCWDaemonKey::"
  },
  {
    "path": "cwkey/drivers/CWDaemonKey.h",
    "chars": 992,
    "preview": "#ifndef QLOG_CWKEY_DRIVERS_CWDAEMONKEY_H\n#define QLOG_CWKEY_DRIVERS_CWDAEMONKEY_H\n\n#include <QObject>\n#include \"CWKey.h\""
  },
  {
    "path": "cwkey/drivers/CWDummyKey.cpp",
    "chars": 1325,
    "preview": "#include \"CWDummyKey.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.cwkey.driver.cwdummykey\");\n\nCWDummyKey::CWD"
  },
  {
    "path": "cwkey/drivers/CWDummyKey.h",
    "chars": 547,
    "preview": "#ifndef QLOG_CWKEY_DRIVERS_CWDUMMYKEY_H\n#define QLOG_CWKEY_DRIVERS_CWDUMMYKEY_H\n\n#include \"CWKey.h\"\n\nclass CWDummyKey : "
  },
  {
    "path": "cwkey/drivers/CWFldigiKey.cpp",
    "chars": 8255,
    "preview": "#include <QNetworkReply>\n\n#include \"CWFldigiKey.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.cwkey.driver.cwf"
  },
  {
    "path": "cwkey/drivers/CWFldigiKey.h",
    "chars": 1160,
    "preview": "#ifndef QLOG_CWKEY_DRIVERS_CWFLDIGIKEY_H\n#define QLOG_CWKEY_DRIVERS_CWFLDIGIKEY_H\n\n#include <QObject>\n#include <QNetwork"
  },
  {
    "path": "cwkey/drivers/CWKey.cpp",
    "chars": 6692,
    "preview": "#include <QHostInfo>\n#include <QRegularExpression>\n#include \"CWKey.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"ql"
  },
  {
    "path": "cwkey/drivers/CWKey.h",
    "chars": 3548,
    "preview": "#ifndef QLOG_CWKEY_DRIVERS_CWKEY_H\n#define QLOG_CWKEY_DRIVERS_CWKEY_H\n\n#include <QObject>\n#include <QRegularExpression>\n"
  },
  {
    "path": "cwkey/drivers/CWWinKey.cpp",
    "chars": 22577,
    "preview": "#include <QMutexLocker>\n\n#include \"CWWinKey.h\"\n#include \"core/debug.h\"\n\n/* Based on WinKey Spec\n * https://k1el.tripod.c"
  },
  {
    "path": "cwkey/drivers/CWWinKey.h",
    "chars": 1724,
    "preview": "#ifndef QLOG_CWKEY_DRIVERS_CWWINKEY_H\n#define QLOG_CWKEY_DRIVERS_CWWINKEY_H\n\n#include <QMutex>\n#include \"CWKey.h\"\n\nclass"
  },
  {
    "path": "data/Accents.cpp",
    "chars": 1299290,
    "preview": "#include \"Data.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.data.data\");\n\nconst char Data::translitTab[] = {\n"
  },
  {
    "path": "data/ActivityProfile.cpp",
    "chars": 8790,
    "preview": "#include \"ActivityProfile.h\"\n#include \"core/debug.h\"\n#include \"data/ProfileManager.h\"\n#include \"data/AntProfile.h\"\n#incl"
  },
  {
    "path": "data/ActivityProfile.h",
    "chars": 2353,
    "preview": "#ifndef Q_LOG_DATA_ACTIVITYPROFILE_H\n#define Q_LOG_DATA_ACTIVITYPROFILE_H\n\n#include <QHash>\n#include \"data/ProfileManage"
  },
  {
    "path": "data/AntProfile.cpp",
    "chars": 3216,
    "preview": "#include <QSqlQuery>\n#include <QSqlError>\n#include <QVariant>\n\n#include \"AntProfile.h\"\n#include \"core/debug.h\"\n\nMODULE_I"
  },
  {
    "path": "data/AntProfile.h",
    "chars": 1011,
    "preview": "#ifndef QLOG_DATA_ANTPROFILE_H\n#define QLOG_DATA_ANTPROFILE_H\n\n#include <QString>\n#include <QObject>\n#include <QDataStre"
  },
  {
    "path": "data/Band.h",
    "chars": 478,
    "preview": "#ifndef QLOG_DATA_BAND_H\n#define QLOG_DATA_BAND_H\n\n#include <QtCore>\n\nclass Band {\npublic:\n    QString name;\n    double "
  },
  {
    "path": "data/BandPlan.cpp",
    "chars": 13697,
    "preview": "#include <QSqlQuery>\n#include <QSqlError>\n\n#include \"BandPlan.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.da"
  },
  {
    "path": "data/BandPlan.h",
    "chars": 1654,
    "preview": "#ifndef QLOG_DATA_BANDPLAN_H\n#define QLOG_DATA_BANDPLAN_H\n\n#include <QtCore>\n#include \"Band.h\"\n\nclass BandPlan\n{\npublic:"
  },
  {
    "path": "data/CWKeyProfile.cpp",
    "chars": 5308,
    "preview": "#include <QSqlQuery>\n#include <QSqlError>\n\n#include \"CWKeyProfile.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlo"
  },
  {
    "path": "data/CWKeyProfile.h",
    "chars": 1679,
    "preview": "#ifndef QLOG_DATA_CWKEYPROFILE_H\n#define QLOG_DATA_CWKEYPROFILE_H\n\n#include <QString>\n#include <QObject>\n#include <QData"
  },
  {
    "path": "data/CWShortcutProfile.cpp",
    "chars": 4246,
    "preview": "#include <QSqlQuery>\n#include <QSqlError>\n\n#include \"CWShortcutProfile.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION"
  },
  {
    "path": "data/CWShortcutProfile.h",
    "chars": 1158,
    "preview": "#ifndef QLOG_DATA_CWSHORTCUTPROFILE_H\n#define QLOG_DATA_CWSHORTCUTPROFILE_H\n\n#include <QString>\n#include <QObject>\n#incl"
  },
  {
    "path": "data/Callsign.cpp",
    "chars": 5305,
    "preview": "#include \"Callsign.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.core.callsign\");\n\nCallsign::Callsign(const QS"
  },
  {
    "path": "data/Callsign.h",
    "chars": 1101,
    "preview": "#ifndef QLOG_DATA_CALLSIGN_H\n#define QLOG_DATA_CALLSIGN_H\n\n#include <QObject>\n#include <QRegularExpression>\n\nclass Calls"
  },
  {
    "path": "data/Data.cpp",
    "chars": 47570,
    "preview": "#include <QJsonDocument>\n#include <QSqlQuery>\n#include <QSqlError>\n#include <QCompleter>\n#include <QColor>\n#include \"Dat"
  },
  {
    "path": "data/Data.h",
    "chars": 8435,
    "preview": "#ifndef QLOG_DATA_DATA_H\n#define QLOG_DATA_DATA_H\n\n#include <QtCore>\n#include <QSqlQuery>\n#include \"Dxcc.h\"\n#include \"SO"
  },
  {
    "path": "data/DxServerString.cpp",
    "chars": 2028,
    "preview": "#include <QRegularExpression>\n#include \"DxServerString.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.core.dxse"
  },
  {
    "path": "data/DxServerString.h",
    "chars": 714,
    "preview": "#ifndef QLOG_DATA_DXSERVERSTRING_H\n#define QLOG_DATA_DXSERVERSTRING_H\n\n#include <QString>\n\nclass DxServerString\n{\npublic"
  },
  {
    "path": "data/DxSpot.h",
    "chars": 2746,
    "preview": "#ifndef QLOG_DATA_DXSPOT_H\n#define QLOG_DATA_DXSPOT_H\n\n#include <QtCore>\n#include \"Dxcc.h\"\n#include \"core/MembershipQE.h"
  },
  {
    "path": "data/Dxcc.h",
    "chars": 724,
    "preview": "#ifndef QLOG_DATA_DXCC_H\n#define QLOG_DATA_DXCC_H\n\n#include <QtCore>\n\nenum DxccStatus {\n    NewEntity     = 0b1,\n    New"
  },
  {
    "path": "data/Gridsquare.cpp",
    "chars": 7032,
    "preview": "#include \"Gridsquare.h\"\n#include <core/debug.h>\n#include <QtMath>\n#include <QRegularExpression>\n#include <cmath>\n#includ"
  },
  {
    "path": "data/Gridsquare.h",
    "chars": 1379,
    "preview": "#ifndef QLOG_CORE_GRIDSQUARE_H\n#define QLOG_CORE_GRIDSQUARE_H\n\n#include <QObject>\n#include <QString>\n#include <QDebug>\n\n"
  },
  {
    "path": "data/HostsPortString.cpp",
    "chars": 2802,
    "preview": "#include <QRegularExpression>\n#include <QNetworkInterface>\n#include \"HostsPortString.h\"\n#include \"core/debug.h\"\n\nMODULE_"
  },
  {
    "path": "data/HostsPortString.h",
    "chars": 809,
    "preview": "#ifndef QLOG_DATA_HOSTSPORTSTRING_H\n#define QLOG_DATA_HOSTSPORTSTRING_H\n\n#include <QObject>\n#include <QHostAddress>\n\ncla"
  },
  {
    "path": "data/MainLayoutProfile.cpp",
    "chars": 8615,
    "preview": "#include <QSqlQuery>\n#include <QSqlError>\n#include <QByteArray>\n\n#include \"MainLayoutProfile.h\"\n#include \"core/debug.h\"\n"
  },
  {
    "path": "data/MainLayoutProfile.h",
    "chars": 1622,
    "preview": "#ifndef QLOG_DATA_MAINLAYOUTPROFILE_H\n#define QLOG_DATA_MAINLAYOUTPROFILE_H\n\n#include <QString>\n#include <QObject>\n#incl"
  },
  {
    "path": "data/POTAEntity.h",
    "chars": 312,
    "preview": "#ifndef QLOG_DATA_POTAENTITY_H\n#define QLOG_DATA_POTAENTITY_H\n\n#include <QtCore>\n\nclass POTAEntity {\npublic:\n    QString"
  },
  {
    "path": "data/POTASpot.h",
    "chars": 442,
    "preview": "#ifndef QLOG_DATA_POTASPOT_H\n#define QLOG_DATA_POTASPOT_H\n\n#include <QtCore>\n\nclass POTASpot\n{\npublic:\n    quint64 spotI"
  },
  {
    "path": "data/ProfileManager.h",
    "chars": 9153,
    "preview": "#ifndef QLOG_DATA_PROFILEMANAGER_H\n#define QLOG_DATA_PROFILEMANAGER_H\n\n#include <QString>\n#include <QVariant>\n#include <"
  },
  {
    "path": "data/RigProfile.cpp",
    "chars": 13962,
    "preview": "#include <QSqlQuery>\n#include <QSqlError>\n\n#include \"RigProfile.h\"\n#include \"core/debug.h\"\n#include \"data/ProfileManager"
  },
  {
    "path": "data/RigProfile.h",
    "chars": 2674,
    "preview": "#ifndef QLOG_DATA_RIGPROFILE_H\n#define QLOG_DATA_RIGPROFILE_H\n\n#include <QString>\n#include <QObject>\n#include <QMap>\n#in"
  },
  {
    "path": "data/RotProfile.cpp",
    "chars": 5198,
    "preview": "#include <QSqlQuery>\n#include <QSqlError>\n\n#include \"RotProfile.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog."
  },
  {
    "path": "data/RotProfile.h",
    "chars": 1294,
    "preview": "#ifndef QLOG_DATA_ROTPROFILE_H\n#define QLOG_DATA_ROTPROFILE_H\n\n#include <QString>\n#include <QObject>\n#include <QDataStre"
  },
  {
    "path": "data/RotUsrButtonsProfile.cpp",
    "chars": 4183,
    "preview": "#include <QSqlQuery>\n#include <QSqlError>\n\n#include \"RotUsrButtonsProfile.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICAT"
  },
  {
    "path": "data/RotUsrButtonsProfile.h",
    "chars": 1218,
    "preview": "#ifndef QLOG_DATA_ROTUSRBUTTONSPROFILE_H\n#define QLOG_DATA_ROTUSRBUTTONSPROFILE_H\n\n#include <QString>\n#include <QObject>"
  },
  {
    "path": "data/SOTAEntity.h",
    "chars": 450,
    "preview": "#ifndef QLOG_DATA_SOTAENTITY_H\n#define QLOG_DATA_SOTAENTITY_H\n\n#include <QtCore>\n\nclass SOTAEntity {\npublic:\n    QString"
  },
  {
    "path": "data/SerialPort.cpp",
    "chars": 821,
    "preview": "#include \"SerialPort.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.core.serialport\");\n\nSerialPort::SerialPort("
  },
  {
    "path": "data/SerialPort.h",
    "chars": 769,
    "preview": "#ifndef QLOG_DATA_SERIALPORT_H\n#define QLOG_DATA_SERIALPORT_H\n\n#include <QObject>\n#include <hamlib/rig.h>\n\nclass SerialP"
  },
  {
    "path": "data/SpotAlert.h",
    "chars": 925,
    "preview": "#ifndef QLOG_DATA_SPOTALERT_H\n#define QLOG_DATA_SPOTALERT_H\n\n#include <QMetaType>\n#include \"data/WsjtxEntry.h\"\n#include "
  },
  {
    "path": "data/StationProfile.cpp",
    "chars": 10816,
    "preview": "#include \"data/StationProfile.h\"\n#include \"core/debug.h\"\n\n#include <QVariant>\n#include <QSqlQuery>\n#include <QSqlError>\n"
  },
  {
    "path": "data/StationProfile.h",
    "chars": 1492,
    "preview": "#ifndef QLOG_DATA_STATIONPROFILE_H\n#define QLOG_DATA_STATIONPROFILE_H\n\n#include <QMetaType>\n#include <QString>\n#include "
  },
  {
    "path": "data/ToAllSpot.h",
    "chars": 259,
    "preview": "#ifndef QLOG_DATA_TOALLSPOT_H\n#define QLOG_DATA_TOALLSPOT_H\n\n#include <QtGlobal>\n#include \"data/Dxcc.h\"\n\nclass ToAllSpot"
  },
  {
    "path": "data/UpdatableSQLRecord.cpp",
    "chars": 2433,
    "preview": "#include <QSqlField>\n\n#include \"UpdatableSQLRecord.h\"\n#include \"core/debug.h\"\n\nMODULE_IDENTIFICATION(\"qlog.core.updatabl"
  },
  {
    "path": "data/UpdatableSQLRecord.h",
    "chars": 882,
    "preview": "#ifndef QLOG_DATA_UPDATABLESQLRECORD_H\n#define QLOG_DATA_UPDATABLESQLRECORD_H\n\n#include <QObject>\n#include <QSqlRecord>\n"
  },
  {
    "path": "data/WCYSpot.h",
    "chars": 298,
    "preview": "#ifndef QLOG_DATA_WCYSPOT_H\n#define QLOG_DATA_WCYSPOT_H\n\n#include <QtCore>\n\nclass WCYSpot {\npublic:\n    QDateTime time;\n"
  },
  {
    "path": "data/WWFFEntity.h",
    "chars": 456,
    "preview": "#ifndef QLOG_DATA_WWFFENTITY_H\n#define QLOG_DATA_WWFFENTITY_H\n\n#include <QtCore>\n\nclass WWFFEntity {\npublic:\n    QString"
  },
  {
    "path": "data/WWVSpot.h",
    "chars": 249,
    "preview": "#ifndef QLOG_DATA_WWVSPOT_H\n#define QLOG_DATA_WWVSPOT_H\n\n#include <QtCore>\n\nclass WWVSpot {\npublic:\n    QDateTime time;\n"
  },
  {
    "path": "data/WsjtxDecode.h",
    "chars": 1054,
    "preview": "#ifndef QLOG_DATA_WSJTXDECODE_H\n#define QLOG_DATA_WSJTXDECODE_H\n\n#include <QString>\n#include <QTime>\n\nclass WsjtxDecode\n"
  },
  {
    "path": "data/WsjtxEntry.h",
    "chars": 1296,
    "preview": "#ifndef QLOG_DATA_WSJTXENTRY_H\n#define QLOG_DATA_WSJTXENTRY_H\n\n#include \"data/WsjtxDecode.h\"\n#include \"data/DxSpot.h\"\n\nc"
  },
  {
    "path": "data/WsjtxLog.h",
    "chars": 1482,
    "preview": "#ifndef QLOG_DATA_WSJTXLOG_H\n#define QLOG_DATA_WSJTXLOG_H\n\n#include <QString>\n#include <QDateTime>\n\nclass WsjtxLog\n{\npub"
  },
  {
    "path": "data/WsjtxLogADIF.h",
    "chars": 392,
    "preview": "#ifndef QLOG_DATA_WSJTXLOGADIF_H\n#define QLOG_DATA_WSJTXLOGADIF_H\n\n#include <QString>\n\nclass WsjtxLogADIF\n{\npublic:\n    "
  },
  {
    "path": "data/WsjtxStatus.h",
    "chars": 1973,
    "preview": "#ifndef QLOG_DATA_WSJTXSTATUS_H\n#define QLOG_DATA_WSJTXSTATUS_H\n\n#include <QString>\n\nclass WsjtxStatus\n{\npublic:\n    QSt"
  },
  {
    "path": "debian/changelog",
    "chars": 50940,
    "preview": "qlog (0.50.0-1) UNRELEASED; urgency=low\n  * [NEW] - Added Split detection\n  * [NEW] - Added Developer and Support tools "
  },
  {
    "path": "debian/control",
    "chars": 882,
    "preview": "Source: qlog\nSection: hamradio\nPriority: optional\nMaintainer: Ladislav Foldyna <ok1mlg@gmail.com>\nUploaders: Ladislav Fo"
  },
  {
    "path": "debian/copyright",
    "chars": 31437,
    "preview": "Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\nUpstream-Name: qlog\nUpstream-Contact: Ladisla"
  },
  {
    "path": "debian/rules",
    "chars": 40,
    "preview": "#!/usr/bin/make -f\n%:\n\tdh $@ --parallel\n"
  },
  {
    "path": "debian/source/format",
    "chars": 12,
    "preview": "3.0 (quilt)\n"
  },
  {
    "path": "debian/watch",
    "chars": 75,
    "preview": "Version: 5\nTemplate: Github\nOwner: foldynl\nProject: QLog\n#Release-Only: yes"
  },
  {
    "path": "devtools/ADIF/all_ADIF_fields_example.adi",
    "chars": 3323,
    "preview": "### QLog ADIF Export\n<ADIF_VER:5>3.1.4\n<PROGRAMID:4>Gene\n<PROGRAMVERSION:6>0.20.0\n<CREATED_TIMESTAMP:15>20230324 081527\n"
  },
  {
    "path": "devtools/ADIF/min_ADIF_fields_example.adi",
    "chars": 211,
    "preview": "### QLog ADIF Export\n<ADIF_VER:5>3.1.4\n<PROGRAMID:4>QLog\n<PROGRAMVERSION:6>0.20.0\n<CREATED_TIMESTAMP:15>20230324 081527\n"
  },
  {
    "path": "devtools/ADIF/test_intl.adi",
    "chars": 506,
    "preview": "### QLog ADIF Export\n<ADIF_VER:5>3.1.4\n<PROGRAMID:4>QLog\n<PROGRAMVERSION:6>0.20.0\n<CREATED_TIMESTAMP:15>20230324 081527\n"
  },
  {
    "path": "devtools/TCISimulator/client.html",
    "chars": 2378,
    "preview": "<!DOCTYPE html>\n\n<meta charset=\"utf-8\" />\n\n<title>WebSocket Test</title>\n\n<script language=\"javascript\" type=\"text/javas"
  },
  {
    "path": "devtools/TCISimulator/server.py",
    "chars": 6450,
    "preview": "#!/usr/bin/env python3\n\n\"\"\"\nTCI WebSocket simulator \n\nThis script implements a minimal TCI-like WebSocket server that ac"
  },
  {
    "path": "devtools/cabrillo/generate_cabrillo_templates.py",
    "chars": 11910,
    "preview": "#!/usr/bin/env python3\n\"\"\"\nGenerate Cabrillo template SQL for QLog from formats.dat.\n\nSource: https://codeberg.org/kq4mh"
  },
  {
    "path": "devtools/deployment/finalize_release.sh",
    "chars": 4537,
    "preview": "#!/usr/bin/env bash\n\n# The script finalizes the release and edits the changlog in deployment scripts.\n#\n# Usage:\n#   ./d"
  },
  {
    "path": "devtools/timezones/README.md",
    "chars": 509,
    "preview": "# Database files\n\nPlease download the database files [here](https://cdn.bertold.org/zonedetect/db/db.zip) or create them"
  },
  {
    "path": "devtools/timezones/builder/builder.cpp",
    "chars": 26035,
    "preview": "/*\n * Copyright (c) 2018, Bertold Van den Bergh (vandenbergh@bertold.org)\n * All rights reserved.\n *\n * Redistribution a"
  },
  {
    "path": "devtools/timezones/builder/buildspec.yml",
    "chars": 222,
    "preview": "version: 0.2\n\nphases:\n  build:\n    commands:\n       - apt update\n       - apt install -y libshp-dev\n       - cd database"
  },
  {
    "path": "devtools/timezones/builder/makedb.sh",
    "chars": 2413,
    "preview": "#!/bin/sh\n\nset -e\n\ng++ builder.cpp --std=c++11 -o builder -lshp\n\nrm -rf out naturalearth timezone db.zip\nmkdir -p out\nmk"
  },
  {
    "path": "devtools/timezones/builder/zoneToAlpha.h",
    "chars": 14697,
    "preview": "result[\"Europe/Andorra\"] = \"AD\";\nresult[\"Asia/Dubai\"] = \"AE\";\nresult[\"Asia/Kabul\"] = \"AF\";\nresult[\"America/Antigua\"] = \""
  },
  {
    "path": "devtools/timezones/country_DATA_LICENSE",
    "chars": 568,
    "preview": "Source: http://www.naturalearthdata.com/\n\nAll versions of Natural Earth raster + vector map data found on this website a"
  },
  {
    "path": "devtools/timezones/timezone_DATA_LICENSE",
    "chars": 25963,
    "preview": "Source: https://github.com/evansiroky/timezone-boundary-builder\n\nOpen Database License (ODbL) v1.0\nDisclaimer\nOpen Data "
  },
  {
    "path": "devtools/translit/generate.py",
    "chars": 1414,
    "preview": "#!/usr/bin/env python3\n\n# This script generates a Unicode character transliteration\n# table into sequences of individual"
  },
  {
    "path": "devtools/windowsMake/make.bat",
    "chars": 9763,
    "preview": "@echo off\r\nsetlocal EnableExtensions EnableDelayedExpansion\r\n\r\nrem ====================================================="
  },
  {
    "path": "devtools/windowsMake/tests.bat",
    "chars": 5723,
    "preview": "@echo off\r\nsetlocal EnableExtensions EnableDelayedExpansion\r\n\r\nrem ====================================================="
  },
  {
    "path": "doc/UDP_Notifications.txt",
    "chars": 63,
    "preview": "see details https://github.com/foldynl/QLog/wiki/Notifications\n"
  },
  {
    "path": "entitlements.xml",
    "chars": 454,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "i18n/datastrings.tri",
    "chars": 914,
    "preview": "QT_TRANSLATE_NOOP(\"Data\", \"Aircraft Scatter\");\nQT_TRANSLATE_NOOP(\"Data\", \"Aurora-E\");\nQT_TRANSLATE_NOOP(\"Data\", \"Aurora\""
  },
  {
    "path": "i18n/dbstrings.tri",
    "chars": 16139,
    "preview": "QT_TRANSLATE_NOOP(\"DBStrings\", \"PHONE\");\nQT_TRANSLATE_NOOP(\"DBStrings\", \"CW\");\nQT_TRANSLATE_NOOP(\"DBStrings\", \"DIGITAL\")"
  },
  {
    "path": "i18n/i18n.qrc",
    "chars": 321,
    "preview": "<RCC>\n    <qresource prefix=\"/i18n\">\n        <file>qlog_de.qm</file>\n        <file>qlog_cs.qm</file>\n        <file>qlog_"
  }
]

// ... and 369 more files (download for full content)

About this extraction

This page contains the full source code of the foldynl/QLog GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 569 files (10.5 MB), approximately 2.8M tokens, and a symbol index with 1940 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!