{
  "ok": true,
  "source_dir": "/decoders/js8_decoder/runtime/src/JS8Call-improved",
  "scanned_files": 542,
  "source_map_version": "step48-source-decoder-path-audit",
  "rx_only_guard": {
    "tx": false,
    "ptt": false,
    "tune": false,
    "send": false,
    "js8call_runtime_control": false
  },
  "audit_conclusion": {
    "smallest_likely_rx_core": [
      "JS8_Mode/JS8.cpp",
      "JS8_Mode/JS8.h",
      "JS8_Mode/Decoder.cpp",
      "JS8_Mode/Decoder.h",
      "JS8_Mode/DecodedText.cpp",
      "JS8_Mode/DecodedText.h",
      "JS8_Mode/JS8Submode.cpp",
      "JS8_Mode/JS8Submode.h",
      "JS8_Mode/soft_combiner.h",
      "JS8_Mode/ldpc_feedback.h",
      "JS8_Mode/whitening_processor.h",
      "JS8_Include/commons.h",
      "JS8_Main/Varicode.cpp",
      "JS8_Main/Varicode.h",
      "JS8_JSC/JSC_map.cpp",
      "JS8_JSC/JSC_list.cpp"
    ],
    "missing_expected_files": [],
    "excluded_by_design": [
      "vendor/",
      "JS8_UI/",
      "JS8_Mainwindow/",
      "JS8_UDP/",
      "JS8_Network/",
      "JS8_Transceiver/"
    ],
    "note": "This is a source-map for a future RX-only decoder extraction/reimplementation. It does not compile or link JS8Call and does not start JS8Call."
  },
  "proposed_build_order": [
    {
      "phase": "audio_ingest",
      "purpose": "read mono 12 kHz WAV blocks and expose stable sample windows",
      "local_lab_files": [
        "wav_inspect.py",
        "decode_js8_lab.py"
      ],
      "reference_files": [
        "JS8_Include/commons.h"
      ]
    },
    {
      "phase": "sync_and_symbol_candidates",
      "purpose": "locate JS8 frames and extract soft symbol metrics without GUI/runtime",
      "reference_files": [
        "JS8_Mode/JS8.cpp",
        "JS8_Mode/Decoder.cpp",
        "JS8_Mode/JS8Submode.cpp"
      ]
    },
    {
      "phase": "fec_soft_decode",
      "purpose": "LDPC/FEC path and soft-combining needed before text messages exist",
      "reference_files": [
        "JS8_Mode/ldpc_feedback.h",
        "JS8_Mode/soft_combiner.h",
        "JS8_Mode/whitening_processor.h"
      ]
    },
    {
      "phase": "message_unpack",
      "purpose": "turn decoded bits into JS8 text and WebFTR decodes[] rows",
      "reference_files": [
        "JS8_Main/Varicode.cpp",
        "JS8_Main/Varicode.h",
        "JS8_Mode/DecodedText.cpp",
        "JS8_Mode/DecodedText.h",
        "JS8_JSC/JSC_map.cpp",
        "JS8_JSC/JSC_list.cpp"
      ]
    }
  ],
  "core_files": [
    {
      "path": "JS8_Mode/JS8.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 1608,
      "hits": {
        "decode": 142,
        "decoder": 36,
        "sync": 120,
        "ldpc": 23,
        "soft": 8,
        "symbol": 37,
        "snr": 14,
        "js8": 111
      },
      "tx_risk_terms": {
        "tx": 24,
        "send": 2,
        "rig": 6,
        "cat": 13
      },
      "includes": [
        "JS8.h",
        "JS8_Include/commons.h",
        "JS8_Mode/FrequencyTracker.h",
        "JS8_Mode/whitening_processor.h",
        "ldpc_feedback.h",
        "soft_combiner.h",
        "QDebug",
        "QLoggingCategory",
        "QtGlobal",
        "algorithm",
        "atomic",
        "boost/crc.hpp",
        "boost/math/ccmath/round.hpp",
        "boost/multi_index/key.hpp",
        "boost/multi_index/ordered_index.hpp",
        "boost/multi_index/ranked_index.hpp",
        "boost/multi_index_container.hpp",
        "chrono",
        "cmath",
        "complex",
        "concepts",
        "cstddef",
        "cstdint",
        "cstdlib",
        "fftw3.h",
        "initializer_list",
        "limits",
        "memory",
        "mutex",
        "numbers",
        "numeric",
        "optional",
        "sstream",
        "stdexcept",
        "string_view",
        "unordered_map",
        "utility",
        "vector",
        "vendor/Eigen/Dense",
        "JS8.moc"
      ],
      "interesting_symbols": [
        {
          "line": 8,
          "text": "#include \"JS8.h\""
        },
        {
          "line": 9,
          "text": "#include \"JS8_Include/commons.h\""
        },
        {
          "line": 10,
          "text": "#include \"JS8_Mode/FrequencyTracker.h\""
        },
        {
          "line": 11,
          "text": "#include \"JS8_Mode/whitening_processor.h\""
        },
        {
          "line": 12,
          "text": "#include \"ldpc_feedback.h\""
        },
        {
          "line": 50,
          "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);"
        },
        {
          "line": 187,
          "text": "constexpr int NS = 21;           // Sync symbols (3 @ Costas 7x7)"
        },
        {
          "line": 189,
          "text": "constexpr float ASYNCMIN = 1.5f; // Minimum sync"
        },
        {
          "line": 215,
          "text": "/* A MODE DECODER */"
        },
        {
          "line": 219,
          "text": "inline static constexpr int NSUBMODE = 0;"
        }
      ]
    },
    {
      "path": "JS8_Mode/JS8.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 256,
      "hits": {
        "decode": 13,
        "decoder": 2,
        "sync": 5,
        "snr": 1,
        "js8": 5
      },
      "tx_risk_terms": {
        "rig": 2
      },
      "includes": [
        "QObject",
        "QSemaphore",
        "QThread",
        "array",
        "functional",
        "string",
        "variant"
      ],
      "interesting_symbols": [
        {
          "line": 1,
          "text": "#ifndef __JS8"
        },
        {
          "line": 2,
          "text": "#define __JS8"
        },
        {
          "line": 12,
          "text": "namespace JS8 {"
        },
        {
          "line": 43,
          "text": "struct DecodeStarted {"
        },
        {
          "line": 44,
          "text": "int submodes;"
        },
        {
          "line": 47,
          "text": "struct SyncStart {"
        },
        {
          "line": 52,
          "text": "struct SyncState {"
        },
        {
          "line": 53,
          "text": "enum class Type { CANDIDATE, DECODED } type;"
        },
        {
          "line": 59,
          "text": "float decoded;"
        },
        {
          "line": 60,
          "text": "} sync;"
        }
      ]
    },
    {
      "path": "JS8_Mode/Decoder.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 392,
      "hits": {
        "decode": 32,
        "decoder": 32,
        "js8": 8
      },
      "tx_risk_terms": {
        "rig": 1,
        "cat": 3
      },
      "includes": [
        "Decoder.h",
        "JS8_Include/commons.h",
        "QLoggingCategory",
        "QTimer"
      ],
      "interesting_symbols": [
        {
          "line": 7,
          "text": "#include \"Decoder.h\""
        },
        {
          "line": 8,
          "text": "#include \"JS8_Include/commons.h\""
        },
        {
          "line": 13,
          "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8)"
        },
        {
          "line": 18,
          "text": "Decoder::Decoder(QObject * parent)"
        },
        {
          "line": 21,
          "text": "Decoder::~Decoder() {}"
        },
        {
          "line": 24,
          "text": "void Decoder::lock() {"
        },
        {
          "line": 29,
          "text": "void Decoder::unlock() {"
        },
        {
          "line": 34,
          "text": "Worker *Decoder::createWorker() {"
        },
        {
          "line": 38,
          "text": "connect(this, &Decoder::startWorker, worker, &Worker::start);"
        },
        {
          "line": 39,
          "text": "connect(this, &Decoder::quitWorker, worker, &Worker::quit);"
        }
      ]
    },
    {
      "path": "JS8_Mode/Decoder.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 225,
      "hits": {
        "decode": 7,
        "decoder": 7,
        "js8": 2
      },
      "tx_risk_terms": {
        "rig": 1,
        "cat": 2
      },
      "includes": [
        "JS8_Main/ProcessThread.h",
        "QByteArray",
        "QLoggingCategory",
        "QPointer",
        "QProcess"
      ],
      "interesting_symbols": [
        {
          "line": 1,
          "text": "#ifndef DECODER_H"
        },
        {
          "line": 2,
          "text": "#define DECODER_H"
        },
        {
          "line": 8,
          "text": "#include \"JS8_Main/ProcessThread.h\""
        },
        {
          "line": 37,
          "text": "class Decoder : public QObject {"
        },
        {
          "line": 40,
          "text": "Decoder(QObject *parent = nullptr);"
        },
        {
          "line": 41,
          "text": "~Decoder();"
        },
        {
          "line": 88,
          "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8)"
        },
        {
          "line": 90,
          "text": "#endif // DECODER_H"
        }
      ]
    },
    {
      "path": "JS8_Mode/DecodedText.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 447,
      "hits": {
        "decode": 42,
        "decoder": 2,
        "unpack": 22,
        "snr": 7,
        "js8": 20
      },
      "tx_risk_terms": {
        "tx": 3,
        "rig": 8,
        "cat": 1
      },
      "includes": [
        "DecodedText.h",
        "JS8_Include/commons.h",
        "JS8_Main/Varicode.h",
        "QStringBuilder"
      ],
      "interesting_symbols": [
        {
          "line": 6,
          "text": "#include \"DecodedText.h\""
        },
        {
          "line": 7,
          "text": "#include \"JS8_Include/commons.h\""
        },
        {
          "line": 8,
          "text": "#include <JS8_Main/Varicode.h>"
        },
        {
          "line": 33,
          "text": "QChar submodeChar(int const submode) {"
        },
        {
          "line": 34,
          "text": "switch (submode) {"
        },
        {
          "line": 35,
          "text": "case Varicode::SubmodeType::JS8CallNormal:"
        },
        {
          "line": 37,
          "text": "case Varicode::SubmodeType::JS8CallFast:"
        },
        {
          "line": 39,
          "text": "case Varicode::SubmodeType::JS8CallTurbo:"
        },
        {
          "line": 41,
          "text": "case Varicode::SubmodeType::JS8CallSlow:"
        },
        {
          "line": 43,
          "text": "case Varicode::SubmodeType::JS8CallUltra:"
        }
      ]
    },
    {
      "path": "JS8_Mode/DecodedText.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 282,
      "hits": {
        "decode": 15,
        "decoder": 1,
        "unpack": 12,
        "snr": 4,
        "js8": 2
      },
      "tx_risk_terms": {},
      "includes": [
        "JS8.h",
        "QString",
        "QStringList"
      ],
      "interesting_symbols": [
        {
          "line": 8,
          "text": "#ifndef DECODEDTEXT_H"
        },
        {
          "line": 9,
          "text": "#define DECODEDTEXT_H"
        },
        {
          "line": 11,
          "text": "#include \"JS8.h\""
        },
        {
          "line": 16,
          "text": "class DecodedText {"
        },
        {
          "line": 20,
          "text": "explicit DecodedText(JS8::Event::Decoded const &);"
        },
        {
          "line": 21,
          "text": "explicit DecodedText(QString const &frame, int bits, int submode);"
        },
        {
          "line": 40,
          "text": "int submode() const { return submode_; }"
        },
        {
          "line": 53,
          "text": "bool tryUnpackFastData(QString const &);"
        },
        {
          "line": 54,
          "text": "bool tryUnpackData(QString const &);"
        },
        {
          "line": 55,
          "text": "bool tryUnpackHeartbeat(QString const &);"
        }
      ]
    },
    {
      "path": "JS8_Mode/JS8Submode.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 458,
      "hits": {
        "decode": 6,
        "symbol": 32,
        "snr": 11,
        "js8": 51
      },
      "tx_risk_terms": {
        "tx": 13,
        "transmit": 1,
        "rig": 4,
        "cat": 4
      },
      "includes": [
        "JS8Submode.h",
        "JS8_Include/commons.h",
        "JS8_Main/Varicode.h",
        "QLoggingCategory",
        "concepts"
      ],
      "interesting_symbols": [
        {
          "line": 5,
          "text": "#include \"JS8Submode.h\""
        },
        {
          "line": 6,
          "text": "#include \"JS8_Include/commons.h\""
        },
        {
          "line": 7,
          "text": "#include \"JS8_Main/Varicode.h\""
        },
        {
          "line": 17,
          "text": "Q_DECLARE_LOGGING_CATEGORY(js8submode_js8)"
        },
        {
          "line": 19,
          "text": "namespace JS8::Submode {"
        },
        {
          "line": 66,
          "text": "m_samplesForSymbols(JS8_NUM_SYMBOLS * samplesForOneSymbol),"
        },
        {
          "line": 67,
          "text": "m_bandwidth(8 * JS8_RX_SAMPLE_RATE / samplesForOneSymbol),"
        },
        {
          "line": 68,
          "text": "m_samplesPerPeriod(JS8_RX_SAMPLE_RATE * period),"
        },
        {
          "line": 69,
          "text": "m_toneSpacing(JS8_RX_SAMPLE_RATE / (double)samplesForOneSymbol),"
        },
        {
          "line": 72,
          "text": "(0.5 + startDelayMS / 1000.0) * JS8_RX_SAMPLE_RATE)),"
        }
      ]
    },
    {
      "path": "JS8_Mode/JS8Submode.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 255,
      "hits": {
        "decode": 2,
        "symbol": 10,
        "snr": 1,
        "js8": 14
      },
      "tx_risk_terms": {
        "tx": 3,
        "transmit": 2,
        "send": 1
      },
      "includes": [
        "JS8_Mode/JS8.h",
        "QString",
        "stdexcept"
      ],
      "interesting_symbols": [
        {
          "line": 1,
          "text": "#ifndef JS8_SUBMODE_HPP_"
        },
        {
          "line": 2,
          "text": "#define JS8_SUBMODE_HPP_"
        },
        {
          "line": 4,
          "text": "#include \"JS8_Mode/JS8.h\""
        },
        {
          "line": 10,
          "text": "namespace JS8::Submode {"
        },
        {
          "line": 33,
          "text": "/** Name of the submode, in all uppercase letters. */"
        },
        {
          "line": 97,
          "text": "int computeCycleForDecode(int, int);"
        },
        {
          "line": 98,
          "text": "int computeAltCycleForDecode(int, int, int);"
        },
        {
          "line": 100,
          "text": "} // namespace JS8::Submode"
        },
        {
          "line": 102,
          "text": "#endif // JS8_SUBMODE_HPP_"
        }
      ]
    },
    {
      "path": "JS8_Mode/soft_combiner.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 277,
      "hits": {
        "decode": 8,
        "decoder": 5,
        "soft": 11,
        "js8": 9
      },
      "tx_risk_terms": {
        "cat": 2
      },
      "includes": [
        "QDebug",
        "QLoggingCategory",
        "QtGlobal",
        "algorithm",
        "array",
        "chrono",
        "cmath",
        "cstdint",
        "mutex",
        "optional",
        "unordered_map",
        "utility",
        "vector"
      ],
      "interesting_symbols": [
        {
          "line": 18,
          "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);"
        },
        {
          "line": 20,
          "text": "namespace js8 {"
        },
        {
          "line": 58,
          "text": "qCDebug(decoder_js8)"
        },
        {
          "line": 59,
          "text": "<< \"soft-combining disabled (JS8_SOFT_COMBINING=0)\";"
        },
        {
          "line": 97,
          "text": "qCDebug(decoder_js8)"
        },
        {
          "line": 104,
          "text": "void markDecoded(Key const &key) {"
        },
        {
          "line": 200,
          "text": "int value = qEnvironmentVariableIntValue(\"JS8_SOFT_COMBINING\", &ok);"
        },
        {
          "line": 231,
          "text": "if (!qEnvironmentVariableIsSet(\"JS8_SOFT_COMBINING_TEST\"))"
        },
        {
          "line": 275,
          "text": "qCDebug(decoder_js8)"
        },
        {
          "line": 294,
          "text": "} // namespace js8"
        }
      ]
    },
    {
      "path": "JS8_Mode/ldpc_feedback.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 250,
      "hits": {
        "decode": 3,
        "decoder": 1,
        "ldpc": 12,
        "js8": 8
      },
      "tx_risk_terms": {
        "cat": 2
      },
      "includes": [
        "QDebug",
        "QLoggingCategory",
        "QtGlobal",
        "algorithm",
        "array",
        "cmath",
        "cstdint",
        "cstdlib",
        "optional"
      ],
      "interesting_symbols": [
        {
          "line": 14,
          "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);"
        },
        {
          "line": 16,
          "text": "namespace js8 {"
        },
        {
          "line": 31,
          "text": "constexpr int LDPC_FEEDBACK_MAX_PASSES_DEFAULT = 8;"
        },
        {
          "line": 36,
          "text": "if (auto const env = std::getenv(\"JS8_LLR_ERASURE_THRESH\"); env) {"
        },
        {
          "line": 46,
          "text": "std::getenv(\"JS8_DISABLE_ERASURE_THRESHOLDING\")) {"
        },
        {
          "line": 53,
          "text": "inline bool ldpcFeedbackEnabled() {"
        },
        {
          "line": 55,
          "text": "int value = qEnvironmentVariableIntValue(\"JS8_LDPC_FEEDBACK\", &ok);"
        },
        {
          "line": 59,
          "text": "inline int ldpcFeedbackMaxPasses() {"
        },
        {
          "line": 61,
          "text": "int value = qEnvironmentVariableIntValue(\"JS8_LDPC_MAX_PASSES\", &ok);"
        },
        {
          "line": 64,
          "text": "return LDPC_FEEDBACK_MAX_PASSES_DEFAULT;"
        }
      ]
    },
    {
      "path": "JS8_Mode/whitening_processor.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 295,
      "hits": {
        "decode": 5,
        "decoder": 5,
        "symbol": 20,
        "js8": 9
      },
      "tx_risk_terms": {
        "cat": 2
      },
      "includes": [
        "QDebug",
        "QLoggingCategory",
        "algorithm",
        "array",
        "cmath",
        "cstdlib",
        "numeric",
        "optional",
        "sstream",
        "vector"
      ],
      "interesting_symbols": [
        {
          "line": 15,
          "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);"
        },
        {
          "line": 17,
          "text": "namespace js8 {"
        },
        {
          "line": 102,
          "text": "qCDebug(decoder_js8).noquote() << oss.str().c_str();"
        },
        {
          "line": 139,
          "text": "qCDebug(decoder_js8)"
        },
        {
          "line": 146,
          "text": "std::getenv(\"JS8_DISABLE_WHITENING\") != nullptr;"
        },
        {
          "line": 246,
          "text": "qCDebug(decoder_js8) << \"LLR whitening applied\""
        },
        {
          "line": 259,
          "text": "} // namespace js8"
        }
      ]
    },
    {
      "path": "JS8_Include/commons.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 379,
      "hits": {
        "decode": 18,
        "sync": 4,
        "symbol": 6,
        "js8": 40
      },
      "tx_risk_terms": {
        "tx": 5
      },
      "includes": [
        "cstdint",
        "mutex"
      ],
      "interesting_symbols": [
        {
          "line": 11,
          "text": "#define JS8_NSPS           6192"
        },
        {
          "line": 12,
          "text": "#define JS8_NSMAX          6827"
        },
        {
          "line": 13,
          "text": "#define JS8_NTMAX          60"
        },
        {
          "line": 14,
          "text": "#define JS8_RX_SAMPLE_RATE 12000"
        },
        {
          "line": 15,
          "text": "#define JS8_RX_SAMPLE_SIZE (JS8_NTMAX * JS8_RX_SAMPLE_RATE)"
        },
        {
          "line": 17,
          "text": "#define JS8_RING_BUFFER    1       // use a ring buffer instead of clearing the decode frames"
        },
        {
          "line": 18,
          "text": "#define JS8_DECODE_THREAD  1       // use a separate thread for decode process handling"
        },
        {
          "line": 19,
          "text": "#define JS8_ALLOW_EXTENDED 1       // allow extended latin-1 capital charset"
        },
        {
          "line": 20,
          "text": "#define JS8_AUTO_SYNC      1       // enable the experimental auto sync feature"
        },
        {
          "line": 22,
          "text": "#define JS8_NUM_SYMBOLS    79"
        }
      ]
    },
    {
      "path": "JS8_Main/Varicode.cpp",
      "exists": true,
      "category": "message_unpack_candidate",
      "focused_rx_score": 654,
      "hits": {
        "decode": 8,
        "unpack": 76,
        "snr": 34,
        "js8": 55
      },
      "tx_risk_terms": {
        "transmit": 5,
        "send": 16,
        "rig": 7,
        "cat": 17
      },
      "includes": [
        "Varicode.h",
        "JS8_JSC/JSC.h",
        "JS8_Mode/DecodedText.h",
        "QLoggingCategory",
        "QMap",
        "QSet",
        "boost/format.hpp",
        "vendor/CRCpp/CRC.h",
        "cmath",
        "stdexcept"
      ],
      "interesting_symbols": [
        {
          "line": 8,
          "text": "#include \"Varicode.h\""
        },
        {
          "line": 9,
          "text": "#include \"JS8_JSC/JSC.h\""
        },
        {
          "line": 10,
          "text": "#include \"JS8_Mode/DecodedText.h\""
        },
        {
          "line": 24,
          "text": "Q_DECLARE_LOGGING_CATEGORY(varicode_js8)"
        },
        {
          "line": 221,
          "text": "{\"@JS8NET\", nbasecall + 3},  // JS8NET group"
        },
        {
          "line": 265,
          "text": "{\"@JS8\", nbasecall + 35},      // JS8 GROUP"
        },
        {
          "line": 359,
          "text": "QString Varicode::extendedChars() {"
        },
        {
          "line": 372,
          "text": "QString Varicode::escape(const QString &text) {"
        },
        {
          "line": 382,
          "text": "#if JS8_USE_ESCAPE_SUB_CHAR"
        },
        {
          "line": 394,
          "text": "QString Varicode::unescape(const QString &text) {"
        }
      ]
    },
    {
      "path": "JS8_Main/Varicode.h",
      "exists": true,
      "category": "message_unpack_candidate",
      "focused_rx_score": 274,
      "hits": {
        "decode": 3,
        "unpack": 17,
        "snr": 3,
        "js8": 9
      },
      "tx_risk_terms": {
        "transmit": 1,
        "rig": 1
      },
      "includes": [
        "QBitArray",
        "QRegularExpression",
        "QString",
        "QThread",
        "QVector"
      ],
      "interesting_symbols": [
        {
          "line": 1,
          "text": "#ifndef VARICODE_H"
        },
        {
          "line": 2,
          "text": "#define VARICODE_H"
        },
        {
          "line": 14,
          "text": "class Varicode {"
        },
        {
          "line": 24,
          "text": "enum SubmodeType {"
        },
        {
          "line": 25,
          "text": "JS8CallNormal = 0,"
        },
        {
          "line": 26,
          "text": "JS8CallFast = 1,"
        },
        {
          "line": 27,
          "text": "JS8CallTurbo = 2,"
        },
        {
          "line": 28,
          "text": "JS8CallSlow = 4,"
        },
        {
          "line": 29,
          "text": "JS8CallUltra = 8"
        },
        {
          "line": 34,
          "text": "JS8Call = 0,      // [000] <- any other frame of the message"
        }
      ]
    },
    {
      "path": "JS8_JSC/JSC_map.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": -539,
      "hits": {
        "decode": 6,
        "decoder": 2,
        "sync": 73,
        "ldpc": 1,
        "soft": 168,
        "symbol": 21,
        "unpack": 5,
        "snr": 5,
        "js8": 6
      },
      "tx_risk_terms": {
        "tx": 47,
        "transmit": 15,
        "ptt": 10,
        "tune": 33,
        "send": 49,
        "rig": 416,
        "hamlib": 1,
        "cat": 1009
      },
      "includes": [
        "JSC.h"
      ],
      "interesting_symbols": [
        {
          "line": 95,
          "text": "{\"\\\\\", 1, 68}, // FYI: this used to be FT8 in JS8 1.0"
        },
        {
          "line": 96,
          "text": "{\"\\n\", 1, 69}, // FYI: this used to be \"\\\" in JS8 1.0"
        },
        {
          "line": 97,
          "text": "{\"JS8\", 3, 70},"
        },
        {
          "line": 98,
          "text": "{\"JS8CALL\", 7, 71},"
        },
        {
          "line": 100,
          "text": "72}, // FYI: this used to be JSQSO in JS8 1.0, it is now a substitute flag"
        },
        {
          "line": 32911,
          "text": "{\"SYNC\", 4, 32883},"
        },
        {
          "line": 40361,
          "text": "{\"SYNCHRONIZATION\", 15, 40333},"
        },
        {
          "line": 43476,
          "text": "{\"DECODER\", 7, 43448},"
        },
        {
          "line": 47164,
          "text": "{\"ASYNCHRONOUS\", 12, 47136},"
        },
        {
          "line": 48994,
          "text": "{\"SYNCHRONOUS\", 11, 48966},"
        }
      ]
    },
    {
      "path": "JS8_JSC/JSC_list.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": -539,
      "hits": {
        "decode": 6,
        "decoder": 2,
        "sync": 73,
        "ldpc": 1,
        "soft": 168,
        "symbol": 21,
        "unpack": 5,
        "snr": 5,
        "js8": 6
      },
      "tx_risk_terms": {
        "tx": 47,
        "transmit": 15,
        "ptt": 10,
        "tune": 33,
        "send": 49,
        "rig": 416,
        "hamlib": 1,
        "cat": 1009
      },
      "includes": [
        "JSC.h"
      ],
      "interesting_symbols": [
        {
          "line": 16249,
          "text": "{\"VSYNC\", 5, 146064},"
        },
        {
          "line": 21073,
          "text": "{\"UUDECODE\", 8, 212134},"
        },
        {
          "line": 23617,
          "text": "{\"UNPACKS\", 7, 238679},"
        },
        {
          "line": 23618,
          "text": "{\"UNPACKING\", 9, 69270},"
        },
        {
          "line": 23619,
          "text": "{\"UNPACKED\", 8, 92955},"
        },
        {
          "line": 23620,
          "text": "{\"UNPACKAGED\", 10, 179051},"
        },
        {
          "line": 23621,
          "text": "{\"UNPACK\", 6, 69093},"
        },
        {
          "line": 39192,
          "text": "{\"SYNCYTIAL\", 9, 132486},"
        },
        {
          "line": 39193,
          "text": "{\"SYNCTEST\", 8, 246773},"
        },
        {
          "line": 39194,
          "text": "{\"SYNCS\", 5, 143059},"
        }
      ]
    }
  ],
  "additional_candidates": [
    {
      "path": "CMakeLists.txt",
      "exists": true,
      "category": "support_or_unknown",
      "focused_rx_score": 349,
      "hits": {
        "decode": 2,
        "soft": 1,
        "symbol": 1,
        "js8": 125
      },
      "tx_risk_terms": {
        "tx": 4,
        "transmit": 2,
        "rig": 15,
        "hamlib": 9,
        "cat": 8
      },
      "includes": [],
      "interesting_symbols": [
        {
          "line": 4,
          "text": "#   JS8Call Build:"
        },
        {
          "line": 38,
          "text": "set(CMAKE_PREFIX_PATH ${CMAKE_SOURCE_DIR}/../js8libs)"
        },
        {
          "line": 60,
          "text": "JS8Call"
        },
        {
          "line": 68,
          "text": "set(PROJECT_HOMEPAGE https://groups.io/g/js8call)"
        },
        {
          "line": 91,
          "text": "# define in js8call_config.h.in, which makes them available to the C/C++"
        },
        {
          "line": 220,
          "text": "JS8CALL_VERSION=\\\"${PROJECT_VERSION}\\\""
        },
        {
          "line": 229,
          "text": "\"${CMAKE_CURRENT_SOURCE_DIR}/JS8_Include/js8call_config.h.in\""
        },
        {
          "line": 230,
          "text": "\"${CMAKE_CURRENT_BINARY_DIR}/js8call_config.h\""
        },
        {
          "line": 235,
          "text": "${CMAKE_CURRENT_BINARY_DIR}/js8call_config.h"
        },
        {
          "line": 245,
          "text": "JS8_Audio/AudioDevice.cpp"
        }
      ]
    },
    {
      "path": "tools/tracking_diag.cpp",
      "exists": true,
      "category": "diagnostic_harness_reference",
      "focused_rx_score": 273,
      "hits": {
        "decode": 36,
        "decoder": 13,
        "sync": 1,
        "symbol": 1,
        "snr": 19,
        "js8": 25
      },
      "tx_risk_terms": {
        "tx": 6,
        "cat": 6
      },
      "includes": [
        "cmath",
        "cstring",
        "optional",
        "random",
        "sstream",
        "vector",
        "iostream",
        "mutex",
        "thread",
        "cstdlib",
        "QCoreApplication",
        "QEventLoop",
        "QLoggingCategory",
        "QThread",
        "JS8_Include/commons.h",
        "JS8_Mode/JS8.h",
        "../JS8_Mode/JS8.cpp"
      ],
      "interesting_symbols": [
        {
          "line": 30,
          "text": "#include \"JS8_Include/commons.h\""
        },
        {
          "line": 31,
          "text": "#include \"JS8_Mode/JS8.h\""
        },
        {
          "line": 38,
          "text": "Q_LOGGING_CATEGORY(decoder_js8, \"decoder.js8\", QtWarningMsg)"
        },
        {
          "line": 41,
          "text": "#include \"../JS8_Mode/JS8.cpp\""
        },
        {
          "line": 47,
          "text": "struct DecodeMetrics"
        },
        {
          "line": 49,
          "text": "bool  decoded      = false;"
        },
        {
          "line": 50,
          "text": "int   decodedCount = 0;"
        },
        {
          "line": 70,
          "text": "JS8::encode(0, Costas, message, tones);"
        },
        {
          "line": 103,
          "text": "auto const count = std::min(samples.size(), std::size_t(JS8_RX_SAMPLE_SIZE));"
        },
        {
          "line": 112,
          "text": "dec_data.params.nsubmodes = 1 << 0; // ModeA only."
        }
      ]
    },
    {
      "path": "tools/whitening_diag.cpp",
      "exists": true,
      "category": "diagnostic_harness_reference",
      "focused_rx_score": 203,
      "hits": {
        "decode": 26,
        "decoder": 11,
        "sync": 1,
        "snr": 12,
        "js8": 19
      },
      "tx_risk_terms": {
        "cat": 4
      },
      "includes": [
        "cmath",
        "cstring",
        "random",
        "vector",
        "iostream",
        "mutex",
        "thread",
        "cstdlib",
        "QCoreApplication",
        "QEventLoop",
        "QLoggingCategory",
        "QThread",
        "JS8_Include/commons.h",
        "JS8_Mode/JS8.h",
        "../JS8_Mode/JS8.cpp"
      ],
      "interesting_symbols": [
        {
          "line": 25,
          "text": "#include \"JS8_Include/commons.h\""
        },
        {
          "line": 26,
          "text": "#include \"JS8_Mode/JS8.h\""
        },
        {
          "line": 33,
          "text": "Q_LOGGING_CATEGORY(decoder_js8, \"decoder.js8\", QtWarningMsg)"
        },
        {
          "line": 36,
          "text": "#include \"../JS8_Mode/JS8.cpp\""
        },
        {
          "line": 48,
          "text": "JS8::encode(0, Costas, message, tones);"
        },
        {
          "line": 76,
          "text": "auto const count = std::min(samples.size(), std::size_t(JS8_RX_SAMPLE_SIZE));"
        },
        {
          "line": 85,
          "text": "dec_data.params.nsubmodes = 1 << 0; // ModeA only."
        },
        {
          "line": 89,
          "text": "dec_data.params.syncStats = false;"
        },
        {
          "line": 101,
          "text": "bool decoded = false;"
        },
        {
          "line": 107,
          "text": "run_decode(bool disableWhitening)"
        }
      ]
    },
    {
      "path": "JS8_Mode/Modulator.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 134,
      "hits": {
        "sync": 4,
        "symbol": 6,
        "js8": 22
      },
      "tx_risk_terms": {
        "tx": 9,
        "transmit": 3,
        "tune": 1,
        "send": 6,
        "cat": 3
      },
      "includes": [
        "Modulator.h",
        "JS8Submode.h",
        "JS8_Audio/SoundOutput.h",
        "JS8_Include/commons.h",
        "JS8_Main/DriftingDateTime.h",
        "JS8_UI/mainwindow.h",
        "QDateTime",
        "QLoggingCategory",
        "QtMath",
        "limits",
        "numbers",
        "moc_Modulator.cpp"
      ],
      "interesting_symbols": [
        {
          "line": 6,
          "text": "#include \"JS8Submode.h\""
        },
        {
          "line": 7,
          "text": "#include \"JS8_Audio/SoundOutput.h\""
        },
        {
          "line": 8,
          "text": "#include \"JS8_Include/commons.h\""
        },
        {
          "line": 9,
          "text": "#include \"JS8_Main/DriftingDateTime.h\""
        },
        {
          "line": 10,
          "text": "#include \"JS8_UI/mainwindow.h\""
        },
        {
          "line": 21,
          "text": "Q_DECLARE_LOGGING_CATEGORY(modulator_js8)"
        },
        {
          "line": 38,
          "text": "void Modulator::start(double const frequency, int const submode,"
        },
        {
          "line": 45,
          "text": "qCDebug(modulator_js8)"
        },
        {
          "line": 48,
          "text": ": current_state == State::Synchronizing ? \"Synchronizing\""
        },
        {
          "line": 57,
          "text": "m_nsps = JS8::Submode::samplesForOneSymbol(submode);"
        }
      ]
    },
    {
      "path": "JS8_Mode/Detector.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 93,
      "hits": {
        "decode": 1,
        "decoder": 1,
        "js8": 10
      },
      "tx_risk_terms": {
        "cat": 3
      },
      "includes": [
        "Detector.h",
        "JS8_Include/commons.h",
        "JS8_Main/DriftingDateTime.h",
        "QDateTime",
        "QLoggingCategory",
        "QMutexLocker",
        "QtAlgorithms",
        "algorithm",
        "cmath",
        "moc_Detector.cpp"
      ],
      "interesting_symbols": [
        {
          "line": 8,
          "text": "#include \"JS8_Include/commons.h\""
        },
        {
          "line": 9,
          "text": "#include \"JS8_Main/DriftingDateTime.h\""
        },
        {
          "line": 56,
          "text": "Q_DECLARE_LOGGING_CATEGORY(detector_js8)"
        },
        {
          "line": 97,
          "text": "#if JS8_RING_BUFFER"
        },
        {
          "line": 130,
          "text": "qCDebug(detector_js8) << \"advancing detector buffer from\" << prevKin << \"to\""
        },
        {
          "line": 152,
          "text": "qCDebug(detector_js8) << \"clearing detector buffer content\";"
        },
        {
          "line": 187,
          "text": "qCDebug(detector_js8)"
        },
        {
          "line": 204,
          "text": "static_cast<int>(JS8_NTMAX * 12000 - m_samplesPerFFT)) {"
        },
        {
          "line": 237,
          "text": "Q_LOGGING_CATEGORY(detector_js8, \"detector.js8\", QtWarningMsg)"
        }
      ]
    },
    {
      "path": "JS8_JSC/JSC_checker.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 89,
      "hits": {
        "soft": 2,
        "js8": 9
      },
      "tx_risk_terms": {
        "rig": 1,
        "cat": 3
      },
      "includes": [
        "JSC_checker.h",
        "JS8_Main/Varicode.h",
        "JSC.h",
        "QLoggingCategory",
        "QTextBlock",
        "QTextCursor",
        "QTextDocument",
        "QTextEdit",
        "QTextLayout"
      ],
      "interesting_symbols": [
        {
          "line": 24,
          "text": "#include \"JS8_Main/Varicode.h\""
        },
        {
          "line": 34,
          "text": "Q_DECLARE_LOGGING_CATEGORY(jsc_checker_js8)"
        },
        {
          "line": 162,
          "text": "correct = Varicode::isValidCallsign(word, nullptr);"
        },
        {
          "line": 310,
          "text": "Q_LOGGING_CATEGORY(jsc_checker_js8, \"jsc_checker.js8\", QtWarningMsg)"
        }
      ]
    },
    {
      "path": "JS8_Mode/FrequencyTracker.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 81,
      "hits": {
        "decode": 2,
        "symbol": 1,
        "js8": 4
      },
      "tx_risk_terms": {},
      "includes": [
        "complex",
        "numbers"
      ],
      "interesting_symbols": [
        {
          "line": 6,
          "text": "namespace js8 {"
        },
        {
          "line": 75,
          "text": "} // namespace js8"
        }
      ]
    },
    {
      "path": "JS8_JSC/JSC.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 71,
      "hits": {
        "soft": 2,
        "js8": 2
      },
      "tx_risk_terms": {
        "rig": 1
      },
      "includes": [
        "JSC.h",
        "JS8_Main/Varicode.h",
        "QCache",
        "QDebug",
        "cmath"
      ],
      "interesting_symbols": [
        {
          "line": 24,
          "text": "#include \"JS8_Main/Varicode.h\""
        },
        {
          "line": 48,
          "text": "out.prepend(Varicode::intToBits(v, bytesize + 1));"
        },
        {
          "line": 53,
          "text": "out.prepend(Varicode::intToBits((x % c) + s, bytesize));"
        },
        {
          "line": 154,
          "text": "quint64 byte = Varicode::bitsToInt(b);"
        }
      ]
    },
    {
      "path": "JS8_Mode/FrequencyTracker.cpp",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 69,
      "hits": {
        "js8": 3
      },
      "tx_risk_terms": {},
      "includes": [
        "FrequencyTracker.h",
        "algorithm",
        "cmath"
      ],
      "interesting_symbols": [
        {
          "line": 14,
          "text": "namespace js8 {"
        },
        {
          "line": 184,
          "text": "} // namespace js8"
        }
      ]
    },
    {
      "path": "JS8_Main/JS8MessageBox.cpp",
      "exists": true,
      "category": "support_or_unknown",
      "focused_rx_score": 66,
      "hits": {
        "js8": 23
      },
      "tx_risk_terms": {
        "cat": 3
      },
      "includes": [
        "JS8MessageBox.h",
        "revision_utils.h",
        "QCoreApplication",
        "QDialogButtonBox",
        "QPushButton"
      ],
      "interesting_symbols": [
        {
          "line": 6,
          "text": "#include \"JS8MessageBox.h\""
        },
        {
          "line": 13,
          "text": "JS8MessageBox::JS8MessageBox(QWidget *parent) : QMessageBox{parent} {"
        },
        {
          "line": 17,
          "text": "JS8MessageBox::JS8MessageBox(Icon icon, QString const &text,"
        },
        {
          "line": 24,
          "text": "void JS8MessageBox::about_message(QWidget *parent, QString const &text) {"
        },
        {
          "line": 28,
          "text": "void JS8MessageBox::about_Qt_message(QWidget *parent) {"
        },
        {
          "line": 34,
          "text": "show_it(QWidget *parent, JS8MessageBox::Icon icon, QString const &text,"
        },
        {
          "line": 36,
          "text": "JS8MessageBox::StandardButtons buttons,"
        },
        {
          "line": 37,
          "text": "JS8MessageBox::StandardButton default_button) {"
        },
        {
          "line": 38,
          "text": "JS8MessageBox mb{icon, text, JS8MessageBox::NoButton, parent};"
        },
        {
          "line": 42,
          "text": "uint mask = JS8MessageBox::FirstButton;"
        }
      ]
    },
    {
      "path": "JS8_Mode/Modulator.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 64,
      "hits": {
        "sync": 1,
        "js8": 1
      },
      "tx_risk_terms": {
        "tx": 1,
        "tune": 1
      },
      "includes": [
        "JS8_Audio/AudioDevice.h",
        "QAudio",
        "QPointer"
      ],
      "interesting_symbols": [
        {
          "line": 4,
          "text": "#include \"JS8_Audio/AudioDevice.h\""
        },
        {
          "line": 24,
          "text": "enum class State { Synchronizing, Active, Idle };"
        },
        {
          "line": 55,
          "text": "Q_SLOT void start(double audioFrequency, int submode, double tx_delay,"
        }
      ]
    },
    {
      "path": "JS8_Mode/Detector.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 63,
      "hits": {
        "js8": 1
      },
      "tx_risk_terms": {},
      "includes": [
        "JS8_Audio/AudioDevice.h",
        "QMutex",
        "vendor/Eigen/Dense",
        "array"
      ],
      "interesting_symbols": [
        {
          "line": 4,
          "text": "#include \"JS8_Audio/AudioDevice.h\""
        }
      ]
    },
    {
      "path": "JS8_Include/Maidenhead.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 63,
      "hits": {
        "soft": 1
      },
      "tx_risk_terms": {},
      "includes": [
        "QString",
        "QStringView",
        "QValidator"
      ],
      "interesting_symbols": []
    },
    {
      "path": "JS8_Include/sleep.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 60,
      "hits": {},
      "tx_risk_terms": {},
      "includes": [
        "qthread.h"
      ],
      "interesting_symbols": []
    },
    {
      "path": "JS8_Include/pimpl_h.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 60,
      "hits": {},
      "tx_risk_terms": {},
      "includes": [
        "memory"
      ],
      "interesting_symbols": []
    },
    {
      "path": "JS8_Include/pimpl_impl.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 60,
      "hits": {},
      "tx_risk_terms": {},
      "includes": [
        "utility"
      ],
      "interesting_symbols": []
    },
    {
      "path": "JS8_Include/EventFilter.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 60,
      "hits": {},
      "tx_risk_terms": {},
      "includes": [
        "QEvent",
        "QKeyEvent",
        "QMouseEvent",
        "QObject",
        "functional"
      ],
      "interesting_symbols": []
    },
    {
      "path": "JS8_Include/SettingsGroup.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 60,
      "hits": {},
      "tx_risk_terms": {},
      "includes": [
        "QSettings",
        "QString"
      ],
      "interesting_symbols": []
    },
    {
      "path": "JS8_Include/eclipse.txt",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 60,
      "hits": {},
      "tx_risk_terms": {},
      "includes": [],
      "interesting_symbols": []
    },
    {
      "path": "JS8_JSC/JSC_checker.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 59,
      "hits": {},
      "tx_risk_terms": {
        "rig": 1
      },
      "includes": [
        "QObject"
      ],
      "interesting_symbols": []
    },
    {
      "path": "JS8_JSC/JSC.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 59,
      "hits": {},
      "tx_risk_terms": {
        "rig": 1
      },
      "includes": [
        "QList",
        "QMap",
        "QPair",
        "QStringList",
        "QTextStream",
        "QVector"
      ],
      "interesting_symbols": []
    },
    {
      "path": "JS8_Main/APRSISClient.cpp",
      "exists": true,
      "category": "support_or_unknown",
      "focused_rx_score": 51,
      "hits": {
        "sync": 1,
        "js8": 21
      },
      "tx_risk_terms": {
        "send": 3,
        "rig": 1,
        "cat": 11
      },
      "includes": [
        "APRSISClient.h",
        "DriftingDateTime.h",
        "Varicode.h",
        "QLoggingCategory",
        "QRandomGenerator",
        "cmath"
      ],
      "interesting_symbols": [
        {
          "line": 7,
          "text": "#include \"Varicode.h\""
        },
        {
          "line": 14,
          "text": "Q_DECLARE_LOGGING_CATEGORY(aprsisclient_js8)"
        },
        {
          "line": 105,
          "text": "loginFrame = loginFrame.arg(\"JS8Call\");"
        },
        {
          "line": 319,
          "text": "qCDebug(aprsisclient_js8)"
        },
        {
          "line": 354,
          "text": "auto spotFrame = QString(\"%1>APJ8CL,qAS,%2:=%3/%4G#JS8 %5\\n\");"
        },
        {
          "line": 427,
          "text": "qCDebug(aprsisclient_js8)"
        },
        {
          "line": 446,
          "text": "qCDebug(aprsisclient_js8)"
        },
        {
          "line": 468,
          "text": "qCDebug(aprsisclient_js8)"
        },
        {
          "line": 478,
          "text": "qCDebug(aprsisclient_js8)"
        },
        {
          "line": 486,
          "text": "qCDebug(aprsisclient_js8)"
        }
      ]
    },
    {
      "path": "JS8_Main/main.cpp",
      "exists": true,
      "category": "support_or_unknown",
      "focused_rx_score": 51,
      "hits": {
        "js8": 29
      },
      "tx_risk_terms": {
        "rig": 9,
        "cat": 27
      },
      "includes": [
        "DriftingDateTime.h",
        "FrequencyList.h",
        "JS8MessageBox.h",
        "JS8_Include/SettingsGroup.h",
        "JS8_Include/commons.h",
        "JS8_UI/mainwindow.h",
        "JS8_UI/styles.h",
        "MetaDataRegistry.h",
        "MultiSettings.h",
        "Radio.h",
        "TraceFile.h",
        "revision_utils.h",
        "QApplication",
        "QDateTime",
        "QDir",
        "QLibraryInfo",
        "QLockFile",
        "QLoggingCategory",
        "QObject",
        "QRegularExpression",
        "QSettings",
        "QStack",
        "QStandardPaths",
        "QStringList",
        "QSysInfo",
        "fftw3.h",
        "locale.h",
        "exception",
        "iostream",
        "stdexcept",
        "string",
        "QCommandLineOption",
        "QCommandLineParser"
      ],
      "interesting_symbols": [
        {
          "line": 8,
          "text": "#include \"JS8MessageBox.h\""
        },
        {
          "line": 9,
          "text": "#include \"JS8_Include/SettingsGroup.h\""
        },
        {
          "line": 10,
          "text": "#include \"JS8_Include/commons.h\""
        },
        {
          "line": 11,
          "text": "#include \"JS8_UI/mainwindow.h\""
        },
        {
          "line": 12,
          "text": "#include \"JS8_UI/styles.h\""
        },
        {
          "line": 45,
          "text": "Q_DECLARE_LOGGING_CATEGORY(main_js8)"
        },
        {
          "line": 91,
          "text": "a.setApplicationName(\"JS8Call\");"
        },
        {
          "line": 183,
          "text": "switch (JS8MessageBox::query_message("
        },
        {
          "line": 188,
          "text": "JS8MessageBox::Yes | JS8MessageBox::Retry |"
        },
        {
          "line": 189,
          "text": "JS8MessageBox::No,"
        }
      ]
    },
    {
      "path": "JS8_Include/qpriorityqueue.h",
      "exists": true,
      "category": "rx_core_candidate",
      "focused_rx_score": 45,
      "hits": {
        "soft": 1
      },
      "tx_risk_terms": {
        "tx": 1,
        "rig": 17
      },
      "includes": [
        "QtCore/qalgorithms.h",
        "queue",
        "vector"
      ],
      "interesting_symbols": []
    },
    {
      "path": "JS8_Main/FrequencyList.cpp",
      "exists": true,
      "category": "support_or_unknown",
      "focused_rx_score": 42,
      "hits": {
        "js8": 15
      },
      "tx_risk_terms": {
        "rig": 2,
        "cat": 1
      },
      "includes": [
        "FrequencyList.h",
        "JS8_Include/pimpl_impl.h",
        "JS8_Main/Bands.h",
        "Radio.h",
        "QAbstractTableModel",
        "QByteArray",
        "QDataStream",
        "QDebugStateSaver",
        "QList",
        "QListIterator",
        "QMetaType",
        "QMimeData",
        "QString",
        "QStringList",
        "QVector",
        "cstdlib",
        "limits",
        "utility",
        "moc_FrequencyList.cpp"
      ],
      "interesting_symbols": [
        {
          "line": 7,
          "text": "#include \"JS8_Include/pimpl_impl.h\""
        },
        {
          "line": 8,
          "text": "#include \"JS8_Main/Bands.h\""
        },
        {
          "line": 31,
          "text": "{1843500, Modes::JS8, IARURegions::ALL, \"\"}, // 3.5 above"
        },
        {
          "line": 32,
          "text": "{3578000, Modes::JS8, IARURegions::ALL, \"\"}, // 5 above"
        },
        {
          "line": 33,
          "text": "{5363000, Modes::JS8,"
        },
        {
          "line": 35,
          "text": "{7078000, Modes::JS8, IARURegions::ALL, \"\"},   // 4 above"
        },
        {
          "line": 36,
          "text": "{10130000, Modes::JS8, IARURegions::ALL, \"\"},  // 6 below"
        },
        {
          "line": 37,
          "text": "{14078000, Modes::JS8, IARURegions::ALL, \"\"},  // 4 above"
        },
        {
          "line": 38,
          "text": "{18104000, Modes::JS8, IARURegions::ALL, \"\"},  // 4 above"
        },
        {
          "line": 39,
          "text": "{21078000, Modes::JS8, IARURegions::ALL, \"\"},  // 4 above"
        }
      ]
    }
  ],
  "next_action": "Run sync-probe and soft-symbols on real JS8 WAVs, then continue with LDPC/FEC. Message unpack remains not implemented in this step."
}
