From 93513a939a6e7f53ddb9a09b23c1bb39b40e4d7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20K=C3=A1kona?= Date: Sat, 18 Oct 2025 00:28:28 +0200 Subject: [PATCH 1/4] Generalize parser data-driven tests --- .github/workflows/tests.yml | 22 ++++ data/.gitkeep | 0 dosview/__init__.py | 223 ++--------------------------------- dosview/parsers.py | 227 ++++++++++++++++++++++++++++++++++++ tests/test_parser.py | 69 +++++++++++ 5 files changed, 326 insertions(+), 215 deletions(-) create mode 100644 .github/workflows/tests.yml create mode 100644 data/.gitkeep create mode 100644 dosview/parsers.py create mode 100644 tests/test_parser.py diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..4f84785 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,22 @@ +name: Python tests + +on: + push: + pull_request: + +jobs: + pytest: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install . pytest + - name: Run pytest + run: pytest diff --git a/data/.gitkeep b/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/dosview/__init__.py b/dosview/__init__.py index fd28428..00cc2d7 100644 --- a/dosview/__init__.py +++ b/dosview/__init__.py @@ -11,10 +11,9 @@ import pyqtgraph as pg import pandas as pd -from PyQt5.QtWidgets import QSplitter import datetime -import time +import time from PyQt5.QtCore import * from PyQt5.QtGui import * @@ -27,219 +26,13 @@ from .version import __version__ from pyqtgraph import ImageView - - -import sys -import argparse - -from PyQt5 import QtNetwork -from PyQt5.QtNetwork import QLocalSocket, QLocalServer -from PyQt5.QtCore import QThread, pyqtSignal, QSettings -from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QHBoxLayout, QFormLayout -from PyQt5.QtWidgets import QPushButton, QFileDialog, QTreeWidget, QTreeWidgetItem, QAction, QSplitter, QTableWidgetItem -from PyQt5.QtGui import QIcon -import pyqtgraph as pg -import pandas as pd -import datetime -import time -from PyQt5.QtCore import * -from PyQt5.QtGui import * -from PyQt5.QtWidgets import * -import hid -import numpy as np -import os -from .version import __version__ -from pyqtgraph import ImageView - -# ---- PARSER INFRA ---- - -class BaseLogParser: - """Základní třída parseru.""" - def __init__(self, file_path): - self.file_path = file_path - - @staticmethod - def detect(file_path): - """Vrací True pokud tento parser umí parsovat daný soubor.""" - raise NotImplementedError - - def parse(self): - """Vrací rozparsovaná data.""" - raise NotImplementedError - - -class Airdos04CLogParser(BaseLogParser): - """Parser pro logy typu AIRDOS04C.""" - @staticmethod - def detect(file_path): - with open(file_path, "r") as f: - for line in f: - if line.startswith("$DOS") and "AIRDOS04C" in line: - return True - return False - - def parse(self): - start_time = time.time() - print("AIRDOS04C parser start") - metadata = { - 'log_runs_count': 0, - 'log_device_info': {}, - 'log_info': {} - } - hist = np.zeros(1024, dtype=int) - total_counts = 0 - - - sums = [] - time_axis = [] - - inside_run = False - current_hist = None - current_counts = 0 - - with open(self.file_path, 'r') as file: - for line in file: - parts = line.strip().split(",") - match parts[0]: - case "$DOS": - metadata['log_device_info']['DOS'] = { - "type": parts[0], - "hw-model": parts[1], - "fw-version": parts[2], - "eeprom": parts[3], - "fw-commit": parts[4], - "fw-build_info": parts[5], - 'hw-sn': parts[6].strip(), - } - metadata['log_runs_count'] += 1 - case "$START": - inside_run = True - current_hist = np.zeros_like(hist) - current_counts = 0 - case "$E": - if inside_run and len(parts) >= 3: - channel = int(parts[2]) - if 0 <= channel < current_hist.shape[0]: - current_hist[channel] += 1 - current_counts += 1 - case "$STOP": - if inside_run: - # Přičti hodnoty z $STOP (kanálové stavy na konci expozice) - if len(parts) > 4: - for idx, val in enumerate(parts[4:]): - try: - current_hist[idx] += int(val) - except Exception: - pass - hist += current_hist - total_counts += current_counts - sums.append(current_counts) - time_axis.append(float(parts[2])) - inside_run = False - current_hist = None - case _: - continue - - metadata['log_info']['histogram_channels'] = hist.shape[0] - metadata['log_info']['events_total'] = int(total_counts) # pouze součet všech E! - metadata['log_info']['log_type_version'] = "2.0" - metadata['log_info']['log_type'] = 'xDOS_SPECTRAL' - metadata['log_info']['detector_type'] = "AIRDOS04C" - print("Parsed AIRDOS04C format in", time.time() - start_time, "s") - - return [np.array(time_axis), np.array(sums), hist, metadata] - - - -class OldLogParser(BaseLogParser): - """Parser pro starší logy (ne-AIRDOS04C).""" - @staticmethod - def detect(file_path): - with open(file_path, "r") as f: - for line in f: - if line.startswith("$DOS") and "AIRDOS04C" not in line: - return True - return False - - def parse(self): - start_time = time.time() - print("OLD parser start") - metadata = { - 'log_runs_count': 0, - 'log_device_info': {}, - 'log_info': {} - } - df_lines = [] # $HIST - df_metadata = [] - unique_events = [] # $HITS - with open(self.file_path, 'r') as file: - for line in file: - parts = line.strip().split(",") - match parts[0]: - case "$DOS": - metadata['log_device_info']['DOS'] = { - "type": parts[0], - "hw-model": parts[1], - "fw-version": parts[2], - "eeprom": parts[3], - "fw-commit": parts[4], - "fw-build_info": parts[5], - 'hw-sn': parts[6].strip(), - } - metadata['log_runs_count'] += 1 - case "$ENV": - df_metadata.append(parts[2:]) - case "$HIST": - df_lines.append(parts[1:]) - case "$HITS": - unique_events += [(float(parts[i]), int(parts[i+1])) for i in range(2, len(parts), 2)] - case _: - continue - np_spectrum = np.array(df_lines, dtype=float) - zero_columns = np.zeros((np_spectrum.shape[0], 1000)) - np_spectrum = np.hstack((np_spectrum, zero_columns)) - time_column = np_spectrum[:, 1] - np_spectrum = np_spectrum[:, 7:] - for event in unique_events: - t, ch = event - time_index = np.searchsorted(time_column, t) - if 0 <= time_index < np_spectrum.shape[0] and 0 <= ch < np_spectrum.shape[1]: - np_spectrum[time_index, ch] += 1 - hist = np.sum(np_spectrum[:, 1:], axis=0) - sums = np.sum(np_spectrum[:, 1:], axis=1) - metadata['log_info'].update({ - 'internal_time_min': time_column.min(), - 'internal_time_max': time_column.max(), - 'log_duration': time_column.max() - time_column.min(), - 'spectral_count': sums.shape[0], - 'channels': hist.shape[0], - 'hits_count': len(unique_events), - 'log_type_version': "1.0", - 'log_type': 'xDOS_SPECTRAL', - 'detector_type': metadata['log_device_info']['DOS'].get('hw-model', 'unknown'), - }) - print("Parsed OLD format in", time.time() - start_time, "s") - return [time_column, sums, hist, metadata] - - -class dosparser(): - def __init__(self): - pass - - def load_file(self, datafile : str , detector = None): - pass - -LOG_PARSERS = [Airdos04CLogParser, OldLogParser] - -def get_parser_for_file(file_path): - for parser_cls in LOG_PARSERS: - if parser_cls.detect(file_path): - return parser_cls(file_path) - raise ValueError("Neznámý typ logu nebo žádný vhodný parser.") - -def parse_file(file_path): - parser = get_parser_for_file(file_path) - return parser.parse() +from .parsers import ( + BaseLogParser, + Airdos04CLogParser, + OldLogParser, + get_parser_for_file, + parse_file, +) class LoadDataThread(QThread): diff --git a/dosview/parsers.py b/dosview/parsers.py new file mode 100644 index 0000000..a050d08 --- /dev/null +++ b/dosview/parsers.py @@ -0,0 +1,227 @@ +"""Parsers for different dosview log formats. + +This module isolates the parsing logic from the GUI stack so that it can be +imported and tested without initializing PyQt. +""" + +from __future__ import annotations + +from typing import List, Sequence, Tuple + +import time +from pathlib import Path + +import numpy as np + + +class BaseLogParser: + """Base parser class.""" + + def __init__(self, file_path: str | Path): + self.file_path = str(file_path) + + @staticmethod + def detect(file_path: str | Path) -> bool: + """Return True if this parser can handle the supplied file.""" + raise NotImplementedError + + def parse(self): # pragma: no cover - concrete classes implement + raise NotImplementedError + + +class Airdos04CLogParser(BaseLogParser): + """Parser for AIRDOS04C log files.""" + + @staticmethod + def detect(file_path: str | Path) -> bool: + with open(file_path, "r") as f: + for line in f: + if line.startswith("$DOS") and "AIRDOS04C" in line: + return True + return False + + def parse(self): + start_time = time.time() + print("AIRDOS04C parser start") + metadata = { + "log_runs_count": 0, + "log_device_info": {}, + "log_info": {}, + } + hist = np.zeros(1024, dtype=int) + total_counts = 0 + sums: List[int] = [] + time_axis: List[float] = [] + inside_run = False + current_hist = None + current_counts = 0 + + with open(self.file_path, "r") as file: + for line in file: + parts = line.strip().split(",") + match parts[0]: + case "$DOS": + metadata["log_device_info"]["DOS"] = { + "type": parts[0], + "hw-model": parts[1], + "fw-version": parts[2], + "eeprom": parts[3], + "fw-commit": parts[4], + "fw-build_info": parts[5], + "hw-sn": parts[6].strip(), + } + metadata["log_runs_count"] += 1 + case "$START": + inside_run = True + current_hist = np.zeros_like(hist) + current_counts = 0 + case "$E": + if inside_run and len(parts) >= 3: + channel = int(parts[2]) + if 0 <= channel < current_hist.shape[0]: + current_hist[channel] += 1 + current_counts += 1 + case "$STOP": + if inside_run: + if len(parts) > 4: + for idx, val in enumerate(parts[4:]): + try: + current_hist[idx] += int(val) + except ValueError: + continue + hist += current_hist + total_counts += current_counts + sums.append(current_counts) + time_axis.append(float(parts[2])) + inside_run = False + current_hist = None + case _: + continue + + metadata["log_info"]["histogram_channels"] = hist.shape[0] + metadata["log_info"]["events_total"] = int(total_counts) + metadata["log_info"]["log_type_version"] = "2.0" + metadata["log_info"]["log_type"] = "xDOS_SPECTRAL" + metadata["log_info"]["detector_type"] = "AIRDOS04C" + print("Parsed AIRDOS04C format in", time.time() - start_time, "s") + + return [np.array(time_axis), np.array(sums), hist, metadata] + + +class OldLogParser(BaseLogParser): + """Parser for legacy (pre-AIRDOS04C) log files.""" + + @staticmethod + def detect(file_path: str | Path) -> bool: + with open(file_path, "r") as f: + for line in f: + if line.startswith("$DOS") and "AIRDOS04C" not in line: + return True + if line.startswith("$AIRDOS"): + return True + if line.startswith("$HIST"): + return True + return False + + def parse(self): + start_time = time.time() + print("OLD parser start") + metadata = { + "log_runs_count": 0, + "log_device_info": {}, + "log_info": {}, + } + df_lines: List[Sequence[str]] = [] + df_metadata: List[Sequence[str]] = [] + unique_events: List[Tuple[float, int]] = [] + with open(self.file_path, "r") as file: + for line in file: + parts = line.strip().split(",") + match parts[0]: + case "$DOS": + metadata["log_device_info"]["DOS"] = { + "type": parts[0], + "hw-model": parts[1], + "fw-version": parts[2], + "eeprom": parts[3], + "fw-commit": parts[4], + "fw-build_info": parts[5], + "hw-sn": parts[6].strip(), + } + metadata["log_runs_count"] += 1 + case "$AIRDOS": + metadata["log_device_info"]["AIRDOS"] = { + "type": parts[0], + "hw-model": parts[1] if len(parts) > 1 else "", + "detector": parts[2] if len(parts) > 2 else "", + "hw-sn": parts[3].strip() if len(parts) > 3 else "", + } + metadata["log_runs_count"] += 1 + case "$ENV": + df_metadata.append(parts[2:]) + case "$HIST": + df_lines.append(parts[1:]) + case "$HITS": + for i in range(2, len(parts) - 1, 2): + try: + unique_events.append((float(parts[i]), int(parts[i + 1]))) + except ValueError: + continue + case _: + continue + if not df_lines: + raise ValueError("Soubor neobsahuje žádné záznamy $HIST pro starší log.") + np_spectrum = np.array(df_lines, dtype=float) + zero_columns = np.zeros((np_spectrum.shape[0], 1000)) + np_spectrum = np.hstack((np_spectrum, zero_columns)) + time_column = np_spectrum[:, 1] + np_spectrum = np_spectrum[:, 7:] + for event in unique_events: + t, ch = event + time_index = np.searchsorted(time_column, t) + if 0 <= time_index < np_spectrum.shape[0] and 0 <= ch < np_spectrum.shape[1]: + np_spectrum[time_index, ch] += 1 + hist = np.sum(np_spectrum[:, 1:], axis=0) + sums = np.sum(np_spectrum[:, 1:], axis=1) + metadata["log_info"].update( + { + "internal_time_min": float(time_column.min()), + "internal_time_max": float(time_column.max()), + "log_duration": float(time_column.max() - time_column.min()), + "spectral_count": int(sums.shape[0]), + "channels": int(hist.shape[0]), + "hits_count": len(unique_events), + "log_type_version": "1.0", + "log_type": "xDOS_SPECTRAL", + "detector_type": metadata["log_device_info"].get("DOS", {}).get( + "hw-model", + metadata["log_device_info"].get("AIRDOS", {}).get("hw-model", "unknown"), + ), + } + ) + print("Parsed OLD format in", time.time() - start_time, "s") + return [time_column, sums, hist, metadata] + + +LOG_PARSERS: Sequence[type[BaseLogParser]] = [Airdos04CLogParser, OldLogParser] + + +def get_parser_for_file(file_path: str | Path) -> BaseLogParser: + for parser_cls in LOG_PARSERS: + if parser_cls.detect(file_path): + return parser_cls(file_path) + raise ValueError("Neznámý typ logu nebo žádný vhodný parser.") + + +def parse_file(file_path: str | Path): + parser = get_parser_for_file(file_path) + return parser.parse() + + +__all__ = [ + "BaseLogParser", + "Airdos04CLogParser", + "OldLogParser", + "get_parser_for_file", + "parse_file", +] diff --git a/tests/test_parser.py b/tests/test_parser.py new file mode 100644 index 0000000..7c4171f --- /dev/null +++ b/tests/test_parser.py @@ -0,0 +1,69 @@ +from pathlib import Path +import importlib.util + +import numpy as np +import pytest + +ROOT = Path(__file__).resolve().parent.parent +PARSERS_PATH = ROOT / "dosview" / "parsers.py" + +spec = importlib.util.spec_from_file_location("dosview_parsers", PARSERS_PATH) +parsers = importlib.util.module_from_spec(spec) +assert spec.loader is not None +spec.loader.exec_module(parsers) + +LOG_PARSERS = parsers.LOG_PARSERS +get_parser_for_file = parsers.get_parser_for_file +parse_file = parsers.parse_file + +DATA_DIR = ROOT / "data" + +if not DATA_DIR.exists(): + pytest.skip("Data fixture directory is missing", allow_module_level=True) + +LOG_FIXTURES = sorted( + path + for path in DATA_DIR.iterdir() + if path.is_file() and not path.name.startswith(".") +) + +if not LOG_FIXTURES: + pytest.skip("No data fixtures found for parser tests", allow_module_level=True) + + +@pytest.mark.parametrize("log_path", LOG_FIXTURES, ids=lambda p: p.name) +def test_any_parser_detects_fixture(log_path): + assert log_path.exists(), f"Fixture {log_path.name} is missing" + detected = [parser for parser in LOG_PARSERS if parser.detect(log_path)] + assert detected, f"No parser detected {log_path.name}" + parser_instance = get_parser_for_file(log_path) + assert any(isinstance(parser_instance, parser_cls) for parser_cls in detected) + + +@pytest.mark.parametrize("log_path", LOG_FIXTURES, ids=lambda p: p.name) +def test_parse_fixture_returns_consistent_shapes(log_path): + time_axis, sums, hist, metadata = parse_file(log_path) + + for array in (time_axis, sums, hist): + np_array = np.asarray(array, dtype=float) + assert np_array.ndim == 1 + assert np_array.size > 0 + assert np.all(np.isfinite(np_array)) + + assert time_axis.shape[0] == sums.shape[0] + assert hist.shape[0] > 0 + assert np.all(np.asarray(hist) >= 0) + + if time_axis.shape[0] > 1: + assert np.all(np.diff(np.asarray(time_axis, dtype=float)) >= 0) + + assert isinstance(metadata, dict) + assert "log_info" in metadata and isinstance(metadata["log_info"], dict) + assert "log_type" in metadata["log_info"] + + if log_path.name == "legacy_airdos_log.txt": + assert metadata["log_device_info"]["AIRDOS"]["detector"] == "NaI(Tl)-D16x30" + assert metadata["log_info"]["detector_type"] == "GEO_1024_v1" + + if metadata["log_info"].get("detector_type") == "AIRDOS04C": + assert metadata["log_info"].get("histogram_channels") == hist.shape[0] From 3f26371463b70bb08c6f36c1d93e0223745d660e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20K=C3=A1kona?= Date: Sat, 18 Oct 2025 00:32:42 +0200 Subject: [PATCH 2/4] Add logfile fragments. --- data/DATALOG_AIRDOS04_2.0.TXT | 20359 ++++++++++++++++++++++++++++++++ data/DATALOG_AIRDOS_GEO.TXT | 258 + 2 files changed, 20617 insertions(+) create mode 100644 data/DATALOG_AIRDOS04_2.0.TXT create mode 100644 data/DATALOG_AIRDOS_GEO.TXT diff --git a/data/DATALOG_AIRDOS04_2.0.TXT b/data/DATALOG_AIRDOS04_2.0.TXT new file mode 100644 index 0000000..2cc18c5 --- /dev/null +++ b/data/DATALOG_AIRDOS04_2.0.TXT @@ -0,0 +1,20359 @@ +$DOS,AIRDOS04C,2.0.0-0-User,0,a3e25b543d4de5dc3d0544625b6109b33db2b44b,User,0112310834100851f50ba080a08002b6 +$DIG,BATDATUNIT01B,1470c00806c200949c49a000a00d009c,7844 +$ADC,USTSIPIN03A,0950710874100851f80aa0c0a08000b6,ffff +$START,0,0 +$E,2919,6 +$E,21317,20 +$E,27782,4 +$E,53320,4 +$STOP,0,35111887.54,12638,4,17527,7,1,4 +$START,1,13018 +$E,4657,6 +$E,23198,126 +$E,49094,4 +$E,50788,359 +$E,62497,7 +$E,64689,14 +$E,66856,17 +$E,71255,28 +$E,73251,56 +$E,73426,38 +$STOP,1,35111897.59,25706,10,18048,8,0,8 +$START,2,26147 +$E,5687,31 +$E,5693,19 +$E,5704,12 +$E,9430,56 +$E,11478,95 +$E,39974,19 +$STOP,2,35111907.66,38801,6,17387,10,0,16 +$START,3,39244 +$E,30423,5 +$E,33396,4 +$E,39631,7 +$E,41396,4 +$E,52783,4 +$STOP,3,35111917.73,51891,5,17402,8,1,3 +$START,4,52283 +$E,3186,6 +$E,3199,4 +$E,3211,7 +$E,3215,15 +$E,3219,12 +$E,3224,8 +$E,4510,7 +$E,4514,11 +$E,4536,12 +$E,4973,6 +$E,20204,6 +$E,49359,4 +$STOP,4,35111927.78,64978,12,17944,12,1,11 +$START,5,166 +$E,13483,6 +$E,38510,28 +$E,38557,38 +$E,38572,51 +$E,38578,33 +$E,38605,39 +$E,38612,31 +$E,38670,54 +$E,38673,44 +$E,38690,32 +$E,38697,35 +$E,38701,6 +$E,38704,38 +$E,38708,7 +$E,38711,48 +$E,38737,40 +$E,38744,39 +$E,38751,33 +$E,38758,37 +$E,38764,33 +$E,38771,40 +$E,38778,33 +$E,38785,44 +$E,38791,31 +$E,38930,44 +$E,39101,37 +$E,39107,30 +$E,39122,24 +$E,39128,7 +$E,39178,38 +$E,39218,38 +$E,39304,41 +$E,39310,9 +$E,39700,31 +$E,39706,39 +$E,39713,49 +$E,39719,30 +$E,39725,32 +$E,39775,41 +$E,39779,9 +$E,39796,32 +$E,39803,39 +$E,39809,39 +$E,39815,43 +$E,39899,35 +$E,39994,31 +$E,40026,28 +$E,40641,31 +$E,40647,38 +$E,41058,39 +$E,41065,31 +$E,41072,27 +$E,41361,48 +$E,41741,46 +$E,47232,19 +$E,47251,12 +$E,47290,7 +$E,47340,17 +$E,47874,29 +$E,48161,36 +$E,48562,30 +$E,48675,25 +$E,48877,15 +$E,49277,4 +$E,49395,6 +$E,49598,11 +$E,49602,7 +$E,49963,12 +$STOP,5,35111937.89,13654,68,18003,16,1,14 +$START,6,14698 +$E,8473,7 +$E,9825,7 +$E,14610,6 +$E,22736,8 +$E,22740,14 +$E,23752,8 +$E,60132,6 +$STOP,6,35111948.14,27358,7,18359,13,1,6 +$START,7,27756 +$E,29068,4 +$STOP,7,35111958.20,40378,1,18070,16,3,1 +$START,8,40762 +$E,2854,7 +$E,9972,7 +$E,13614,99 +$E,35670,6 +$E,43502,7 +$E,62614,4 +$E,67658,407 +$STOP,8,35111968.25,53417,7,18442,5,2,5 +$START,9,53813 +$E,13090,39 +$E,56078,7 +$E,74055,7 +$STOP,9,35111978.31,912,3,18035,7,0,4 +$START,10,1273 +$E,19106,7 +$E,71531,7 +$E,75322,6 +$STOP,10,35111988.36,13907,3,17929,13,3,7 +$START,11,14271 +$E,49400,1411 +$STOP,11,35111998.42,26891,1,17869,8,0,4 +$START,12,27241 +$E,28131,128 +$E,65836,39 +$E,76151,4 +$STOP,12,35112008.46,39877,3,17904,4,2,6 +$START,13,40278 +$E,19248,4 +$E,65558,7 +$E,77162,6 +$STOP,13,35112018.52,52913,3,18207,11,2,3 +$START,14,53277 +$E,64320,6 +$E,68043,193 +$STOP,14,35112028.57,367,2,18467,9,1,13 +$START,15,721 +$E,22942,111 +$E,23371,8 +$E,46335,233 +$STOP,15,35112038.62,13353,3,18335,10,1,5 +$START,16,13717 +$E,33754,4 +$E,55139,4 +$E,69073,6 +$STOP,16,35112048.67,26352,3,17953,9,1,7 +$START,17,26716 +$E,8218,6 +$E,19896,342 +$E,25900,83 +$E,54336,67 +$STOP,17,35112058.73,39359,4,18116,6,0,2 +$START,18,39768 +$E,1164,15 +$E,32313,370 +$E,35062,4 +$E,37984,4 +$E,60765,195 +$E,73586,32 +$E,76274,104 +$STOP,18,35112068.79,52428,7,18043,7,1,11 +$START,19,52966 +$E,39889,70 +$E,48486,65 +$E,72377,6 +$E,74787,167 +$STOP,19,35112078.86,68,4,17826,7,2,4 +$START,20,438 +$E,10451,4 +$E,22862,7 +$E,65107,6 +$STOP,20,35112088.92,13072,3,17730,10,1,3 +$START,21,13435 +$E,22618,4 +$E,52228,6 +$STOP,21,35112098.97,26063,2,17713,10,0,4 +$START,22,26419 +$E,16678,466 +$E,55622,44 +$STOP,22,35112109.2,39047,2,17485,9,2,11 +$START,23,39440 +$E,14256,51 +$STOP,23,35112119.8,52061,1,17760,6,2,5 +$START,24,52446 +$E,30945,5 +$E,65843,4 +$STOP,24,35112129.13,65074,2,17790,5,1,8 +$START,25,6 +$E,6365,5 +$E,30863,7 +$E,52689,48 +$E,58164,7 +$STOP,25,35112139.19,12645,4,17959,11,4,3 +$START,26,13166 +$E,3077,6 +$E,32120,4 +$E,35096,4 +$E,42569,348 +$E,47362,7 +$E,55949,6 +$E,67598,513 +$STOP,26,35112149.27,25824,7,18009,6,0,4 +$START,27,26250 +$E,1782,7 +$E,4660,443 +$E,23460,6 +$E,26888,6 +$E,60263,146 +$E,62252,6 +$E,66435,12 +$E,71285,4 +$E,71404,15 +$E,72831,4 +$E,74349,4 +$E,76774,6 +$STOP,27,35112159.33,38953,12,18299,13,2,13 +$START,28,39534 +$E,13380,6 +$E,43252,7 +$E,67297,87 +$E,69462,6 +$E,72489,5 +$STOP,28,35112169.42,52182,5,18080,8,0,5 +$START,29,52590 +$E,2113,4 +$E,42337,371 +$E,45270,12 +$E,46550,24 +$E,66554,25 +$STOP,29,35112179.48,65240,5,18168,21,3,5 +$ENV,29,35112179.54,23.2,57.1,23.7,54.7,23.05,971.44 +$START,30,711 +$E,418,6 +$E,14923,279 +$E,24169,120 +$E,33945,4 +$E,63899,4 +$E,64360,6 +$E,69089,236 +$STOP,30,35112189.61,13369,7,18577,9,0,5 +$START,31,13828 +$E,92,6 +$E,4540,6 +$E,25454,48 +$E,25454,39 +$E,25461,14 +$E,25463,7 +$E,25466,12 +$E,31581,79 +$E,48601,7 +$STOP,31,35112199.68,26503,9,18338,9,0,6 +$START,32,26947 +$E,684,7 +$E,44213,46 +$E,48302,7 +$E,48666,46 +$E,49822,51 +$E,51383,43 +$E,52798,71 +$E,56752,17 +$E,56880,31 +$E,57128,21 +$E,58311,16 +$E,58877,31 +$E,58928,30 +$E,60555,24 +$E,60793,22 +$E,60935,30 +$E,61090,23 +$E,61667,7 +$E,61814,31 +$E,61912,9 +$E,62372,24 +$E,62499,7 +$E,62548,56 +$E,62631,33 +$E,62714,36 +$E,62866,7 +$E,62934,31 +$E,62968,18 +$E,63045,39 +$E,63113,19 +$E,63200,65 +$E,63267,16 +$E,63417,15 +$E,63418,6 +$E,63644,8 +$E,63671,28 +$E,64041,22 +$E,64490,24 +$E,64648,32 +$E,64845,19 +$E,64981,4 +$E,65038,15 +$E,65118,40 +$E,65170,19 +$E,65263,30 +$E,65328,10 +$E,65451,31 +$E,65597,14 +$E,65729,30 +$E,65817,41 +$E,66009,31 +$E,66054,31 +$E,66173,24 +$E,66177,19 +$E,66214,13 +$E,66281,14 +$E,66569,6 +$E,66595,47 +$E,66744,26 +$E,66947,27 +$E,67097,6 +$E,67165,51 +$E,67183,15 +$E,67256,31 +$E,67413,51 +$E,67439,32 +$E,67617,28 +$E,67718,12 +$E,67872,6 +$E,67877,19 +$E,67897,23 +$E,68075,17 +$E,68114,9 +$E,68273,8 +$E,68284,31 +$E,68351,48 +$E,68457,20 +$E,68725,30 +$E,68797,31 +$E,68806,16 +$E,68850,48 +$E,68874,15 +$E,68875,14 +$E,68923,42 +$E,68934,23 +$E,68954,15 +$E,68959,70 +$E,69023,19 +$E,69046,48 +$E,69109,62 +$E,69149,14 +$E,69167,27 +$E,69310,19 +$E,69364,15 +$E,69444,16 +$E,69483,10 +$E,69553,15 +$E,69575,33 +$E,69600,17 +$E,69622,24 +$E,69686,40 +$E,69736,8 +$E,69782,17 +$E,69841,29 +$E,69867,8 +$E,69879,15 +$E,69906,30 +$E,69963,56 +$E,70015,56 +$E,70066,27 +$E,70078,51 +$E,70097,35 +$E,70187,19 +$E,70213,24 +$E,70294,45 +$E,70297,103 +$E,70299,19 +$E,70333,28 +$E,70354,24 +$E,70401,33 +$E,70432,25 +$E,70438,24 +$E,70476,31 +$E,70529,16 +$E,70554,32 +$E,70559,14 +$E,70575,40 +$E,70583,12 +$E,70605,15 +$E,70662,19 +$E,70677,17 +$E,70681,16 +$E,70699,12 +$E,70726,24 +$E,70728,32 +$E,70732,16 +$E,70745,23 +$E,70746,6 +$E,70790,15 +$E,70791,24 +$E,70815,15 +$E,70843,53 +$E,70849,23 +$E,70853,15 +$E,70856,23 +$E,70874,17 +$E,70906,17 +$E,70926,19 +$E,70948,22 +$E,70975,30 +$E,71004,12 +$E,71020,25 +$E,71022,20 +$E,71044,24 +$E,71054,17 +$E,71065,30 +$E,71084,17 +$E,71099,14 +$E,71119,28 +$E,71139,16 +$E,71145,15 +$E,71173,12 +$E,71176,22 +$E,71227,16 +$E,71276,19 +$E,71295,28 +$E,71299,35 +$E,71311,4 +$E,71316,28 +$E,71352,12 +$E,71366,17 +$E,71370,4 +$E,71374,12 +$E,71386,63 +$E,71404,7 +$E,71415,7 +$E,71417,24 +$E,71424,23 +$E,71429,19 +$E,71438,23 +$E,71507,28 +$E,71519,23 +$E,71549,8 +$E,71560,15 +$E,71563,12 +$E,71577,17 +$E,71596,16 +$E,71607,11 +$E,71631,14 +$E,71634,28 +$E,71656,19 +$E,71685,20 +$E,71690,15 +$E,71717,48 +$E,71722,11 +$E,71752,27 +$E,71765,51 +$E,71773,7 +$E,71831,51 +$E,71840,15 +$E,71853,48 +$E,71858,36 +$E,71883,108 +$E,71891,6 +$E,71905,7 +$E,71911,15 +$E,71921,16 +$E,71937,46 +$E,71939,14 +$E,71952,48 +$E,71958,6 +$E,71959,51 +$E,71963,24 +$E,71981,41 +$E,71994,24 +$E,72011,33 +$E,72019,40 +$E,72028,21 +$E,72030,8 +$E,72061,12 +$E,72075,12 +$E,72079,15 +$E,72100,40 +$E,72125,12 +$E,72127,12 +$E,72129,7 +$E,72134,26 +$E,72135,18 +$E,72150,16 +$E,72151,51 +$E,72156,12 +$E,72176,39 +$E,72180,15 +$E,72182,19 +$E,72195,51 +$E,72251,24 +$E,72252,15 +$E,72262,9 +$E,72265,8 +$E,72273,39 +$E,72277,27 +$E,72278,60 +$E,72308,28 +$E,72318,12 +$E,72344,7 +$E,72370,17 +$E,72384,6 +$E,72411,7 +$E,72423,30 +$E,72436,30 +$E,72448,30 +$E,72475,22 +$E,72490,49 +$E,72512,11 +$E,72519,14 +$E,72568,50 +$E,72569,7 +$E,72575,15 +$E,72592,31 +$E,72602,19 +$E,72622,19 +$E,72625,23 +$E,72644,22 +$E,72700,35 +$E,72703,14 +$E,72715,6 +$E,72736,12 +$E,72744,35 +$E,72754,20 +$E,72764,16 +$E,72768,7 +$E,72785,8 +$E,72811,46 +$E,72816,17 +$E,72849,14 +$E,72874,35 +$E,72920,17 +$E,72938,15 +$E,72962,12 +$E,72968,31 +$E,72972,60 +$E,72979,28 +$E,73019,15 +$E,73028,12 +$E,73059,44 +$E,73070,28 +$E,73095,24 +$E,73097,9 +$E,73179,19 +$E,73182,19 +$E,73195,17 +$E,73197,7 +$E,73199,14 +$E,73200,6 +$E,73244,24 +$E,73258,17 +$E,73260,11 +$E,73265,27 +$E,73278,36 +$STOP,32,35112209.75,50463,845,16420,49,7,53 +$START,33,53979 +$E,9,24 +$E,39,36 +$E,73,15 +$E,74,40 +$E,78,12 +$E,78,28 +$E,80,29 +$E,95,79 +$E,104,19 +$E,109,25 +$E,118,15 +$E,124,20 +$E,129,43 +$E,136,7 +$E,143,12 +$E,148,36 +$E,172,20 +$E,189,25 +$E,204,29 +$E,229,11 +$E,243,7 +$E,248,12 +$E,254,23 +$E,286,22 +$E,294,7 +$E,331,22 +$E,332,11 +$E,347,32 +$E,363,32 +$E,370,48 +$E,386,9 +$E,387,15 +$E,395,30 +$E,418,15 +$E,444,7 +$E,472,11 +$E,505,13 +$E,513,7 +$E,524,19 +$E,547,12 +$E,551,5 +$E,576,12 +$E,597,11 +$E,598,27 +$E,618,24 +$E,662,30 +$E,670,19 +$E,674,12 +$E,678,12 +$E,679,13 +$E,694,12 +$E,747,32 +$E,748,54 +$E,756,31 +$E,779,48 +$E,784,15 +$E,789,31 +$E,794,14 +$E,797,24 +$E,823,48 +$E,838,15 +$E,865,33 +$E,902,40 +$E,933,30 +$E,955,7 +$E,1017,14 +$E,1029,24 +$E,1032,11 +$E,1046,24 +$E,1055,32 +$E,1066,51 +$E,1083,14 +$E,1101,15 +$E,1120,20 +$E,1155,60 +$E,1156,8 +$E,1194,39 +$E,1200,7 +$E,1206,9 +$E,1219,15 +$E,1274,11 +$E,1284,31 +$E,1284,19 +$E,1289,48 +$E,1301,16 +$E,1305,35 +$E,1308,28 +$E,1313,71 +$E,1322,7 +$E,1328,23 +$E,1385,29 +$E,1399,38 +$E,1404,24 +$E,1431,23 +$E,1464,39 +$E,1503,15 +$E,1523,19 +$E,1567,23 +$E,1586,44 +$E,1587,23 +$E,1602,12 +$E,1631,12 +$E,1668,24 +$E,1675,19 +$E,1695,19 +$E,1703,44 +$E,1723,24 +$E,1753,48 +$E,1756,14 +$E,1772,12 +$E,1786,16 +$E,1795,14 +$E,1799,6 +$E,1818,19 +$E,1821,31 +$E,1834,28 +$E,1855,35 +$E,1891,72 +$E,1905,23 +$E,1930,31 +$E,1932,16 +$E,1936,40 +$E,1946,7 +$E,1950,6 +$E,1960,19 +$E,1961,5 +$E,1963,7 +$E,1983,17 +$E,1993,7 +$E,1999,12 +$E,2001,56 +$E,2006,4 +$E,2009,30 +$E,2029,28 +$E,2088,11 +$E,2090,24 +$E,2095,5 +$E,2104,71 +$E,2115,12 +$E,2123,40 +$E,2175,10 +$E,2199,16 +$E,2217,7 +$E,2237,20 +$E,2240,30 +$E,2246,15 +$E,2259,7 +$E,2271,15 +$E,2315,14 +$E,2329,20 +$E,2343,19 +$E,2346,28 +$E,2349,7 +$E,2351,18 +$E,2362,7 +$E,2371,8 +$E,2379,35 +$E,2429,17 +$E,2437,48 +$E,2449,4 +$E,2469,20 +$E,2470,6 +$E,2493,15 +$E,2497,46 +$E,2504,27 +$E,2526,18 +$E,2535,15 +$E,2537,7 +$E,2583,7 +$E,2590,8 +$E,2610,56 +$E,2629,22 +$E,2630,8 +$E,2635,15 +$E,2650,56 +$E,2659,35 +$E,2716,15 +$E,2719,19 +$E,2728,55 +$E,2732,24 +$E,2744,22 +$E,2751,24 +$E,2777,6 +$E,2779,6 +$E,2806,12 +$E,2815,48 +$E,2823,12 +$E,2856,7 +$E,2857,35 +$E,2897,33 +$E,2900,40 +$E,2904,20 +$E,2905,14 +$E,3023,22 +$E,3054,12 +$E,3070,24 +$E,3113,31 +$E,3128,31 +$E,3136,12 +$E,3147,7 +$E,3169,7 +$E,3198,7 +$E,3233,6 +$E,3246,15 +$E,3299,24 +$E,3310,38 +$E,3314,12 +$E,3328,7 +$E,3373,18 +$E,3379,31 +$E,3448,4 +$E,3505,24 +$E,3508,24 +$E,3518,45 +$E,3540,6 +$E,3544,24 +$E,3545,19 +$E,3557,28 +$E,3564,35 +$E,3578,12 +$E,3595,4 +$E,3615,51 +$E,3651,44 +$E,3716,12 +$E,3804,28 +$E,3813,28 +$E,3820,11 +$E,3821,15 +$E,3868,39 +$E,3885,46 +$E,3889,7 +$E,3922,15 +$E,3938,48 +$E,4903,6 +$E,11194,7 +$E,34466,419 +$E,72096,312 +$E,75804,49 +$STOP,33,35112221.60,7465,238,17660,22,3,21 +$START,34,10109 +$E,45427,54 +$E,46158,35 +$E,47758,35 +$E,48276,119 +$E,48286,16 +$E,48776,163 +$E,48786,19 +$E,48786,22 +$E,49353,161 +$E,49360,28 +$E,49362,65 +$E,49363,136 +$E,49373,24 +$E,49373,30 +$E,49933,135 +$E,49943,15 +$E,49943,7 +$E,50408,120 +$E,50414,24 +$E,50429,112 +$E,50439,7 +$E,50439,8 +$E,50954,126 +$E,50964,12 +$E,50985,110 +$E,51006,112 +$E,51025,112 +$E,51028,7 +$E,51052,108 +$E,51055,8 +$E,51055,7 +$E,51753,129 +$E,51763,14 +$E,51764,11 +$E,52254,112 +$E,52260,12 +$E,52267,107 +$E,52277,12 +$E,71696,79 +$STOP,34,35112232.76,23197,39,17609,16,0,6 +$START,35,23973 +$E,13609,127 +$E,35776,12 +$E,35784,14 +$E,35786,32 +$E,35791,14 +$E,35794,14 +$E,35796,14 +$E,35799,35 +$E,35804,6 +$E,35807,31 +$E,35808,80 +$E,35811,88 +$E,35813,46 +$E,35813,29 +$E,35816,16 +$E,35817,40 +$E,35828,48 +$E,35833,10 +$E,35841,14 +$E,35842,21 +$E,35843,16 +$E,35845,6 +$E,35848,59 +$E,35851,4 +$E,35853,79 +$E,35857,16 +$E,35859,25 +$E,35861,27 +$E,35862,15 +$E,35862,7 +$E,35864,63 +$E,35870,28 +$E,35872,30 +$E,35878,64 +$E,35883,8 +$E,35886,9 +$E,35894,35 +$E,35901,86 +$E,35907,19 +$E,35908,16 +$E,35908,14 +$E,35912,7 +$E,35914,51 +$E,35919,63 +$E,35921,57 +$E,35921,12 +$E,35925,11 +$E,35932,19 +$E,35936,12 +$E,35938,35 +$E,35939,48 +$E,35941,24 +$E,35943,15 +$E,35944,15 +$E,35946,12 +$E,35948,33 +$E,35949,7 +$E,35952,30 +$E,35957,15 +$E,35963,44 +$E,35967,21 +$E,35967,7 +$E,35974,35 +$E,35975,14 +$E,35977,24 +$E,35978,16 +$E,35980,6 +$E,35981,7 +$E,35981,19 +$E,35990,15 +$E,35991,7 +$E,35992,15 +$E,35992,31 +$E,35995,51 +$E,35999,47 +$E,36003,7 +$E,36006,6 +$E,36008,28 +$E,36013,7 +$E,36015,15 +$E,36017,38 +$E,36018,92 +$E,36022,38 +$E,36024,75 +$E,36026,24 +$E,36034,79 +$E,36041,24 +$E,36050,13 +$E,36053,30 +$E,36055,7 +$E,36057,7 +$E,36066,27 +$E,36066,32 +$E,36067,12 +$E,36068,48 +$E,36071,16 +$E,36075,7 +$E,36080,46 +$E,36083,31 +$E,36085,19 +$E,36088,7 +$E,36092,7 +$E,36096,44 +$E,36098,24 +$E,36104,48 +$E,36106,7 +$E,36110,48 +$E,36112,14 +$E,36115,48 +$E,36117,14 +$E,36121,22 +$E,36122,15 +$E,36125,31 +$E,36127,39 +$E,36132,28 +$E,36134,22 +$E,36134,23 +$E,36136,54 +$E,36140,44 +$E,36146,19 +$E,36147,7 +$E,36152,19 +$E,36160,7 +$E,36166,31 +$E,36167,48 +$E,36170,35 +$E,36171,49 +$E,36175,19 +$E,36179,17 +$E,36183,6 +$E,36184,23 +$E,36184,5 +$E,36188,15 +$E,36189,56 +$E,36195,44 +$E,36196,24 +$E,36199,24 +$E,36203,14 +$E,36206,24 +$E,36206,22 +$E,36206,7 +$E,36214,30 +$E,36215,23 +$E,36217,28 +$E,36222,23 +$E,36226,19 +$E,36231,28 +$E,36231,30 +$E,36235,35 +$E,36238,31 +$E,36241,7 +$E,36241,7 +$E,36255,31 +$E,36256,47 +$E,36261,30 +$E,36262,36 +$E,36264,15 +$E,36267,24 +$E,36274,34 +$E,36277,7 +$E,36281,24 +$E,36283,39 +$E,36284,11 +$E,36288,49 +$E,36293,63 +$E,36297,26 +$E,36300,63 +$E,36302,18 +$E,36305,46 +$E,36309,12 +$E,36312,31 +$E,36312,35 +$E,36315,48 +$E,36327,6 +$E,36328,22 +$E,36331,63 +$E,36331,27 +$E,36333,19 +$E,36334,6 +$E,36342,15 +$E,36347,44 +$E,36349,33 +$E,36353,27 +$E,36355,12 +$E,36356,12 +$E,36357,8 +$E,36357,7 +$E,36358,28 +$E,36361,31 +$E,36362,21 +$E,36366,38 +$E,36369,15 +$E,36371,19 +$E,36373,48 +$E,36375,46 +$E,36380,48 +$E,36384,8 +$E,36386,71 +$E,36386,25 +$E,36396,41 +$E,36398,15 +$E,36399,31 +$E,36404,31 +$E,36405,17 +$E,36407,15 +$E,36410,15 +$E,36414,44 +$E,36418,12 +$E,36419,12 +$E,36422,54 +$E,36428,17 +$E,36434,39 +$E,36438,19 +$E,36443,16 +$E,36449,19 +$E,36450,15 +$E,36452,15 +$E,36457,40 +$E,36458,25 +$E,36460,24 +$E,36464,16 +$E,36466,42 +$E,36468,39 +$E,36469,15 +$E,36472,9 +$E,36475,7 +$E,36478,19 +$E,36483,12 +$E,36488,15 +$E,36491,15 +$E,36494,22 +$E,36497,17 +$E,36510,35 +$E,36518,48 +$E,36520,8 +$E,36524,9 +$E,36527,14 +$E,36530,19 +$E,36531,48 +$E,36532,51 +$E,36532,47 +$E,36533,65 +$E,36537,4 +$E,36537,15 +$E,36540,28 +$E,36541,12 +$E,36542,6 +$E,36544,14 +$E,36548,4 +$E,36550,22 +$E,36556,15 +$E,36556,28 +$E,36560,46 +$E,36562,20 +$E,36563,17 +$E,36567,24 +$E,36571,24 +$E,36575,15 +$E,36576,21 +$E,36586,48 +$E,36592,24 +$E,36593,7 +$E,36596,6 +$E,36602,12 +$E,36603,24 +$E,36605,17 +$E,36607,12 +$E,36612,17 +$E,36612,24 +$E,36616,15 +$E,36617,15 +$E,36621,7 +$E,36622,51 +$E,36625,35 +$E,36626,23 +$E,36633,31 +$E,36639,31 +$E,36642,76 +$E,36642,71 +$E,36649,12 +$E,36656,46 +$E,36659,19 +$E,36660,6 +$E,36663,31 +$E,36670,43 +$E,36671,7 +$E,36671,17 +$E,36675,19 +$E,36680,19 +$E,36685,15 +$E,36686,24 +$E,36687,11 +$E,36689,62 +$E,36691,9 +$E,36694,33 +$E,36703,39 +$E,36705,44 +$E,36706,27 +$E,36707,12 +$STOP,35,35112242.92,47406,1991,13890,77,14,138 +$START,36,51210 +$E,7983,59 +$E,9060,64 +$E,13823,16 +$E,15727,56 +$E,17356,7 +$E,41995,188 +$E,59597,94 +$E,60920,179 +$STOP,36,35112254.80,63876,8,17977,12,1,9 +$START,37,64313 +$E,4962,6 +$E,14031,7 +$STOP,37,35112264.86,11405,2,17592,7,2,4 +$START,38,11786 +$E,13463,7 +$E,22659,23 +$E,45380,16 +$E,70325,6 +$STOP,38,35112274.92,24428,4,17398,9,1,8 +$START,39,24997 +$E,37203,4 +$E,65129,6 +$STOP,39,35112285.0,37624,2,17543,6,2,6 +$START,40,38006 +$E,4706,6 +$E,56380,88 +$E,69697,30 +$E,70462,7 +$STOP,40,35112295.5,50645,4,17561,11,1,9 +$START,41,51047 +$E,949,6 +$E,5426,6 +$E,5723,200 +$E,17903,6 +$E,19303,23 +$E,48755,77 +$E,54835,412 +$E,66173,51 +$STOP,41,35112305.10,63719,8,18003,9,0,2 +$START,42,64155 +$E,28814,359 +$E,50174,84 +$E,55003,60 +$E,62112,7 +$E,65914,5 +$E,76417,4 +$STOP,42,35112315.17,11276,6,18270,8,2,2 +$START,43,11695 +$E,3993,7 +$E,25349,4 +$E,40163,6 +$E,43844,6 +$E,68063,6 +$STOP,43,35112325.24,24342,5,18647,10,2,4 +$START,44,24785 +$E,1465,7 +$E,10046,4 +$E,42417,57 +$STOP,44,35112335.30,37420,3,18551,6,3,12 +$START,45,37811 +$E,30263,5 +$E,43989,6 +$E,50681,4 +$STOP,45,35112345.35,50446,3,17861,15,2,9 +$START,46,50837 +$E,10637,7 +$E,72137,5 +$STOP,46,35112355.41,63465,2,18045,9,1,2 +$START,47,63848 +$E,38997,67 +$E,58643,7 +$E,72183,6 +$STOP,47,35112365.47,10947,3,17586,11,1,5 +$START,48,11340 +$E,986,6 +$E,5662,63 +$E,6086,60 +$E,24998,127 +$E,32686,12 +$E,33373,7 +$E,35943,6 +$E,50931,4 +$E,54915,4 +$STOP,48,35112375.52,24017,9,17452,7,0,4 +$START,49,25367 +$E,36703,35 +$E,46354,39 +$E,54291,7 +$E,63787,6 +$E,63943,28 +$E,64123,63 +$E,64132,7 +$E,64146,112 +$E,64147,7 +$E,64197,71 +$E,64209,15 +$E,64213,63 +$E,64217,6 +$E,64218,6 +$E,64232,6 +$E,64239,6 +$E,64357,50 +$E,64412,157 +$E,64420,27 +$E,64421,11 +$E,64521,440 +$E,64523,7 +$E,64524,31 +$E,64524,46 +$E,64524,8 +$E,64525,63 +$E,64526,71 +$E,64526,60 +$E,64527,49 +$E,64527,67 +$E,64528,15 +$E,64529,14 +$E,64530,40 +$E,64531,12 +$E,64545,68 +$E,64545,15 +$E,64549,139 +$E,64550,12 +$E,64551,12 +$E,64552,22 +$E,64553,35 +$E,64670,191 +$E,64672,19 +$E,64673,14 +$E,64673,5 +$E,64674,13 +$E,64674,7 +$E,64675,6 +$E,64724,248 +$E,64730,6 +$E,64733,52 +$E,64734,19 +$E,64803,6 +$E,64803,31 +$E,64804,7 +$E,64805,8 +$E,64809,9 +$E,64811,6 +$E,64817,24 +$E,64818,328 +$E,64824,9 +$E,64824,6 +$E,64828,14 +$E,64832,24 +$E,64834,107 +$E,64835,31 +$E,64835,46 +$E,64835,12 +$E,64836,10 +$E,64836,6 +$E,64839,15 +$E,64842,10 +$E,64843,23 +$E,64844,7 +$E,64847,15 +$E,64848,17 +$E,64849,12 +$E,64850,6 +$E,64850,56 +$E,64852,39 +$E,64853,31 +$E,64854,31 +$E,64856,8 +$E,64857,33 +$E,64857,332 +$E,64865,88 +$E,64866,16 +$E,64873,216 +$E,64873,262 +$E,64874,6 +$E,64875,49 +$E,64876,46 +$E,64877,30 +$E,64878,44 +$E,64878,71 +$E,64879,143 +$E,64879,39 +$E,64880,119 +$E,64880,38 +$E,64881,64 +$E,64882,4 +$E,64883,79 +$E,64884,24 +$E,64885,60 +$E,64886,40 +$E,64887,127 +$E,64887,15 +$E,64887,28 +$E,64887,62 +$E,64888,71 +$E,64889,81 +$E,64890,12 +$E,64891,14 +$E,64896,39 +$E,64897,9 +$E,64900,14 +$E,64903,15 +$E,64904,227 +$E,64904,38 +$E,64905,23 +$E,64906,24 +$E,64907,89 +$E,64908,115 +$E,64909,40 +$E,64909,76 +$E,64909,103 +$E,64909,30 +$E,64910,79 +$E,64910,99 +$E,64911,27 +$E,64911,120 +$E,64912,41 +$E,64913,71 +$E,64913,35 +$E,64920,368 +$E,64928,391 +$E,64929,56 +$E,64930,46 +$E,64931,53 +$E,64932,24 +$E,64934,62 +$E,64935,99 +$E,64935,64 +$E,64936,55 +$E,64936,75 +$E,64937,15 +$E,64939,8 +$E,64940,31 +$E,64942,28 +$E,64951,147 +$E,64951,31 +$E,64952,8 +$E,64954,6 +$E,64955,15 +$E,64956,15 +$E,64956,26 +$E,64958,19 +$E,64960,24 +$E,64990,285 +$E,64993,92 +$E,64994,17 +$E,64994,87 +$E,64995,63 +$E,64995,46 +$E,64996,67 +$E,64996,19 +$E,64997,79 +$E,64998,44 +$E,64999,44 +$E,64999,51 +$E,65000,33 +$E,65000,8 +$E,65002,7 +$E,65003,5 +$E,65003,24 +$E,65005,22 +$E,65053,439 +$E,65053,54 +$E,65054,14 +$E,65055,31 +$E,65055,12 +$E,65056,71 +$E,65057,71 +$E,65057,24 +$E,65058,48 +$E,65058,7 +$E,65058,39 +$E,65059,25 +$E,65059,28 +$E,65060,12 +$E,65061,4 +$E,65061,8 +$E,65115,338 +$E,65117,37 +$E,65118,15 +$E,65119,28 +$E,65120,46 +$E,65120,21 +$E,65120,49 +$E,65121,16 +$E,65121,36 +$E,65121,36 +$E,65122,24 +$E,65124,22 +$E,65124,7 +$E,65154,40 +$E,65156,6 +$E,65170,39 +$E,65170,12 +$E,65174,140 +$E,65175,6 +$E,65176,9 +$E,65177,12 +$E,65177,7 +$E,65178,26 +$E,65179,11 +$E,65358,15 +$E,65396,126 +$E,65467,240 +$E,65467,61 +$E,65469,22 +$E,65469,5 +$E,65470,38 +$E,65471,20 +$E,65471,8 +$E,65472,35 +$E,65472,31 +$E,65473,8 +$E,65475,7 +$E,65482,15 +$E,65486,96 +$E,65488,14 +$E,65489,12 +$E,65490,9 +$E,65491,11 +$E,65607,94 +$E,65612,12 +$E,65724,9 +$E,65795,30 +$E,65799,83 +$E,65801,7 +$E,65803,9 +$E,65804,7 +$E,66076,25 +$E,66080,304 +$E,66082,12 +$E,66082,48 +$E,66083,23 +$E,66084,321 +$E,66084,87 +$E,66084,57 +$E,66085,33 +$E,66085,17 +$E,66085,28 +$E,66086,46 +$E,66086,28 +$E,66087,47 +$E,66088,39 +$E,66089,25 +$E,66089,7 +$E,66091,7 +$E,66095,291 +$E,66096,62 +$E,66098,48 +$E,66098,31 +$E,66098,15 +$E,66100,71 +$E,66100,38 +$E,66107,24 +$E,66111,111 +$E,66113,7 +$E,66114,7 +$E,66116,17 +$E,66116,6 +$E,66232,115 +$E,66234,12 +$E,66236,6 +$E,66302,316 +$E,66303,32 +$E,66305,19 +$E,66306,23 +$E,66307,35 +$E,66307,15 +$E,66308,39 +$E,66308,14 +$E,66308,15 +$E,66309,14 +$E,66309,17 +$E,66310,12 +$E,66311,7 +$E,66318,7 +$E,66356,9 +$E,66412,33 +$E,66420,4 +$E,66424,147 +$E,66425,7 +$E,66426,7 +$E,66427,12 +$E,66427,14 +$STOP,49,35112385.70,49852,449,17883,29,4,50 +$START,50,53383 +$E,22,12 +$E,56,14 +$E,64,15 +$E,84,28 +$E,103,19 +$E,145,25 +$E,165,35 +$E,182,38 +$E,1045,10 +$E,1162,24 +$E,1232,20 +$E,1659,20 +$E,1679,24 +$E,1698,38 +$E,1765,14 +$E,1845,15 +$E,1931,15 +$E,1993,12 +$E,2014,28 +$E,2049,14 +$E,2476,16 +$E,2572,12 +$E,2702,6 +$E,3365,19 +$E,4165,23 +$E,4224,25 +$E,4243,51 +$E,4263,56 +$E,4305,23 +$E,4324,30 +$E,4344,44 +$E,4431,9 +$E,4783,24 +$E,4802,35 +$E,4822,38 +$E,4867,30 +$E,4887,42 +$E,4907,39 +$E,4965,26 +$E,6565,15 +$E,6844,62 +$E,6931,28 +$E,7137,4 +$E,7151,35 +$E,7155,16 +$E,7486,12 +$E,8006,6 +$E,8046,20 +$E,8169,18 +$E,8480,19 +$E,8965,8 +$E,8994,22 +$E,9074,28 +$E,9127,167 +$E,9344,20 +$E,9391,30 +$E,9412,19 +$E,9431,12 +$E,9431,31 +$E,9832,26 +$E,9851,25 +$E,9871,31 +$E,10725,15 +$E,11844,12 +$E,11931,26 +$E,12250,8 +$E,12271,9 +$E,12291,17 +$E,12965,7 +$E,13699,15 +$E,13719,30 +$E,13740,24 +$E,13765,19 +$E,13871,7 +$E,13931,22 +$E,13951,30 +$E,13970,23 +$E,14320,7 +$E,14340,15 +$E,14344,76 +$E,14359,14 +$E,14368,55 +$E,14376,6 +$E,14431,68 +$E,14431,24 +$E,14743,51 +$E,14748,12 +$E,15056,56 +$E,15061,12 +$E,16844,120 +$E,16868,184 +$E,16876,38 +$E,16877,22 +$E,16931,99 +$E,16931,44 +$E,17243,103 +$E,17244,35 +$E,17248,12 +$E,17248,6 +$E,17249,7 +$E,17556,102 +$E,17556,24 +$E,17559,31 +$E,17560,7 +$E,17561,14 +$E,19129,15 +$E,19344,99 +$E,19431,131 +$E,19431,43 +$E,19435,28 +$E,19436,15 +$E,20030,4 +$E,20069,19 +$E,20181,8 +$E,20185,60 +$E,20185,8 +$E,20243,127 +$E,20251,19 +$E,20252,6 +$E,20306,127 +$E,20314,15 +$E,20314,6 +$E,20368,19 +$E,20372,87 +$E,20372,46 +$E,20374,14 +$E,20375,16 +$E,20376,19 +$E,20594,110 +$E,20681,56 +$E,20681,14 +$E,20684,6 +$E,20868,152 +$E,20876,28 +$E,20877,12 +$E,20993,38 +$E,20994,7 +$E,21056,15 +$E,21217,15 +$E,21236,30 +$E,21255,8 +$E,21306,32 +$E,21309,15 +$E,21311,4 +$E,21577,28 +$E,21603,20 +$E,21618,24 +$E,21868,143 +$E,21876,15 +$E,21877,15 +$E,21931,17 +$E,21951,15 +$E,22243,28 +$E,22556,18 +$E,23307,8 +$E,23326,31 +$E,23366,24 +$E,23591,22 +$E,24156,30 +$E,24175,14 +$E,24191,11 +$E,24273,31 +$E,24312,24 +$E,24322,4 +$E,24344,46 +$E,25375,12 +$E,25395,15 +$E,26715,19 +$E,26735,7 +$E,26844,31 +$E,27156,18 +$E,27176,11 +$E,27840,4 +$E,27859,12 +$E,27896,15 +$E,28227,27 +$E,28424,6 +$E,29067,17 +$E,29344,66 +$E,29368,24 +$E,29431,7 +$E,29618,116 +$E,29626,15 +$E,29743,23 +$E,29931,60 +$E,29939,14 +$E,30056,24 +$E,30056,4 +$E,30368,17 +$E,30594,44 +$E,30681,46 +$E,30681,11 +$E,30737,12 +$E,31038,7 +$E,31057,16 +$E,31077,24 +$E,31097,14 +$E,31117,15 +$E,31136,25 +$E,31844,25 +$E,31931,17 +$E,32166,7 +$E,32773,5 +$E,32793,15 +$E,32813,6 +$E,34037,31 +$E,34344,63 +$E,34368,152 +$E,34376,28 +$E,34377,23 +$E,34431,51 +$E,34618,169 +$E,34626,23 +$E,34627,4 +$E,34660,9 +$E,34679,7 +$E,34743,26 +$E,34931,143 +$E,34939,6 +$E,35056,30 +$E,35056,7 +$E,35071,6 +$E,35091,15 +$E,35111,17 +$E,35366,28 +$E,35368,24 +$E,35556,127 +$E,35564,5 +$E,35594,30 +$E,35681,30 +$E,35868,106 +$E,35873,8 +$E,35876,16 +$E,35876,12 +$E,35931,112 +$E,35934,4 +$E,35939,13 +$E,35993,33 +$E,36165,12 +$E,36306,48 +$E,36309,7 +$E,36310,11 +$E,36493,169 +$E,36501,24 +$E,36502,22 +$E,36618,56 +$E,36844,88 +$E,36931,62 +$E,36931,9 +$E,36934,15 +$E,36935,7 +$E,37243,60 +$E,37243,15 +$E,37248,4 +$E,37275,7 +$E,37294,16 +$E,37765,12 +$E,39343,58 +$E,41131,7 +$E,41589,7 +$E,41627,14 +$E,44164,16 +$E,45764,6 +$E,46564,7 +$E,48332,8 +$E,49477,11 +$E,49500,259 +$E,49504,25 +$E,49505,63 +$E,49506,7 +$E,49508,59 +$E,49562,254 +$E,49564,28 +$E,49566,15 +$E,49571,28 +$E,49572,33 +$E,49575,19 +$E,49576,15 +$E,49578,57 +$E,49578,14 +$E,49579,15 +$E,49633,224 +$E,49635,12 +$E,49638,39 +$E,49639,7 +$E,49639,51 +$E,49640,7 +$E,49640,6 +$E,49641,45 +$E,49642,28 +$E,49883,216 +$E,49883,30 +$E,49884,15 +$E,49885,28 +$E,49887,24 +$E,49887,48 +$E,49888,103 +$E,49889,24 +$E,49890,30 +$STOP,50,35112397.68,11844,627,17553,43,4,76 +$START,51,15433 +$E,847,7 +$E,987,99 +$E,3042,7 +$E,3487,102 +$E,4931,4 +$E,4951,18 +$E,5987,60 +$E,7842,9 +$E,8390,12 +$E,8487,126 +$E,8646,12 +$E,10987,80 +$E,11095,6 +$E,11115,7 +$E,11135,12 +$E,11283,14 +$E,11842,11 +$E,11983,8 +$E,12318,19 +$E,12612,6 +$E,12652,7 +$E,12670,11 +$E,13487,64 +$E,14842,15 +$E,15987,129 +$E,18284,7 +$E,18303,14 +$E,18487,39 +$E,19003,23 +$E,19012,9 +$E,19737,60 +$E,20566,39 +$E,20567,6 +$E,20571,7 +$E,20572,7 +$E,20878,52 +$E,20941,47 +$E,20947,9 +$E,20987,24 +$E,21191,31 +$E,21192,8 +$E,21253,44 +$E,22753,40 +$E,22754,6 +$E,22759,14 +$E,23487,62 +$E,23890,7 +$E,24629,7 +$E,25279,7 +$E,25301,6 +$E,25320,19 +$E,25498,13 +$E,25847,7 +$E,25987,22 +$E,27042,9 +$E,28487,35 +$E,29128,24 +$E,29191,25 +$E,29195,20 +$E,29198,12 +$E,29241,7 +$E,29253,20 +$E,29260,4 +$E,29737,26 +$E,30253,24 +$E,30358,4 +$E,30566,35 +$E,30886,48 +$E,30892,6 +$E,30987,52 +$E,31191,7 +$E,31230,4 +$E,31940,4 +$E,33013,15 +$E,33448,6 +$E,33481,7 +$E,33501,7 +$E,34507,131 +$E,35858,6 +$E,35987,64 +$E,36191,31 +$E,36197,9 +$E,36781,8 +$E,36801,24 +$E,38487,46 +$E,40986,43 +$E,43486,92 +$E,43690,35 +$E,43691,11 +$E,44246,6 +$E,44305,8 +$E,44360,7 +$E,45986,56 +$E,48486,44 +$E,50726,399 +$E,50824,8 +$E,50986,41 +$E,53486,28 +$E,54245,6 +$E,55986,12 +$E,56397,14 +$E,58486,16 +$E,67840,7 +$E,67970,7 +$E,67991,7 +$E,69358,12 +$E,69442,15 +$E,69526,7 +$E,69546,6 +$E,70150,15 +$E,70336,10 +$E,71040,9 +$E,73486,54 +$E,73721,51 +$E,73729,7 +$E,75698,15 +$E,75844,7 +$E,75955,12 +$E,75974,11 +$STOP,51,35112409.60,30180,119,18118,23,7,37 +$START,52,31729 +$E,2591,39 +$E,3088,5 +$E,5861,14 +$E,8068,13 +$E,14849,6 +$E,15602,19 +$E,15609,12 +$E,16414,7 +$E,16733,233 +$E,16734,35 +$E,16736,14 +$E,16737,7 +$E,16739,49 +$E,16739,15 +$E,16742,50 +$E,16742,23 +$E,17014,40 +$E,17018,7 +$E,17021,24 +$E,17327,28 +$E,17327,14 +$E,17334,12 +$E,17639,7 +$E,17643,15 +$E,17646,4 +$E,17702,14 +$E,17708,7 +$E,17952,35 +$E,17955,14 +$E,17983,41 +$E,18234,4 +$E,18280,116 +$E,18289,4 +$E,18577,15 +$E,18750,20 +$E,18770,24 +$E,18889,19 +$E,19202,20 +$E,19233,13 +$E,19419,24 +$E,19827,14 +$E,20139,38 +$E,20327,23 +$E,20452,53 +$E,20455,15 +$E,20483,71 +$E,20606,5 +$E,20639,63 +$E,20842,12 +$E,20846,62 +$E,20850,7 +$E,20952,92 +$E,20957,8 +$E,21026,24 +$E,21026,7 +$E,21077,31 +$E,21264,64 +$E,21268,4 +$E,21350,6 +$E,21428,33 +$E,21456,28 +$E,21577,86 +$E,21647,7 +$E,21651,23 +$E,21651,9 +$E,21654,7 +$E,21655,15 +$E,21702,43 +$E,21733,65 +$E,21764,23 +$E,21773,7 +$E,21889,99 +$E,22202,127 +$E,22205,11 +$E,22827,88 +$E,22830,6 +$E,22830,11 +$E,22862,30 +$E,22862,7 +$E,22871,5 +$E,22897,8 +$E,22901,28 +$E,22932,7 +$E,22952,28 +$E,22982,30 +$E,23139,100 +$E,23143,8 +$E,23210,12 +$E,23213,28 +$E,23214,6 +$E,23264,56 +$E,23269,23 +$E,23331,24 +$E,23452,88 +$E,23457,8 +$E,23518,13 +$E,23577,35 +$E,23580,7 +$E,23667,16 +$E,23764,30 +$E,24077,32 +$E,24202,25 +$E,24212,12 +$E,24232,54 +$E,24389,19 +$E,24498,6 +$E,24518,12 +$E,24702,23 +$E,25014,19 +$E,25327,9 +$E,25482,56 +$E,25639,9 +$E,27238,236 +$E,27827,15 +$E,27982,33 +$E,28577,19 +$E,28639,9 +$E,28889,15 +$E,28952,12 +$E,29202,27 +$E,29232,54 +$E,29646,8 +$E,30014,14 +$E,30189,6 +$E,30482,51 +$E,35482,32 +$E,35757,8 +$E,36410,12 +$E,36889,15 +$E,36908,8 +$E,37613,14 +$E,37982,48 +$E,40481,44 +$E,40723,4 +$E,42981,31 +$E,42991,8 +$E,45481,44 +$E,46228,8 +$E,47683,7 +$E,47906,7 +$E,47981,48 +$E,50481,14 +$E,51608,9 +$E,52403,7 +$E,52422,7 +$E,52438,15 +$E,52981,62 +$E,55481,46 +$E,57981,44 +$E,60469,7 +$E,60481,79 +$E,61235,12 +$E,62682,15 +$E,62807,7 +$E,62981,84 +$E,65481,29 +$E,65568,8 +$E,66425,12 +$E,66445,16 +$E,66809,7 +$E,67607,8 +$E,67981,76 +$E,70376,12 +$E,70481,72 +$E,71427,6 +$E,71473,12 +$E,71550,4 +$E,72408,5 +$E,72981,33 +$E,73352,8 +$E,75481,72 +$E,77981,40 +$STOP,52,35112420.8,48353,172,17991,31,7,39 +$START,53,50570 +$E,1105,38 +$E,2318,14 +$E,2911,6 +$E,2931,24 +$E,2952,12 +$E,3201,7 +$E,3221,7 +$E,3241,8 +$E,3257,20 +$E,3605,24 +$E,4706,9 +$E,4726,8 +$E,6105,56 +$E,7231,7 +$E,8605,38 +$E,12046,11 +$E,15222,7 +$E,19624,7 +$E,21686,6 +$E,24030,7 +$E,25543,9 +$E,25562,9 +$E,28605,38 +$E,28833,6 +$E,28840,24 +$E,28986,9 +$E,30087,17 +$E,33726,9 +$E,39408,10 +$E,39446,12 +$E,39551,9 +$E,40235,16 +$E,40278,6 +$E,41466,15 +$E,41486,7 +$E,41976,5 +$E,44007,12 +$E,44220,316 +$E,46149,5 +$E,46168,12 +$E,47364,7 +$E,48033,4 +$E,48081,7 +$E,48133,19 +$E,48588,7 +$E,48751,12 +$E,48771,7 +$E,52341,8 +$E,52808,11 +$E,53062,19 +$E,53081,7 +$E,55229,10 +$E,65132,209 +$E,67833,7 +$E,67852,7 +$E,69606,12 +$STOP,53,35112430.87,63826,56,17904,19,0,9 +$START,54,64816 +$E,200,7 +$E,219,28 +$E,264,7 +$E,280,12 +$E,826,15 +$E,845,19 +$E,884,16 +$E,940,9 +$E,1063,11 +$E,1279,13 +$E,1299,24 +$E,5444,19 +$E,5465,9 +$E,5852,14 +$E,7953,12 +$E,8556,6 +$E,8655,7 +$E,9114,7 +$E,14302,7 +$E,14648,8 +$E,16374,14 +$E,17047,21 +$E,17857,24 +$E,17875,27 +$E,18648,23 +$E,19448,8 +$E,21047,9 +$E,21847,24 +$E,22647,24 +$E,24999,7 +$E,25019,14 +$E,25058,9 +$E,25705,19 +$E,27298,14 +$E,27334,14 +$E,27353,28 +$E,27447,27 +$E,28104,31 +$E,28125,31 +$E,28165,30 +$E,28249,36 +$E,28286,18 +$E,28305,33 +$E,28888,12 +$E,28954,18 +$E,28974,31 +$E,28993,30 +$E,31448,12 +$E,32248,14 +$E,33988,15 +$E,34027,19 +$E,34563,14 +$E,36247,20 +$E,37047,24 +$E,38387,6 +$E,38407,22 +$E,38427,24 +$E,38647,17 +$E,40248,7 +$E,40293,11 +$E,40313,28 +$E,40332,31 +$E,42044,28 +$E,42083,32 +$E,42519,24 +$E,42646,28 +$E,43446,23 +$E,44914,8 +$E,44933,23 +$E,45126,15 +$E,46098,7 +$E,46148,25 +$E,47380,22 +$E,47400,24 +$E,47420,30 +$E,47479,24 +$E,47509,30 +$E,47528,39 +$E,47549,38 +$E,48800,7 +$E,49366,7 +$E,49479,8 +$E,49636,4 +$E,49656,15 +$E,49676,23 +$E,49846,14 +$E,50184,19 +$E,51459,19 +$E,52223,15 +$E,52868,19 +$E,52887,28 +$E,52908,23 +$E,53008,15 +$E,53027,28 +$E,53047,24 +$E,53062,24 +$E,53846,4 +$E,54402,12 +$E,57046,7 +$E,57359,9 +$E,57379,28 +$E,57846,20 +$E,58647,24 +$E,58759,5 +$E,58870,30 +$E,58889,29 +$E,58909,24 +$E,61846,24 +$E,62646,12 +$E,63446,15 +$E,65524,5 +$E,65544,7 +$E,66449,240 +$E,66652,15 +$E,70646,7 +$E,72680,12 +$E,72700,20 +$E,72719,24 +$E,73046,15 +$E,75446,15 +$E,76444,17 +$E,76464,20 +$E,77692,9 +$E,77712,19 +$E,77748,7 +$E,77810,25 +$E,77846,17 +$STOP,54,35112441.9,14208,127,17664,16,3,9 +$START,55,15999 +$E,1192,12 +$E,2107,16 +$E,2126,15 +$E,2146,15 +$E,7434,6 +$E,7453,9 +$E,8450,6 +$E,8470,7 +$E,8489,11 +$E,8884,27 +$E,8910,24 +$E,8929,31 +$E,9191,31 +$E,10972,12 +$E,10992,25 +$E,11011,23 +$E,11602,8 +$E,12839,9 +$E,13170,15 +$E,13191,7 +$E,13207,28 +$E,13991,30 +$E,14791,27 +$E,14977,33 +$E,15000,25 +$E,15019,39 +$E,17681,7 +$E,17701,7 +$E,18676,8 +$E,18695,12 +$E,18948,24 +$E,20410,8 +$E,23591,8 +$E,24391,14 +$E,25130,15 +$E,25150,15 +$E,25170,20 +$E,25191,12 +$E,26021,14 +$E,29202,6 +$E,32124,8 +$E,32144,11 +$E,34412,14 +$E,34451,31 +$E,34471,19 +$E,34491,24 +$E,34806,24 +$E,34822,36 +$E,34842,28 +$E,34862,19 +$E,34881,24 +$E,34900,28 +$E,35164,27 +$E,35183,14 +$E,35207,12 +$E,35607,23 +$E,35952,24 +$E,35972,35 +$E,35992,48 +$E,40392,17 +$E,42574,11 +$E,42594,15 +$E,44077,8 +$E,44097,22 +$E,44875,25 +$E,44895,32 +$E,45065,12 +$E,45085,24 +$E,45104,39 +$E,49990,7 +$E,51920,8 +$E,53235,15 +$E,53557,32 +$E,54834,12 +$E,54905,7 +$E,56405,11 +$E,56763,15 +$E,58158,6 +$E,58590,8 +$E,58609,19 +$E,58629,16 +$E,59356,8 +$E,59730,12 +$E,60251,14 +$E,60397,7 +$E,61206,7 +$E,61327,13 +$E,62776,6 +$E,62844,15 +$E,62884,12 +$E,63042,8 +$E,63062,15 +$E,63082,16 +$E,63108,19 +$E,63591,6 +$E,66010,13 +$E,67571,16 +$E,67591,6 +$E,69031,8 +$E,69050,15 +$E,69107,12 +$E,69190,14 +$E,69225,7 +$E,69245,11 +$E,69264,24 +$E,69309,24 +$E,69605,4 +$E,69625,8 +$E,69993,15 +$E,70923,4 +$E,71689,7 +$E,72390,8 +$E,76390,7 +$STOP,55,35112451.61,30539,113,18190,20,2,19 +$START,56,32278 +$E,11415,14 +$E,12053,6 +$E,12088,6 +$E,12542,7 +$E,13365,19 +$E,14823,8 +$E,16352,25 +$E,16530,11 +$E,17775,11 +$E,21383,7 +$E,26031,6 +$E,26579,12 +$E,28891,7 +$E,29013,15 +$E,29113,4 +$E,29351,6 +$E,30328,5 +$E,30575,12 +$E,30615,17 +$E,30626,14 +$E,30629,6 +$E,30640,7 +$E,30688,19 +$E,30970,24 +$E,31190,24 +$E,31206,15 +$E,31233,8 +$E,31376,8 +$E,31598,55 +$E,32424,7 +$E,32439,15 +$E,32516,9 +$E,32979,15 +$E,33581,19 +$E,33775,15 +$E,35753,7 +$E,36176,7 +$E,36744,14 +$E,38689,7 +$E,39144,7 +$E,39164,4 +$E,39203,7 +$E,39406,12 +$E,39422,8 +$E,39439,15 +$E,39444,7 +$E,39453,19 +$E,39572,11 +$E,39591,4 +$E,39760,13 +$E,40078,32 +$E,40174,4 +$E,40216,14 +$E,40223,12 +$E,40266,7 +$E,40391,47 +$E,42451,7 +$E,44087,7 +$E,44516,15 +$E,44642,24 +$E,44664,12 +$E,44737,14 +$E,44766,16 +$E,44841,6 +$E,44974,15 +$E,45236,16 +$E,45257,9 +$E,45391,15 +$E,45627,12 +$E,45661,8 +$E,45693,7 +$E,45711,17 +$E,45728,20 +$E,46016,12 +$E,46167,26 +$E,46200,15 +$E,46574,7 +$E,46603,15 +$E,46624,24 +$E,46645,9 +$E,47016,14 +$E,47719,18 +$E,47891,19 +$E,48516,6 +$E,50380,6 +$E,50399,12 +$E,52531,7 +$E,55374,14 +$E,55648,63 +$E,55747,7 +$E,58261,14 +$E,58281,7 +$E,58300,15 +$E,63348,7 +$E,64009,6 +$E,65002,8 +$E,65238,7 +$E,65549,9 +$E,66574,12 +$E,67366,7 +$E,67401,7 +$STOP,56,35112462.9,46477,101,17616,24,2,23 +$START,57,47907 +$E,2221,11 +$E,2237,12 +$E,2257,8 +$E,2347,6 +$E,2366,22 +$E,2386,7 +$E,7391,6 +$E,8609,7 +$E,10234,7 +$E,10250,28 +$E,10285,9 +$E,10314,24 +$E,13409,14 +$E,16609,7 +$E,16874,4 +$E,18209,15 +$E,22023,12 +$E,23081,4 +$E,23100,15 +$E,23643,7 +$E,24522,7 +$E,24609,15 +$E,24685,12 +$E,24995,22 +$E,25161,9 +$E,25164,6 +$E,25181,6 +$E,25409,17 +$E,25773,8 +$E,26215,4 +$E,26484,4 +$E,26512,9 +$E,27022,15 +$E,27794,7 +$E,27830,6 +$E,27850,19 +$E,27911,16 +$E,29522,23 +$E,30772,20 +$E,31049,7 +$E,32022,12 +$E,35009,13 +$E,35379,7 +$E,35422,15 +$E,35803,7 +$E,37022,12 +$E,37599,8 +$E,39521,6 +$E,40592,13 +$E,40703,15 +$E,41100,12 +$E,42208,12 +$E,43035,7 +$E,43090,8 +$E,43271,16 +$E,43452,51 +$E,43459,14 +$E,43467,89 +$E,43475,6 +$E,43476,14 +$E,43514,67 +$E,43522,9 +$E,43530,117 +$E,43538,22 +$E,43538,7 +$E,43897,9 +$E,43912,32 +$E,44521,35 +$E,45505,9 +$E,45658,14 +$E,45678,18 +$E,45698,20 +$E,45771,11 +$E,47021,19 +$E,49521,19 +$E,51077,38 +$E,52021,60 +$E,54521,52 +$E,57021,19 +$E,57671,5 +$E,59521,66 +$E,62021,60 +$E,64521,35 +$E,66140,7 +$E,67021,56 +$E,69407,11 +$E,69521,15 +$E,71807,12 +$E,72021,11 +$E,74035,7 +$E,74215,4 +$E,74521,48 +$E,77021,54 +$E,77227,12 +$E,77247,16 +$STOP,57,35112472.47,61975,95,17650,21,4,16 +$START,58,63459 +$E,322,15 +$E,934,80 +$E,1116,6 +$E,1920,10 +$E,3434,77 +$E,5283,6 +$E,5934,47 +$E,6720,6 +$E,8434,71 +$E,10934,44 +$E,12320,4 +$E,13434,48 +$E,15934,48 +$E,17311,7 +$E,17350,15 +$E,17370,7 +$E,17415,6 +$E,18434,15 +$E,20934,44 +$E,22757,4 +$E,23434,25 +$E,24325,6 +$E,25934,15 +$E,28099,7 +$E,28320,7 +$E,28433,17 +$E,28434,26 +$E,28453,8 +$E,28463,5 +$E,28473,14 +$E,30108,11 +$E,30934,8 +$E,33200,6 +$E,33434,6 +$E,35934,48 +$E,36373,8 +$E,38112,12 +$E,38434,28 +$E,40871,14 +$E,40890,12 +$E,40933,15 +$E,43433,41 +$E,43519,6 +$E,44133,7 +$E,44153,6 +$E,44173,12 +$E,44996,7 +$E,45933,12 +$E,46408,7 +$E,46447,12 +$E,48433,15 +$E,50933,35 +$E,51522,7 +$E,52319,7 +$E,53287,6 +$E,53306,6 +$E,53433,35 +$E,53675,6 +$E,53695,15 +$E,53798,7 +$E,54668,5 +$E,55933,31 +$E,56911,19 +$E,57071,7 +$E,57575,12 +$E,58433,33 +$E,60932,74 +$E,62005,6 +$E,63432,48 +$E,65932,56 +$E,68432,48 +$E,70932,34 +$E,73432,31 +$E,75932,37 +$E,77657,6 +$STOP,58,35112482.85,11523,75,18196,22,1,14 +$START,59,12659 +$E,661,38 +$E,935,15 +$E,955,7 +$E,1600,14 +$E,1620,7 +$E,1743,7 +$E,3161,19 +$E,4572,11 +$E,8161,33 +$E,10223,6 +$E,12894,60 +$E,13161,30 +$E,14566,9 +$E,15661,28 +$E,17690,4 +$E,17723,14 +$E,18161,9 +$E,20661,31 +$E,20936,7 +$E,21647,7 +$E,30740,12 +$E,30802,63 +$E,30818,6 +$E,31083,48 +$E,31146,6 +$E,31286,11 +$E,31625,28 +$E,32849,55 +$E,35349,44 +$E,37848,38 +$E,40347,67 +$E,42847,54 +$E,43423,12 +$E,43954,7 +$E,44280,12 +$E,45347,44 +$E,45360,8 +$E,45379,11 +$E,47847,64 +$E,50347,71 +$E,52619,6 +$E,52847,49 +$E,53068,7 +$E,55347,46 +$E,55681,4 +$E,57847,64 +$E,60347,47 +$E,60845,6 +$E,61192,12 +$E,61212,6 +$E,61779,7 +$E,62847,61 +$E,65347,60 +$E,67245,7 +$E,67847,48 +$E,68696,4 +$E,69934,9 +$E,70347,53 +$E,70445,9 +$E,70802,9 +$E,72847,38 +$E,72991,7 +$E,73011,12 +$E,75098,4 +$E,75274,44 +$E,75302,15 +$E,75321,13 +$E,75347,39 +$E,75520,108 +$E,75528,24 +$E,75770,71 +$E,75770,24 +$E,75774,17 +$E,75778,10 +$E,76395,56 +$E,76403,7 +$E,76403,8 +$E,76597,34 +$E,76707,135 +$E,76710,6 +$E,76711,7 +$E,76715,7 +$E,76716,33 +$E,76717,6 +$E,76973,8 +$E,77029,7 +$E,77332,121 +$E,77339,12 +$E,77341,28 +$E,77395,31 +$E,77403,6 +$E,77530,15 +$E,77751,15 +$E,77847,55 +$E,77957,76 +$E,77962,7 +$STOP,59,35112493.13,26788,96,18060,27,1,14 +$ENV,59,35112493.51,23.3,57.0,23.9,54.4,23.26,971.34 +$START,60,28846 +$E,1117,8 +$E,1125,12 +$E,1235,109 +$E,1244,14 +$E,1684,7 +$E,1800,7 +$E,1821,4 +$E,1840,14 +$E,2485,140 +$E,2494,28 +$E,2798,110 +$E,2806,17 +$E,2806,11 +$E,2958,12 +$E,3123,11 +$E,3625,44 +$E,6125,15 +$E,8625,9 +$E,9269,7 +$E,11125,17 +$E,11197,9 +$E,11216,19 +$E,11284,12 +$E,11303,16 +$E,12359,9 +$E,13356,72 +$E,13625,7 +$E,14331,5 +$E,16125,22 +$E,18625,19 +$E,18638,4 +$E,21125,22 +$E,23625,24 +$E,26125,15 +$E,26676,15 +$E,28625,9 +$E,28723,7 +$E,29002,14 +$E,29043,7 +$E,29265,14 +$E,29425,7 +$E,30509,14 +$E,31125,24 +$E,31923,12 +$E,33625,12 +$E,33751,7 +$E,33998,17 +$E,36125,9 +$E,37253,5 +$E,37996,10 +$E,38625,7 +$E,39122,14 +$E,39922,6 +$E,40629,7 +$E,41124,12 +$E,42330,7 +$E,46124,7 +$E,48624,12 +$E,49989,12 +$E,51124,7 +$E,53624,15 +$E,54328,7 +$E,56124,15 +$E,61124,23 +$E,63624,6 +$E,69333,7 +$E,71124,12 +$STOP,60,35112503.59,42290,67,17758,30,3,17 +$START,61,43350 +$E,9948,4 +$E,12130,124 +$E,16235,6 +$E,16714,6 +$E,17792,7 +$E,17999,16 +$E,18010,11 +$E,18249,7 +$E,18282,7 +$E,18936,56 +$E,18943,4 +$E,20225,19 +$E,20251,6 +$E,20271,15 +$E,20709,6 +$E,20749,30 +$E,21061,48 +$E,21124,12 +$E,21475,24 +$E,22619,7 +$E,22638,15 +$E,22725,30 +$E,22728,11 +$E,23257,7 +$E,25225,19 +$E,27725,16 +$E,27936,35 +$E,29186,25 +$E,29249,10 +$E,29499,94 +$E,29502,9 +$E,29503,15 +$E,29507,7 +$E,29811,127 +$E,29816,4 +$E,29817,15 +$E,29819,14 +$E,30225,78 +$E,32725,59 +$E,36150,12 +$E,37725,96 +$E,40224,67 +$E,41226,4 +$E,42724,39 +$E,45224,92 +$E,47724,88 +$E,49592,11 +$E,50224,78 +$E,52724,108 +$E,55224,89 +$E,57724,71 +$E,60224,96 +$E,62724,95 +$E,65224,63 +$E,67136,4 +$E,67723,92 +$E,67893,7 +$E,68848,6 +$E,69172,7 +$E,70223,79 +$E,72680,4 +$E,72723,48 +$E,72851,7 +$E,73907,4 +$E,73932,4 +$E,73951,4 +$E,73971,12 +$E,75223,83 +$E,77723,86 +$STOP,61,35112513.83,56870,69,18251,14,3,12 +$START,62,57965 +$E,73,63 +$E,153,23 +$E,172,17 +$E,192,15 +$E,490,11 +$E,2573,78 +$E,3419,4 +$E,5073,25 +$E,7573,19 +$E,10073,41 +$E,20800,7 +$E,32334,5 +$E,33330,6 +$E,36530,7 +$E,38774,4 +$E,38813,12 +$E,38963,8 +$E,41164,12 +$E,44202,7 +$E,52150,8 +$E,53799,15 +$E,53819,5 +$E,53840,8 +$E,54739,6 +$E,58760,11 +$E,58780,10 +$E,60250,14 +$E,65242,177 +$E,68307,9 +$E,75314,4 +$E,75760,6 +$E,76337,7 +$E,76387,7 +$E,77330,14 +$STOP,62,35112524.10,5353,34,18381,13,2,17 +$START,63,6080 +$E,554,8 +$E,2142,4 +$E,6682,7 +$E,7243,6 +$E,9102,6 +$E,13342,11 +$E,14489,5 +$E,14763,7 +$E,14802,8 +$E,14822,7 +$E,15753,6 +$E,17394,6 +$E,17556,7 +$E,17576,6 +$E,17599,4 +$E,24936,96 +$E,28716,7 +$E,28927,4 +$E,31418,10 +$E,32018,8 +$E,32038,9 +$E,32058,7 +$E,32395,7 +$E,33441,4 +$E,41631,7 +$E,42468,7 +$E,43719,5 +$E,46479,7 +$E,46518,14 +$E,50151,7 +$E,52702,6 +$E,52921,6 +$E,53878,9 +$E,64718,7 +$E,74134,12 +$E,75263,12 +$E,75448,12 +$E,76833,7 +$E,77734,4 +$STOP,63,35112534.23,19062,39,17923,17,2,22 +$START,64,19831 +$E,6066,7 +$E,12103,7 +$E,12767,4 +$E,14861,7 +$E,15665,9 +$E,15695,6 +$E,18700,4 +$E,25484,6 +$E,26880,11 +$E,26921,8 +$E,31583,6 +$E,31747,12 +$E,32805,7 +$E,34335,8 +$E,36554,6 +$E,40102,6 +$E,44376,6 +$E,44397,11 +$E,52033,13 +$E,52793,7 +$E,52886,6 +$E,53062,12 +$E,54159,7 +$E,61766,15 +$E,61786,14 +$E,64122,72 +$E,69869,7 +$E,69888,9 +$E,70687,4 +$E,71517,6 +$E,77758,4 +$STOP,64,35112544.38,32720,31,18157,17,2,18 +$START,65,33523 +$E,6845,6 +$E,12235,13 +$E,12833,14 +$E,12853,9 +$E,12873,7 +$E,13228,12 +$E,18568,6 +$E,20865,11 +$E,20886,8 +$E,20972,8 +$E,21339,7 +$E,30110,8 +$E,31448,4 +$E,32206,7 +$E,32246,6 +$E,38848,6 +$E,39186,7 +$E,39870,12 +$E,47153,5 +$E,48063,4 +$E,49230,15 +$E,49412,7 +$E,49451,6 +$E,50331,12 +$E,50536,11 +$E,54077,156 +$E,59284,6 +$E,59315,4 +$E,62912,7 +$E,63904,12 +$E,65513,7 +$E,69160,7 +$E,70027,6 +$E,70393,61 +$E,75447,11 +$E,75467,9 +$STOP,65,35112554.52,46482,36,18174,21,3,17 +$START,66,47233 +$E,381,7 +$E,2091,7 +$E,6214,8 +$E,14783,6 +$E,17620,7 +$E,27279,12 +$E,28596,6 +$E,28801,6 +$E,28821,12 +$E,32544,7 +$E,33839,12 +$E,38905,344 +$E,40388,14 +$E,43334,7 +$E,43353,12 +$E,43588,7 +$E,43712,7 +$E,44701,113 +$E,56915,8 +$E,56916,48 +$E,60650,7 +$E,63583,5 +$E,64912,4 +$E,65810,6 +$E,69788,12 +$E,75338,7 +$E,75357,11 +$STOP,66,35112564.66,60084,27,18336,15,3,21 +$START,67,60965 +$E,1515,146 +$E,1915,11 +$E,3653,7 +$E,4812,6 +$E,6862,7 +$E,7882,7 +$E,12981,15 +$E,14014,4 +$E,16844,7 +$E,24573,15 +$E,36352,7 +$E,43975,7 +$E,44310,7 +$E,53354,4 +$E,53991,6 +$E,55226,4 +$E,62925,12 +$STOP,67,35112574.81,8171,17,18028,17,3,15 +$START,68,8747 +$E,1454,7 +$E,29758,6 +$E,35054,16 +$E,38217,4 +$E,41042,8 +$E,41369,7 +$E,42252,7 +$E,55302,6 +$E,55315,7 +$E,65570,4 +$E,66706,6 +$E,73800,7 +$E,75144,5 +$E,75752,7 +$E,77452,7 +$E,77809,7 +$STOP,68,35112584.90,21480,16,18210,13,2,17 +$START,69,22065 +$E,3399,8 +$E,8633,7 +$E,19360,7 +$E,25800,8 +$E,28998,22 +$E,29337,9 +$E,29357,7 +$E,34601,6 +$E,42738,7 +$E,45103,4 +$E,46679,9 +$E,46856,7 +$E,63376,15 +$E,63397,7 +$E,70955,48 +$E,71045,6 +$E,73327,7 +$E,76415,7 +$STOP,69,35112594.99,34816,18,18347,17,1,10 +$START,70,35366 +$E,2624,4 +$E,4178,13 +$E,5581,120 +$E,5730,10 +$E,7811,4 +$E,12560,7 +$E,15217,6 +$E,15237,7 +$E,24843,4 +$E,30960,4 +$E,31173,7 +$E,36146,6 +$E,43601,163 +$E,44958,128 +$E,50069,6 +$E,54364,4 +$E,55192,4 +$E,57635,15 +$E,58689,7 +$E,60014,6 +$STOP,70,35112605.9,48139,20,18059,8,3,16 +$START,71,48748 +$E,14701,8 +$E,23574,7 +$E,23601,97 +$E,35105,7 +$E,35985,7 +$E,36217,6 +$E,41645,6 +$E,41875,4 +$E,52433,11 +$E,65407,7 +$E,65919,7 +$E,72049,4 +$E,72284,6 +$E,73134,6 +$E,77895,10 +$STOP,71,35112615.19,61474,15,18332,11,4,5 +$START,72,61999 +$E,5707,50 +$E,8791,7 +$E,8810,4 +$E,9033,7 +$E,9190,11 +$E,10316,10 +$E,10854,7 +$E,11768,24 +$E,11789,14 +$E,11923,7 +$E,11946,12 +$E,12484,6 +$E,12869,4 +$E,14213,9 +$E,14404,7 +$E,14424,6 +$E,14733,14 +$E,18518,5 +$E,27078,7 +$E,27573,14 +$E,28328,7 +$E,30047,9 +$E,30066,6 +$E,34960,13 +$E,35228,12 +$E,35248,6 +$E,36006,6 +$E,36183,4 +$E,36662,6 +$E,37224,4 +$E,37265,4 +$E,40185,6 +$E,45236,4 +$E,48258,7 +$E,52856,13 +$E,56315,6 +$E,61793,748 +$E,62063,6 +$E,62741,15 +$E,65902,14 +$E,67294,6 +$E,67763,8 +$E,68450,7 +$E,70026,7 +$E,72494,6 +$E,75733,7 +$STOP,72,35112625.27,9558,46,18634,28,3,19 +$START,73,10394 +$E,8031,5 +$E,8050,4 +$E,19017,6 +$E,19056,6 +$E,24864,7 +$E,25071,7 +$E,27385,15 +$E,42829,14 +$E,43389,5 +$E,44984,7 +$E,47166,6 +$E,48351,4 +$E,48961,4 +$E,48984,6 +$E,53759,8 +$E,54142,12 +$E,57458,7 +$E,64372,306 +$E,75383,6 +$E,76838,7 +$E,76858,7 +$STOP,73,35112635.44,23178,21,17993,13,3,14 +$START,74,23792 +$E,5346,8 +$E,16039,12 +$E,16178,12 +$E,16397,7 +$E,16416,14 +$E,18876,9 +$E,20059,6 +$E,28057,6 +$E,28191,14 +$E,28252,9 +$E,29009,4 +$E,29028,4 +$E,29048,7 +$E,30909,6 +$E,40477,8 +$E,40551,7 +$E,40969,6 +$E,40989,7 +$E,42054,4 +$E,42084,6 +$E,43297,8 +$E,46052,7 +$E,46863,7 +$E,50613,6 +$E,50652,12 +$E,61660,6 +$STOP,74,35112645.55,36625,26,18405,11,2,7 +$START,75,37282 +$E,3711,7 +$E,4239,208 +$E,5423,7 +$E,23030,8 +$E,24517,12 +$E,54610,4 +$E,55394,6 +$E,57451,6 +$E,65183,7 +$E,67827,8 +$E,68621,4 +$STOP,75,35112655.66,49974,11,18361,17,3,16 +$START,76,50463 +$E,25910,6 +$E,48502,6 +$STOP,76,35112665.74,63091,2,18639,8,3,8 +$START,77,63500 +$E,28593,6 +$E,46971,4 +$E,58711,4 +$STOP,77,35112675.79,10599,3,18547,11,1,2 +$START,78,11285 +$E,2254,4 +$E,15887,7 +$E,35037,4 +$E,54570,7 +$E,70496,7 +$STOP,78,35112685.89,23932,5,18976,9,0,8 +$START,79,24366 +$E,5199,6 +$E,24907,4 +$E,26239,6 +$E,28964,35 +$STOP,79,35112695.95,37007,4,18905,7,3,3 +$START,80,37433 +$E,15890,6 +$E,30462,7 +$STOP,80,35112706.1,50060,2,18639,12,2,7 +$START,81,50470 +$E,21906,368 +$E,51906,4 +$E,53624,30 +$E,61782,5 +$E,77651,7 +$STOP,81,35112716.7,63117,5,18462,11,2,2 +$START,82,63556 +$E,4435,6 +$E,8554,7 +$E,32124,7 +$E,54688,6 +$E,70527,4 +$STOP,82,35112726.13,10667,5,17892,5,2,4 +$START,83,11134 +$E,35529,65 +$E,41527,120 +$E,54986,4 +$E,75188,6 +$E,77883,4 +$STOP,83,35112736.20,23784,5,17769,6,0,7 +$START,84,24221 +$E,27697,38 +$E,29991,7 +$E,34572,71 +$E,42485,7 +$E,69289,28 +$STOP,84,35112746.26,36870,5,17922,10,0,5 +$START,85,37308 +$E,11856,24 +$E,24283,4 +$E,75336,132 +$STOP,85,35112756.33,49940,3,17977,5,3,5 +$START,86,50358 +$E,2919,4 +$STOP,86,35112766.39,62980,1,18499,9,3,7 +$START,87,63501 +$E,7824,102 +$E,16238,7 +$E,43901,4 +$STOP,87,35112776.46,10601,3,17849,6,2,8 +$START,88,11157 +$E,14507,108 +$E,28987,4 +$E,34821,6 +$E,43382,51 +$E,53980,6 +$E,76128,6 +$STOP,88,35112786.53,23813,6,18104,5,1,5 +$START,89,24259 +$E,54211,4 +$E,65970,12 +$E,70689,24 +$E,73614,31 +$STOP,89,35112796.60,36901,4,17979,13,3,9 +$ENV,89,35112796.66,23.6,56.7,23.9,54.4,23.40,971.19 +$START,90,37953 +$E,8733,12 +$E,12568,7 +$E,27421,4 +$E,44855,4 +$E,48949,6 +$E,67106,60 +$STOP,90,35112806.74,50608,6,18697,8,1,7 +$START,91,51052 +$E,52610,176 +$E,58948,63 +$STOP,91,35112816.81,63682,2,18435,10,2,4 +$START,92,64128 +$E,397,96 +$E,35203,4 +$E,41521,7 +$E,43132,4 +$STOP,92,35112826.87,11232,4,17742,9,0,5 +$START,93,11658 +$E,16680,7 +$STOP,93,35112836.93,24280,1,18335,12,0,5 +$START,94,24684 +$E,4856,176 +$E,22011,4 +$E,53978,4 +$STOP,94,35112846.99,37320,3,18602,5,1,4 +$START,95,37755 +$E,42752,6 +$E,54527,191 +$E,76906,332 +$STOP,95,35112857.5,50388,3,18256,9,4,6 +$START,96,50805 +$E,16276,4 +$E,37048,120 +$E,48879,6 +$E,51136,312 +$E,52551,7 +$E,68685,10 +$STOP,96,35112867.10,63463,6,18201,9,1,5 +$START,97,63945 +$E,28335,9 +$E,42070,8 +$E,58191,8 +$E,67586,107 +$E,68022,6 +$STOP,97,35112877.18,11059,5,18490,12,1,9 +$START,98,11496 +$E,18636,6 +$E,19637,4 +$E,24011,496 +$E,28787,95 +$E,37014,4 +$E,42746,163 +$STOP,98,35112887.24,24148,6,18289,8,0,2 +$START,99,24593 +$E,12220,159 +$E,35486,7 +$E,40758,6 +$E,76257,156 +$STOP,99,35112897.31,37232,4,18345,11,1,5 +$START,100,37660 +$E,4315,398 +$E,34521,7 +$E,38921,6 +$E,43440,6 +$E,60608,6 +$STOP,100,35112907.36,50309,5,17891,10,1,8 +$START,101,50782 +$E,17355,6 +$E,67085,6 +$STOP,101,35112917.44,63411,2,17650,12,1,9 +$START,102,63821 +$E,6267,5 +$E,47938,231 +$E,49433,4 +$E,62879,7 +$E,67320,209 +$E,70194,7 +$E,75600,4 +$STOP,102,35112927.49,10950,7,18026,8,0,6 +$START,103,11407 +$E,14959,6 +$E,15177,384 +$E,51207,35 +$E,58235,435 +$STOP,103,35112937.56,24047,4,18950,5,2,3 +$START,104,24476 +$E,14604,269 +$STOP,104,35112947.62,37096,1,19159,9,2,10 +$START,105,37624 +$E,4586,13 +$E,35305,5 +$E,52524,6 +$E,62318,14 +$E,64058,35 +$STOP,105,35112957.69,50273,5,18819,9,1,7 +$START,106,50746 +$E,4766,4 +$E,9445,192 +$E,15060,64 +$E,41152,4 +$E,65545,4 +$STOP,106,35112967.76,63395,5,18476,9,3,7 +$START,107,63832 +$E,4080,6 +$E,16248,158 +$E,18031,48 +$E,27543,7 +$E,52514,7 +$E,64060,71 +$STOP,107,35112977.82,10953,6,19015,7,1,5 +$START,108,11400 +$E,41959,6 +$STOP,108,35112987.89,24023,1,18794,17,2,2 +$START,109,24534 +$E,23567,94 +$E,33936,4 +$E,36303,6 +$E,54479,7 +$E,70421,112 +$E,72689,156 +$STOP,109,35112997.96,37187,6,18327,12,1,3 +$START,110,37786 +$E,2082,6 +$E,20015,12 +$E,32420,280 +$E,60672,6 +$E,76412,11 +$STOP,110,35113008.4,50434,5,18354,8,2,6 +$START,111,50873 +$E,5737,6 +$E,8909,6 +$E,10790,6 +$E,24749,6 +$E,67632,127 +$STOP,111,35113018.10,63516,5,18541,16,1,7 +$START,112,63950 +$E,5011,6 +$E,12868,78 +$E,32075,60 +$E,59657,5 +$E,63579,7 +$E,68389,7 +$E,71833,6 +$STOP,112,35113028.17,11076,7,18896,8,1,7 +$START,113,11530 +$E,29261,6 +$E,32841,7 +$E,60668,5 +$E,66668,6 +$STOP,113,35113038.24,24172,4,18754,10,2,7 +$START,114,24734 +$E,467,7 +$E,10843,56 +$E,15970,20 +$E,16033,23 +$E,16213,44 +$E,16588,51 +$E,16838,56 +$E,17306,60 +$E,21900,49 +$E,22150,35 +$E,22306,35 +$E,22315,6 +$E,23556,45 +$E,23563,6 +$E,23619,62 +$E,23712,62 +$E,23869,14 +$E,24025,10 +$E,24650,25 +$E,24666,7 +$E,24728,19 +$E,24853,19 +$E,24962,4 +$E,30431,12 +$E,30744,7 +$E,30900,14 +$E,31119,12 +$E,31127,14 +$E,31369,19 +$E,32822,7 +$E,35431,12 +$E,35494,75 +$E,35502,12 +$E,35744,54 +$E,35752,7 +$E,40607,305 +$E,44506,79 +$E,51542,110 +$STOP,114,35113048.31,37709,38,18470,14,1,13 +$START,115,38484 +$E,9000,140 +$E,33882,7 +$E,57263,403 +$STOP,115,35113058.46,51117,3,18402,8,3,5 +$START,116,51536 +$E,3348,320 +$E,8865,7 +$E,28399,4 +$E,55379,51 +$E,62368,41 +$E,69532,112 +$STOP,116,35113068.52,64187,6,18095,9,2,4 +$START,117,64634 +$E,67074,6 +$STOP,117,35113078.59,11721,1,18448,8,3,7 +$START,118,12126 +$E,234,6 +$E,551,5 +$E,12301,7 +$E,12943,30 +$E,41907,6 +$E,73673,6 +$STOP,118,35113088.65,24779,6,18782,5,0,6 +$START,119,25223 +$E,7279,7 +$E,29357,7 +$E,44557,102 +$E,63856,188 +$E,74016,5 +$E,74495,6 +$STOP,119,35113098.71,37881,6,17896,12,3,7 +$ENV,119,35113098.78,23.6,56.6,23.8,54.5,23.45,970.61 +$START,120,38988 +$E,309,6 +$E,7670,8 +$E,25616,7 +$E,48390,6 +$E,49947,6 +$E,73577,8 +$STOP,120,35113108.86,51642,6,18330,15,1,5 +$START,121,52085 +$E,6874,11 +$E,7123,7 +$E,14846,6 +$E,17301,4 +$E,29686,19 +$E,29936,17 +$E,30248,15 +$E,30561,8 +$E,34591,7 +$E,46966,12 +$E,54492,4 +$STOP,121,35113118.92,64778,11,17841,7,1,7 +$START,122,65288 +$E,11643,89 +$E,23959,6 +$E,26464,4 +$E,31516,7 +$E,54007,24 +$E,55265,11 +$E,55570,10 +$E,59556,24 +$E,59953,5 +$E,60015,39 +$E,60257,54 +$E,60320,15 +$E,60578,24 +$E,66712,167 +$STOP,122,35113129.0,12463,14,18226,11,1,6 +$START,123,13018 +$E,14738,4 +$E,28256,4 +$E,40338,13 +$E,40830,12 +$E,62392,4 +$E,63017,15 +$E,63330,9 +$E,63650,19 +$E,65517,7 +$E,65830,5 +$E,65995,4 +$E,71251,6 +$STOP,123,35113139.9,25716,12,18087,20,1,9 +$START,124,26818 +$E,11575,4 +$E,57319,60 +$STOP,124,35113149.24,39447,2,17865,5,1,5 +$START,125,40119 +$E,10723,94 +$E,22495,4 +$E,23436,148 +$E,24187,4 +$E,31705,6 +$E,36453,43 +$E,44344,63 +$E,48862,6 +$E,57382,12 +$E,65251,31 +$E,69921,6 +$E,70077,7 +$E,70233,7 +$E,70608,24 +$E,70858,20 +$E,70859,11 +$E,70862,7 +$E,70961,4 +$E,71171,25 +$E,71177,7 +$E,71546,51 +$E,71648,4 +$E,71648,12 +$E,71952,48 +$E,73054,64 +$E,73062,14 +$E,73358,59 +$E,73515,62 +$E,73523,7 +$E,74140,15 +$E,74296,40 +$E,75234,15 +$E,75296,63 +$E,75304,4 +$E,75546,43 +$E,76327,14 +$E,76334,4 +$STOP,125,35113159.33,53094,37,18270,18,1,8 +$START,126,53917 +$E,7306,14 +$E,8463,44 +$E,8713,33 +$E,8869,11 +$E,10622,6 +$E,11431,7 +$E,14744,4 +$E,42772,7 +$E,42976,7 +$E,54044,28 +$E,74272,5 +$STOP,126,35113169.49,1073,11,18676,10,4,7 +$START,127,1563 +$E,16036,6 +$E,24639,6 +$E,26573,81 +$E,28596,94 +$E,33412,43 +$E,49753,5 +$E,58018,40 +$E,67716,159 +$STOP,127,35113179.56,14228,8,17726,8,0,8 +$START,128,14691 +$E,16902,9 +$E,33242,49 +$E,36063,4 +$E,48454,5 +$E,53765,7 +$E,61265,6 +$E,69390,56 +$E,69640,48 +$E,69953,67 +$E,70265,48 +$E,70890,48 +$E,70899,11 +$E,74015,50 +$STOP,128,35113189.63,27402,13,18121,14,3,11 +$START,129,27951 +$E,220,40 +$E,7720,40 +$E,36280,6 +$E,57652,4 +$E,70468,4 +$E,72158,7 +$STOP,129,35113199.72,40605,6,18089,13,1,6 +$START,130,41050 +$E,6179,463 +$E,9625,7 +$E,50368,6 +$E,64957,7 +$E,77974,4 +$STOP,130,35113209.79,53699,5,18463,7,0,11 +$START,131,54136 +$E,7078,4 +$E,28508,7 +$E,29971,35 +$E,61270,286 +$STOP,131,35113219.85,1238,4,18235,4,1,9 +$START,132,1664 +$E,14540,4 +$E,20848,7 +$E,31832,96 +$E,48975,6 +$STOP,132,35113229.91,14305,4,19057,16,2,7 +$START,133,14768 +$E,14080,7 +$E,44491,7 +$E,54868,6 +$E,59111,4 +$STOP,133,35113239.97,27410,4,18938,11,0,6 +$START,134,27838 +$E,39765,7 +$E,56050,176 +$E,74564,96 +$STOP,134,35113250.4,40473,3,18760,10,0,5 +$START,135,40896 +$E,33301,6 +$E,34401,56 +$E,37915,38 +$E,43055,4 +$E,45868,7 +$E,66391,4 +$STOP,135,35113260.10,53552,6,18581,13,1,10 +$START,136,53999 +$E,1767,6 +$E,4723,19 +$E,4846,6 +$E,22473,15 +$E,25676,7 +$E,30956,11 +$E,41477,48 +$E,49933,7 +$E,50552,4 +$E,55031,8 +$E,66193,4 +$STOP,136,35113270.16,1155,11,18868,10,4,14 +$START,137,1780 +$E,5787,62 +$E,11536,6 +$E,42100,1319 +$E,44468,7 +$E,67220,159 +$E,70905,7 +$E,77404,78 +$STOP,137,35113280.26,14446,7,18980,20,1,6 +$START,138,14904 +$E,24344,7 +$E,41042,4 +$E,44689,4 +$E,75671,12 +$STOP,138,35113290.32,27546,4,18932,12,2,8 +$START,139,27975 +$E,30554,304 +$E,34783,7 +$E,51669,263 +$STOP,139,35113300.38,40608,3,18453,8,2,8 +$START,140,41028 +$E,28899,35 +$E,38435,7 +$E,47393,48 +$STOP,140,35113310.44,53664,3,18444,11,3,7 +$START,141,54119 +$E,1076,6 +$E,50712,5 +$E,50948,56 +$E,63536,8 +$E,71845,4 +$STOP,141,35113320.51,1231,5,17733,11,0,2 +$START,142,1668 +$E,35764,7 +$E,67961,4 +$E,69287,7 +$STOP,142,35113330.57,14303,3,17741,11,1,7 +$START,143,14722 +$E,44691,526 +$E,60676,7 +$STOP,143,35113340.63,27353,2,18216,13,3,3 +$START,144,27765 +$E,8322,4 +$E,56813,118 +$E,65993,15 +$E,67574,16 +$E,69401,145 +$STOP,144,35113350.69,40411,5,18031,9,0,8 +$START,145,40971 +$E,14918,6 +$E,38553,62 +$E,43070,7 +$E,49239,111 +$E,52105,6 +$STOP,145,35113360.77,53622,5,17787,10,1,3 +$START,146,54327 +$E,6472,759 +$E,8795,143 +$E,13533,12 +$E,17031,80 +$E,34997,6 +$E,59856,14 +$E,60703,8 +$E,73593,15 +$STOP,146,35113370.86,1464,8,18047,11,1,6 +$START,147,1931 +$E,12650,7 +$E,54196,8 +$STOP,147,35113380.94,14560,2,17925,11,2,9 +$START,148,14970 +$E,29380,6 +$E,34667,4 +$E,42540,51 +$E,45612,7 +$E,62706,23 +$E,74040,12 +$STOP,148,35113390.99,27626,6,18063,6,4,8 +$START,149,28092 +$E,6885,7 +$E,11966,231 +$E,13407,48 +$E,29764,6 +$E,35574,371 +$E,42743,8 +$STOP,149,35113401.6,40748,6,18033,8,1,8 +$ENV,149,35113401.13,23.7,56.5,23.8,54.3,23.48,971.62 +$START,150,41857 +$E,658,44 +$E,29976,7 +$E,35172,4 +$E,39612,143 +$E,67019,7 +$STOP,150,35113411.21,54506,5,18345,12,0,9 +$START,151,54944 +$E,17446,6 +$E,52893,5 +$E,54251,6 +$E,56128,19 +$E,74046,4 +$STOP,151,35113421.27,2057,5,18168,14,3,7 +$START,152,2494 +$E,61756,4 +$E,63764,8 +$E,70850,7 +$STOP,152,35113431.34,15129,3,17903,10,1,10 +$START,153,15549 +$E,8922,28 +$E,9569,4 +$E,11915,4 +$E,14617,264 +$E,30412,8 +$E,47672,7 +$STOP,153,35113441.40,28205,6,18442,10,0,5 +$START,154,28687 +$E,6019,12 +$STOP,154,35113451.47,41310,1,18029,8,0,5 +$START,155,41714 +$E,5840,8 +$E,10372,83 +$E,38351,545 +$E,41828,6 +$E,46134,6 +$E,53215,6 +$E,54281,4 +$E,62530,7 +$E,69611,50 +$E,74650,19 +$E,76652,7 +$E,77146,6 +$STOP,155,35113461.52,54417,12,17725,12,5,10 +$START,156,54920 +$E,13393,15 +$E,29585,76 +$E,49142,22 +$E,61175,7 +$E,67376,6 +$STOP,156,35113471.60,2033,5,17365,15,0,6 +$START,157,2658 +$E,27470,79 +$E,43150,6 +$E,48374,12 +$E,52702,7 +$E,67939,4 +$E,68513,8 +$STOP,157,35113481.69,15313,6,17967,15,2,7 +$START,158,15760 +$E,492,6 +$E,11636,7 +$E,18471,7 +$E,23166,6 +$E,31900,6 +$E,33206,8 +$E,35370,4 +$STOP,158,35113491.76,28421,7,18142,15,1,15 +$START,159,28876 +$E,1312,403 +$E,6608,7 +$E,9415,15 +$E,17336,4 +$E,27161,71 +$E,35361,4 +$E,50621,35 +$E,70736,6 +$STOP,159,35113501.83,41546,8,17347,13,2,11 +$START,160,42012 +$E,9489,6 +$E,13751,7 +$E,34508,4 +$E,47444,6 +$E,50335,6 +$E,57045,12 +$E,59233,4 +$E,68980,10 +$E,73317,6 +$E,73340,4 +$STOP,160,35113511.90,54696,10,17776,14,2,7 +$START,161,55214 +$E,2349,48 +$E,3099,7 +$E,3739,7 +$E,3965,7 +$E,4989,9 +$E,5517,6 +$E,11390,4 +$E,20416,382 +$E,26126,6 +$E,41698,81 +$E,45444,6 +$E,66297,5 +$E,69761,7 +$E,75880,6 +$STOP,161,35113521.97,2395,14,17001,14,1,13 +$START,162,2910 +$E,1534,6 +$E,1553,6 +$E,3180,4 +$E,7237,15 +$E,27612,6 +$E,48765,35 +$E,49023,7 +$E,52103,7 +$E,65438,4 +$E,65458,9 +$E,67212,9 +$E,68025,12 +$E,77625,7 +$STOP,162,35113532.6,15613,13,16747,13,1,10 +$START,163,16158 +$E,21582,8 +$E,32173,248 +$E,34920,11 +$E,35420,73 +$E,35420,7 +$E,35427,8 +$E,35429,6 +$E,35483,112 +$E,35498,18 +$E,35499,7 +$E,35545,99 +$E,35545,15 +$E,35557,12 +$E,35561,23 +$E,35562,6 +$E,35576,35 +$E,35615,117 +$E,35624,24 +$E,35624,6 +$E,36045,16 +$E,36108,215 +$E,36114,16 +$E,36116,36 +$E,36117,24 +$E,36118,12 +$E,36670,257 +$E,36673,14 +$E,36674,4 +$E,36675,6 +$E,36676,7 +$E,36677,15 +$E,36679,70 +$E,36680,24 +$E,36733,127 +$E,36741,17 +$E,36742,9 +$E,36826,26 +$E,36983,192 +$E,36986,15 +$E,36987,15 +$E,36991,41 +$E,37178,7 +$E,37295,9 +$E,37304,6 +$E,37358,124 +$E,37366,15 +$E,37608,99 +$E,37617,8 +$E,37920,120 +$E,37929,22 +$E,38233,48 +$E,38317,6 +$E,38545,72 +$E,38549,6 +$E,38554,11 +$E,38675,7 +$E,38858,7 +$E,39325,22 +$E,40575,31 +$E,41825,32 +$E,42896,4 +$E,57595,5 +$E,57602,12 +$E,57864,14 +$E,57872,16 +$E,57935,16 +$E,58435,16 +$E,58497,31 +$E,58856,22 +$E,58919,25 +$E,59231,44 +$E,59247,39 +$E,59481,55 +$E,59544,54 +$E,59560,39 +$E,59575,31 +$E,59833,11 +$E,60028,11 +$E,60106,39 +$E,60731,39 +$E,61056,17 +$E,63904,7 +$E,64106,12 +$E,67981,96 +$E,67990,15 +$E,67990,18 +$E,68231,83 +$E,68240,14 +$E,68241,7 +$E,68544,120 +$E,68553,24 +$E,68606,179 +$E,68615,14 +$E,68619,7 +$E,68622,12 +$E,68856,139 +$E,68861,4 +$E,68863,7 +$E,68864,6 +$E,68865,28 +$E,68866,4 +$E,69005,7 +$E,69294,82 +$E,69302,152 +$E,69305,7 +$E,69308,15 +$E,69310,44 +$E,69310,35 +$E,69325,19 +$E,69356,99 +$E,69372,108 +$E,69380,67 +$E,69384,12 +$E,69387,15 +$E,69388,126 +$E,69396,7 +$E,69442,147 +$E,69450,140 +$E,69457,7 +$E,69459,15 +$E,69794,316 +$E,69798,7 +$E,69799,15 +$E,69801,24 +$E,69801,15 +$E,69802,65 +$E,69803,79 +$E,69803,20 +$E,70106,7 +$E,70169,22 +$E,70227,7 +$E,70419,60 +$E,70426,15 +$E,70575,48 +$E,71044,38 +$E,71048,6 +$E,71053,7 +$E,71825,41 +$E,72606,27 +$E,72614,7 +$E,72669,312 +$E,72673,31 +$E,72676,22 +$E,72676,16 +$E,72681,12 +$E,72685,51 +$E,72685,25 +$E,72919,204 +$E,72924,15 +$E,72925,4 +$E,72927,45 +$E,72928,19 +$E,73075,24 +$E,73231,240 +$E,73238,6 +$E,73240,48 +$E,73240,60 +$E,73241,11 +$E,73544,99 +$E,73550,6 +$E,73552,6 +$E,73553,14 +$E,74169,166 +$E,74171,17 +$E,74172,7 +$E,74174,16 +$E,74177,31 +$E,74178,28 +$E,74324,76 +$E,74679,7 +$E,74794,19 +$E,74856,236 +$E,74863,8 +$E,74865,47 +$E,75357,7 +$E,75419,224 +$E,75424,7 +$E,75427,48 +$E,75428,28 +$E,75574,112 +$E,75794,127 +$E,75798,14 +$E,75802,13 +$E,75803,12 +$E,75856,159 +$E,75865,24 +$E,75865,14 +$E,75919,171 +$E,75925,17 +$E,75927,24 +$E,75928,8 +$E,76357,31 +$E,76361,6 +$E,76365,8 +$E,76440,4 +$E,76605,7 +$E,76669,92 +$E,76669,15 +$E,76672,15 +$E,76675,7 +$E,76677,6 +$E,76731,291 +$E,76736,7 +$E,76739,4 +$E,76740,14 +$E,76747,54 +$E,76748,11 +$E,76794,216 +$E,76798,7 +$E,76798,9 +$E,76800,11 +$E,76802,49 +$E,76803,35 +$E,76803,15 +$E,76824,115 +$E,76826,6 +$E,76910,6 +$E,76981,231 +$E,76987,11 +$E,76990,48 +$E,77606,180 +$E,77613,14 +$E,77615,48 +$E,77919,240 +$E,77922,12 +$E,77923,13 +$E,77927,55 +$E,77928,31 +$E,77928,15 +$E,78049,6 +$E,78074,108 +$STOP,163,35113542.14,36313,231,16991,27,6,40 +$START,164,39314 +$E,633,120 +$E,3133,159 +$E,5633,219 +$E,8133,152 +$E,10618,35 +$E,10622,14 +$E,10625,22 +$E,10633,299 +$E,10635,9 +$E,13133,281 +$E,13135,9 +$E,15633,239 +$E,18133,115 +$E,19571,184 +$E,20400,4 +$E,20633,176 +$E,21163,7 +$E,23133,78 +$E,23290,15 +$E,24383,57 +$E,25349,11 +$E,25524,7 +$E,25633,35 +$E,25745,6 +$E,28133,40 +$E,30633,14 +$E,31673,57 +$E,33133,7 +$E,35633,8 +$E,43132,13 +$E,50151,7 +$E,50632,7 +$E,51075,304 +$E,52623,7 +$E,53132,7 +$E,55632,7 +$E,55895,24 +$E,56557,6 +$E,58132,17 +$E,60632,31 +$E,63132,30 +$E,63928,7 +$STOP,164,35113553.49,52391,42,17123,22,4,12 +$START,165,53212 +$E,428,7 +$E,3638,32 +$E,11858,8 +$E,15678,7 +$E,21708,6 +$E,21920,7 +$E,44645,12 +$E,47146,7 +$E,48357,6 +$E,56317,7 +$E,57151,96 +$E,57155,7 +$E,57160,11 +$E,58651,92 +$E,58713,17 +$E,58776,12 +$E,58792,60 +$E,58838,30 +$E,58901,24 +$E,59463,28 +$E,59901,275 +$E,59910,66 +$E,59963,280 +$E,59966,24 +$E,59971,24 +$E,59972,48 +$E,59973,11 +$E,60213,15 +$E,60320,6 +$E,60713,35 +$E,61963,35 +$E,62049,9 +$E,62713,67 +$E,62776,166 +$E,62780,7 +$E,62781,9 +$E,62784,32 +$E,62785,14 +$E,62838,44 +$E,62846,48 +$E,62854,21 +$E,62987,24 +$E,63064,4 +$E,63213,21 +$E,63299,7 +$E,63612,11 +$E,64463,28 +$E,64588,195 +$E,64593,6 +$E,64595,8 +$E,64597,46 +$E,64651,19 +$E,64838,7 +$E,64842,24 +$E,64850,4 +$E,64862,87 +$E,64862,17 +$E,64901,199 +$E,64908,7 +$E,64909,35 +$E,64910,29 +$E,65159,48 +$E,65162,56 +$E,65163,35 +$E,65165,12 +$E,65167,35 +$E,65174,211 +$E,65175,24 +$E,65177,23 +$E,65178,6 +$E,65179,15 +$E,65179,20 +$E,65180,7 +$E,65181,15 +$E,65213,287 +$E,65217,7 +$E,65219,6 +$E,65221,7 +$E,65222,52 +$E,65223,22 +$E,65276,152 +$E,65276,12 +$E,65278,4 +$E,65279,5 +$E,65279,7 +$E,65281,19 +$E,65282,16 +$E,65282,7 +$E,65487,206 +$E,65487,15 +$E,65489,24 +$E,65491,13 +$E,65492,11 +$E,65493,12 +$E,65493,12 +$E,65495,8 +$E,65713,46 +$E,65800,12 +$E,65802,11 +$E,65803,8 +$E,65804,24 +$E,65804,12 +$E,65805,5 +$E,66963,28 +$E,67049,240 +$E,67050,15 +$E,67052,15 +$E,67054,6 +$E,67054,31 +$E,67054,7 +$E,67054,7 +$E,67055,9 +$E,67055,9 +$E,67055,8 +$E,67056,7 +$E,67058,7 +$E,69463,38 +$E,69549,328 +$E,69549,35 +$E,69551,12 +$E,69551,12 +$E,69552,31 +$E,69552,46 +$E,69552,15 +$E,69552,12 +$E,69553,17 +$E,69554,31 +$E,69554,36 +$E,69555,12 +$E,69555,15 +$E,69556,17 +$E,69557,7 +$E,69558,15 +$E,70097,6 +$E,71963,35 +$E,72049,312 +$E,72049,31 +$E,72051,7 +$E,72051,16 +$E,72052,44 +$E,72052,7 +$E,72052,7 +$E,72053,15 +$E,72054,35 +$E,72054,11 +$E,72054,37 +$E,72055,15 +$E,72055,7 +$E,72056,5 +$E,72056,11 +$E,72659,70 +$E,72659,22 +$E,72662,92 +$E,72663,62 +$E,72664,21 +$E,72665,15 +$E,72665,22 +$E,72667,41 +$E,72713,137 +$E,72720,12 +$E,72722,32 +$E,72722,7 +$E,72799,103 +$E,72803,199 +$E,72803,56 +$E,72805,35 +$E,72806,28 +$E,72806,24 +$E,72807,183 +$E,72807,31 +$E,72808,27 +$E,72808,8 +$E,72810,7 +$E,72810,6 +$E,72811,188 +$E,72813,31 +$E,72814,47 +$E,72814,39 +$E,72815,49 +$E,72816,46 +$E,72817,12 +$E,72823,56 +$E,72823,12 +$E,72824,6 +$E,72826,6 +$E,72827,151 +$E,72827,16 +$E,72829,24 +$E,72829,48 +$E,72830,15 +$E,72831,44 +$E,72833,4 +$E,72971,83 +$E,72975,92 +$E,72975,67 +$E,72976,30 +$E,72978,24 +$E,72979,47 +$E,72980,19 +$E,72987,327 +$E,72987,43 +$E,72988,6 +$E,72988,6 +$E,72989,19 +$E,72990,9 +$E,72990,9 +$E,72990,24 +$E,72991,10 +$E,72991,52 +$E,72992,19 +$E,72992,46 +$E,72992,23 +$E,72993,14 +$E,72993,22 +$E,72995,12 +$E,72996,7 +$E,73026,27 +$E,73028,7 +$E,73104,166 +$E,73104,54 +$E,73107,16 +$E,73108,5 +$E,73109,15 +$E,73109,7 +$E,73135,4 +$E,73174,55 +$E,73178,92 +$E,73178,22 +$E,73180,7 +$E,73181,26 +$E,73182,19 +$E,73213,55 +$E,73213,60 +$E,73222,22 +$E,73222,8 +$E,73225,7 +$E,73228,6 +$E,73229,45 +$E,73229,19 +$E,73232,10 +$E,73233,4 +$E,73234,12 +$E,73284,52 +$E,73288,48 +$E,73290,7 +$E,73292,15 +$E,73292,7 +$E,73299,47 +$E,73303,56 +$E,73303,33 +$E,73305,11 +$E,73306,8 +$E,73307,83 +$E,73307,9 +$E,73311,83 +$E,73314,22 +$E,73315,6 +$E,73316,15 +$E,73573,99 +$E,73575,6 +$E,73575,9 +$E,73578,7 +$E,73596,29 +$E,73600,30 +$E,73600,16 +$E,73603,7 +$E,73612,135 +$E,73612,15 +$E,73616,12 +$E,73643,22 +$E,73647,62 +$E,73647,6 +$E,73650,14 +$E,73651,56 +$E,73909,33 +$E,73912,30 +$E,73913,16 +$E,73915,6 +$E,73917,20 +$E,73924,147 +$E,73924,12 +$E,73927,24 +$E,73929,7 +$E,73929,8 +$E,73979,39 +$E,74041,63 +$E,74042,17 +$E,74221,35 +$E,74225,16 +$E,74225,11 +$E,74237,99 +$E,74239,7 +$E,74242,7 +$E,74276,60 +$E,74283,14 +$E,74338,60 +$E,74381,27 +$E,74401,219 +$E,74404,14 +$STOP,165,35113563.66,11706,344,18308,35,11,47 +$START,166,15202 +$E,151,71 +$E,277,144 +$E,286,24 +$E,286,16 +$E,590,39 +$E,652,30 +$E,715,39 +$E,717,12 +$E,721,6 +$E,1215,79 +$E,1216,9 +$E,1221,7 +$E,1223,7 +$E,1401,88 +$E,1527,93 +$E,1527,6 +$E,1531,6 +$E,1839,96 +$E,1844,12 +$E,1845,6 +$E,1846,14 +$E,1848,19 +$E,1902,108 +$E,1911,7 +$E,2183,4 +$E,2465,140 +$E,2467,9 +$E,2468,8 +$E,2468,10 +$E,2469,10 +$E,2470,24 +$E,2471,6 +$E,2472,14 +$E,2473,39 +$E,2474,5 +$E,2527,41 +$E,2530,6 +$E,2651,107 +$E,3901,72 +$E,6401,88 +$E,8901,78 +$E,11401,76 +$E,13901,92 +$E,16401,83 +$E,18901,63 +$E,21401,88 +$E,23901,83 +$E,26401,78 +$E,28901,79 +$E,29190,7 +$E,31401,94 +$E,33901,75 +$E,36401,76 +$E,38901,102 +$E,41400,129 +$E,43900,101 +$E,46400,44 +$E,48900,40 +$E,50896,7 +$E,51400,24 +$E,51802,7 +$E,53201,7 +$E,54026,100 +$E,54029,12 +$E,54030,24 +$E,54030,14 +$E,54035,4 +$E,56400,15 +$E,57178,12 +$E,58156,147 +$E,58900,28 +$E,59252,4 +$E,61400,17 +$E,63900,33 +$E,65102,6 +$E,66400,15 +$E,68900,10 +$E,71400,12 +$E,73304,15 +$STOP,166,35113575.57,28930,79,17322,22,5,17 +$START,167,30110 +$E,12323,7 +$E,12759,9 +$E,12953,15 +$E,16314,8 +$E,19404,7 +$E,23023,6 +$E,24707,7 +$E,26005,4 +$E,36010,6 +$E,43602,6 +$E,46074,15 +$E,46129,6 +$E,47637,15 +$E,64035,6 +$E,71962,8 +$STOP,167,35113585.87,42836,15,18169,15,5,13 +$START,168,43498 +$E,7480,4 +$E,12269,7 +$E,47387,143 +$E,47921,6 +$E,57430,160 +$E,59485,6 +$E,63224,6 +$E,64424,5 +$E,69597,5 +$E,74761,5 +$E,77479,7 +$STOP,168,35113595.97,56194,11,16902,15,0,11 +$START,169,56688 +$E,2516,5 +$E,2536,7 +$E,13869,6 +$E,14845,10 +$E,14864,12 +$E,15051,16 +$E,18632,15 +$E,22997,14 +$E,23344,4 +$E,23554,22 +$E,23635,15 +$E,23818,4 +$E,24210,8 +$E,24230,9 +$E,31482,7 +$E,31554,7 +$E,36037,8 +$E,36427,4 +$E,36949,7 +$E,41574,7 +$E,41982,5 +$E,42381,7 +$E,43514,7 +$E,43948,14 +$E,44178,7 +$E,44957,15 +$E,46021,17 +$E,47607,14 +$E,47627,9 +$E,48365,12 +$E,49069,7 +$E,49090,7 +$E,50406,14 +$E,50426,7 +$E,50589,4 +$E,51709,7 +$E,53952,7 +$E,55552,4 +$E,56038,8 +$E,56352,7 +$E,56555,4 +$E,56946,7 +$E,56966,19 +$E,56986,6 +$E,59842,15 +$E,60105,7 +$E,60125,18 +$E,60265,14 +$E,60285,12 +$E,60304,4 +$E,64709,15 +$E,65330,4 +$E,66537,7 +$E,66557,12 +$E,67553,7 +$E,68021,15 +$E,68041,14 +$E,69678,4 +$E,72540,7 +$E,74208,15 +$STOP,169,35113606.4,4458,60,17116,16,4,19 +$START,170,5468 +$E,898,11 +$E,1301,7 +$E,1564,12 +$E,5863,6 +$E,5947,4 +$E,6698,6 +$E,9206,9 +$E,10473,7 +$E,10813,12 +$E,10834,14 +$E,12401,7 +$E,12421,7 +$E,12485,11 +$E,12561,16 +$E,18665,117 +$E,19142,4 +$E,21278,5 +$E,21908,6 +$E,24308,7 +$E,26112,7 +$E,26128,7 +$E,26903,9 +$E,27713,8 +$E,33301,12 +$E,34171,7 +$E,34191,11 +$E,34210,28 +$E,34901,4 +$E,37300,14 +$E,39699,16 +$E,39999,12 +$E,40500,15 +$E,41299,23 +$E,42099,14 +$E,45345,12 +$E,45384,8 +$E,45770,17 +$E,45789,24 +$E,45809,22 +$E,46583,7 +$E,52409,391 +$E,59739,11 +$E,60534,7 +$E,60557,6 +$E,60669,12 +$E,60798,56 +$E,61315,6 +$E,63553,7 +$E,70135,8 +$E,70174,7 +$E,70853,8 +$E,70872,7 +$E,75666,13 +$E,75685,11 +$E,77904,15 +$STOP,170,35113616.27,18709,55,17694,13,4,22 +$START,171,19634 +$E,816,19 +$E,864,12 +$E,2602,323 +$E,4468,12 +$E,5011,15 +$E,5031,19 +$E,5051,17 +$E,5401,14 +$E,5421,24 +$E,8713,11 +$E,8732,8 +$E,9194,7 +$E,9576,12 +$E,9616,8 +$E,9645,16 +$E,11111,7 +$E,11131,15 +$E,11151,14 +$E,12010,6 +$E,13000,8 +$E,13020,16 +$E,14467,12 +$E,21177,52 +$E,24931,4 +$E,24951,12 +$E,24971,9 +$E,25407,220 +$E,26999,7 +$E,27019,16 +$E,30673,24 +$E,32008,20 +$E,32024,7 +$E,32292,11 +$E,32401,12 +$E,34582,15 +$E,35343,6 +$E,35364,15 +$E,36014,8 +$E,37597,12 +$E,47174,7 +$E,55196,4 +$E,55264,7 +$E,55283,13 +$E,55304,6 +$E,55379,24 +$E,55635,16 +$E,55654,24 +$E,56595,7 +$E,57008,14 +$E,57317,8 +$E,57336,4 +$E,57407,11 +$E,57484,9 +$E,57539,8 +$E,58180,9 +$E,58342,6 +$E,58397,12 +$E,58971,14 +$E,58990,25 +$E,59197,30 +$E,59958,35 +$E,59978,60 +$E,59999,14 +$E,60124,24 +$E,60144,32 +$E,60164,54 +$E,60818,12 +$E,60838,12 +$E,63196,18 +$E,63996,8 +$E,66396,7 +$E,66623,10 +$E,68000,18 +$E,68524,8 +$E,68545,7 +$E,69074,11 +$E,69093,4 +$E,69113,12 +$E,69507,14 +$E,69526,28 +$E,69546,33 +$E,70356,23 +$E,70375,31 +$E,70396,33 +$E,71204,19 +$E,71219,27 +$E,71239,51 +$E,71259,44 +$E,71996,24 +$E,72796,40 +$E,73597,35 +$E,73840,31 +$E,73860,51 +$E,73879,57 +$E,73935,33 +$E,73955,35 +$E,73975,44 +$E,74396,27 +$E,75197,9 +$E,75996,12 +$E,76216,12 +$E,76553,19 +$E,76572,30 +$E,76591,19 +$E,76797,28 +$E,77470,15 +$E,77490,28 +$E,77511,15 +$E,77596,11 +$STOP,171,35113626.47,34064,109,17757,11,10,28 +$START,172,35555 +$E,140,25 +$E,987,8 +$E,1326,33 +$E,1412,24 +$E,1432,19 +$E,1451,22 +$E,1740,8 +$E,2541,6 +$E,3174,9 +$E,3341,14 +$E,3402,19 +$E,3423,23 +$E,3442,35 +$E,3714,11 +$E,3734,15 +$E,3753,12 +$E,4140,15 +$E,4940,8 +$E,5264,15 +$E,5283,31 +$E,5303,35 +$E,5402,46 +$E,5422,40 +$E,5974,11 +$E,6107,12 +$E,6126,7 +$E,7342,13 +$E,7813,12 +$E,7832,32 +$E,7852,44 +$E,8129,19 +$E,8148,44 +$E,8164,44 +$E,8183,35 +$E,8642,31 +$E,8661,44 +$E,8680,46 +$E,8940,14 +$E,9683,28 +$E,9740,22 +$E,9768,7 +$E,10540,8 +$E,11107,15 +$E,11126,16 +$E,11599,29 +$E,11618,4 +$E,11793,21 +$E,11812,38 +$E,11832,44 +$E,12140,6 +$E,12940,25 +$E,13740,19 +$E,14540,8 +$E,15031,39 +$E,15050,24 +$E,15340,24 +$E,16063,8 +$E,16082,6 +$E,16140,24 +$E,16951,7 +$E,17225,6 +$E,17245,15 +$E,17264,19 +$E,17740,24 +$E,18126,18 +$E,18540,21 +$E,19342,30 +$E,19389,22 +$E,19408,37 +$E,19627,7 +$E,19928,15 +$E,20207,7 +$E,20226,39 +$E,20246,32 +$E,20767,7 +$E,20940,12 +$E,21281,17 +$E,21300,28 +$E,21376,30 +$E,21396,35 +$E,21415,39 +$E,21585,19 +$E,21605,19 +$E,22142,24 +$E,22727,19 +$E,22747,19 +$E,22768,20 +$E,22893,19 +$E,22912,22 +$E,23049,15 +$E,23340,7 +$E,23856,23 +$E,23914,9 +$E,23994,14 +$E,24437,8 +$E,24940,12 +$E,26265,15 +$E,26285,32 +$E,26540,12 +$E,26822,15 +$E,26842,9 +$E,26878,16 +$E,26914,7 +$E,26933,7 +$E,27316,16 +$E,27375,19 +$E,27414,6 +$E,27482,24 +$E,27501,27 +$E,27521,5 +$E,27541,19 +$E,27581,17 +$E,28144,12 +$E,28179,31 +$E,28198,27 +$E,28295,17 +$E,28314,28 +$E,28334,46 +$E,28830,33 +$E,30085,12 +$E,31340,15 +$E,32940,16 +$E,33664,4 +$E,34170,12 +$E,34210,7 +$E,34354,7 +$E,34629,24 +$E,35339,19 +$E,36140,19 +$E,36495,17 +$E,36514,33 +$E,36534,25 +$E,36685,38 +$E,39338,7 +$E,39562,17 +$E,39582,33 +$E,39601,39 +$E,40138,25 +$E,40485,7 +$E,40938,14 +$E,41634,48 +$E,41738,4 +$E,42538,15 +$E,43338,7 +$E,44138,6 +$E,44577,12 +$E,44597,5 +$E,44617,20 +$E,44770,11 +$E,44789,15 +$E,44809,28 +$E,44938,15 +$E,46857,9 +$E,46876,16 +$E,46947,7 +$E,46987,15 +$E,47254,13 +$E,47338,6 +$E,47940,11 +$E,47959,15 +$E,47979,12 +$E,48138,6 +$E,48554,14 +$E,48938,4 +$E,50055,8 +$E,50204,7 +$E,50241,15 +$E,50261,24 +$E,50538,14 +$E,50766,18 +$E,50808,15 +$E,51135,12 +$E,51157,6 +$E,52690,108 +$E,68890,7 +$E,69802,7 +$E,70122,12 +$E,70765,12 +$E,71294,15 +$E,71595,14 +$E,71680,12 +$E,71701,23 +$E,71721,30 +$E,72138,12 +$E,72411,17 +$E,72938,17 +$E,73738,7 +$E,74200,12 +$E,74219,6 +$E,74538,15 +$E,75844,7 +$E,76138,15 +$E,76656,11 +$E,76675,10 +$E,76695,19 +$STOP,172,35113636.90,53054,195,17574,15,3,24 +$START,173,55485 +$E,314,23 +$E,317,16 +$E,653,19 +$E,731,9 +$E,941,12 +$E,1308,24 +$E,1328,25 +$E,1667,12 +$E,1873,12 +$E,2117,6 +$E,2137,23 +$E,2185,16 +$E,2673,5 +$E,2708,12 +$E,2827,24 +$E,2847,28 +$E,2866,19 +$E,3118,14 +$E,3138,18 +$E,4273,20 +$E,4849,12 +$E,4869,25 +$E,5073,15 +$E,6044,14 +$E,6064,7 +$E,6359,7 +$E,7608,12 +$E,7627,15 +$E,7693,15 +$E,7713,15 +$E,7836,15 +$E,7855,28 +$E,8451,7 +$E,8491,20 +$E,9519,19 +$E,9539,15 +$E,9591,4 +$E,10256,22 +$E,10406,15 +$E,10673,19 +$E,12273,19 +$E,13073,6 +$E,13873,15 +$E,14673,19 +$E,16279,17 +$E,16366,14 +$E,16386,12 +$E,17537,20 +$E,17557,24 +$E,17734,9 +$E,17873,12 +$E,18509,15 +$E,18673,11 +$E,18864,8 +$E,18884,16 +$E,19145,12 +$E,19972,7 +$E,19991,6 +$E,20273,8 +$E,21044,6 +$E,21083,7 +$E,21247,7 +$E,21375,15 +$E,21549,16 +$E,21593,15 +$E,21777,15 +$E,21797,24 +$E,21882,14 +$E,22403,19 +$E,22689,18 +$E,23195,19 +$E,23214,7 +$E,23402,19 +$E,23473,14 +$E,23744,6 +$E,24182,14 +$E,24688,6 +$E,24903,7 +$E,24923,17 +$E,25530,16 +$E,25895,5 +$E,25929,19 +$E,25940,17 +$E,26279,7 +$E,28279,8 +$E,28295,12 +$E,28315,12 +$E,28336,24 +$E,29955,14 +$E,30050,15 +$E,30070,22 +$E,30089,19 +$E,31472,24 +$E,31705,7 +$E,32474,6 +$E,32494,17 +$E,32703,159 +$E,32998,10 +$E,33872,7 +$E,35193,8 +$E,35596,12 +$E,35615,30 +$E,36242,14 +$E,36348,9 +$E,36367,9 +$E,37872,11 +$E,38672,7 +$E,39164,8 +$E,40271,7 +$E,40705,6 +$E,41096,9 +$E,41148,9 +$E,41528,11 +$E,41871,15 +$E,42671,15 +$E,43471,24 +$E,43660,4 +$E,44690,15 +$E,44710,26 +$E,44730,24 +$E,44765,19 +$E,44785,17 +$E,46165,15 +$E,46185,19 +$E,46221,15 +$E,46344,16 +$E,46363,30 +$E,46383,34 +$E,49559,12 +$E,49578,24 +$E,49871,24 +$E,50455,11 +$E,50474,22 +$E,50671,12 +$E,51471,14 +$E,58081,23 +$E,58100,24 +$E,58608,12 +$E,61244,12 +$E,63471,14 +$E,64641,12 +$E,64680,7 +$E,67578,4 +$E,67775,18 +$E,68250,6 +$E,68271,16 +$E,68306,10 +$E,68528,17 +$E,68547,22 +$E,68567,28 +$E,68965,11 +$E,69083,18 +$E,69871,19 +$E,70671,7 +$E,74671,12 +$E,77871,12 +$STOP,173,35113647.83,5848,156,17877,21,6,19 +$START,174,8024 +$E,1598,7 +$E,1618,7 +$E,1693,12 +$E,1713,25 +$E,1732,33 +$E,2261,19 +$E,3061,7 +$E,4852,7 +$E,4871,11 +$E,4891,12 +$E,5228,15 +$E,5662,6 +$E,6662,13 +$E,7061,12 +$E,7861,6 +$E,7887,70 +$E,8661,12 +$E,10231,15 +$E,10250,15 +$E,10270,17 +$E,11769,12 +$E,12794,9 +$E,12895,16 +$E,13376,12 +$E,14821,17 +$E,18076,14 +$E,18097,28 +$E,18257,7 +$E,18261,15 +$E,19741,24 +$E,20354,7 +$E,21136,20 +$E,21156,11 +$E,21176,23 +$E,23061,6 +$E,23401,7 +$E,25461,15 +$E,27104,15 +$E,27504,96 +$E,28660,11 +$E,29461,14 +$E,30763,7 +$E,30955,9 +$E,31096,10 +$E,35187,15 +$E,35206,19 +$E,35226,11 +$E,35860,17 +$E,35989,19 +$E,36028,8 +$E,36048,19 +$E,36660,7 +$E,37219,15 +$E,39757,7 +$E,39777,19 +$E,39796,7 +$E,39859,11 +$E,44279,8 +$E,44953,22 +$E,44972,4 +$E,44992,22 +$E,45992,24 +$E,46259,12 +$E,49459,8 +$E,51059,6 +$E,51228,7 +$E,51247,15 +$E,52659,14 +$E,53118,12 +$E,53811,17 +$E,56231,7 +$E,56251,28 +$E,56637,14 +$E,56659,14 +$E,56694,21 +$E,56970,7 +$E,57020,8 +$E,57040,31 +$E,58260,12 +$E,58356,263 +$E,58693,15 +$E,58712,22 +$E,58733,9 +$E,59722,6 +$E,59857,23 +$E,59895,15 +$E,59915,20 +$E,60251,4 +$E,60408,9 +$E,60532,5 +$E,60889,12 +$E,60909,7 +$E,60928,15 +$E,61092,14 +$E,61336,7 +$E,63859,14 +$E,65459,18 +$E,67059,12 +$E,69459,14 +$E,71059,12 +$E,72663,7 +$E,73459,9 +$E,77005,15 +$E,77024,16 +$E,77302,6 +$E,77322,15 +$E,77341,14 +$E,77453,14 +$E,77472,17 +$E,77507,6 +$STOP,174,35113658.54,22485,110,18284,21,4,24 +$START,175,24215 +$E,410,19 +$E,493,17 +$E,534,12 +$E,550,12 +$E,1027,7 +$E,1193,7 +$E,1676,6 +$E,2133,6 +$E,2320,6 +$E,2324,12 +$E,2486,15 +$E,2966,8 +$E,3131,6 +$E,3143,5 +$E,3565,12 +$E,3569,15 +$E,3573,24 +$E,3584,14 +$E,3601,19 +$E,3606,4 +$E,3609,7 +$E,3621,9 +$E,3722,15 +$E,3734,39 +$E,3746,15 +$E,4256,17 +$E,4260,14 +$E,4264,14 +$E,4414,7 +$E,4447,13 +$E,4460,15 +$E,4808,6 +$E,4839,7 +$E,4966,15 +$E,4970,17 +$E,5064,21 +$E,5126,16 +$E,5196,12 +$E,5543,14 +$E,5696,9 +$E,5708,14 +$E,6099,4 +$E,6119,21 +$E,6138,14 +$E,6154,7 +$E,6271,6 +$E,6845,7 +$E,7217,15 +$E,7237,24 +$E,7492,6 +$E,9333,9 +$E,9707,12 +$E,9749,20 +$E,10292,6 +$E,10314,8 +$E,10333,14 +$E,10353,36 +$E,10713,15 +$E,10733,14 +$E,10753,28 +$E,10832,15 +$E,12900,7 +$E,12920,12 +$E,12940,25 +$E,13243,7 +$E,13333,15 +$E,13999,15 +$E,14018,15 +$E,14563,18 +$E,14584,31 +$E,15733,8 +$E,17333,15 +$E,18221,4 +$E,19734,11 +$E,21333,22 +$E,22933,14 +$E,23498,14 +$E,23517,7 +$E,23537,19 +$E,23650,12 +$E,23789,15 +$E,23809,14 +$E,23828,13 +$E,23941,8 +$E,23961,22 +$E,23980,22 +$E,24533,4 +$E,25332,19 +$E,26526,31 +$E,26701,6 +$E,26721,6 +$E,26933,7 +$E,27869,6 +$E,28532,14 +$E,28928,15 +$E,31732,19 +$E,34050,7 +$E,34204,7 +$E,34941,4 +$E,36581,7 +$E,37318,7 +$E,37338,15 +$E,37458,6 +$E,37926,12 +$E,37945,19 +$E,37965,17 +$E,38132,7 +$E,38748,14 +$E,38767,28 +$E,38932,15 +$E,39479,19 +$E,39519,7 +$E,39749,4 +$E,40531,15 +$E,41878,9 +$E,41899,12 +$E,41919,24 +$E,42131,7 +$E,43592,7 +$E,43731,7 +$E,44531,15 +$E,46131,9 +$E,47112,28 +$E,47132,15 +$E,47294,28 +$E,47314,19 +$E,47333,34 +$E,47477,4 +$E,48245,9 +$E,48776,8 +$E,48795,11 +$E,48815,17 +$E,48910,11 +$E,48952,17 +$E,49977,8 +$E,49997,12 +$E,50220,15 +$E,50235,6 +$E,50290,9 +$E,50632,7 +$E,50931,12 +$E,51381,15 +$E,51401,24 +$E,51420,23 +$E,51660,24 +$E,51680,35 +$E,51699,33 +$E,51741,7 +$E,52531,15 +$E,52547,12 +$E,52614,8 +$E,53331,6 +$E,54042,9 +$E,54062,23 +$E,54082,24 +$E,54131,19 +$E,54795,4 +$E,54959,14 +$E,55228,12 +$E,56531,12 +$E,57911,7 +$E,57931,12 +$E,59292,6 +$E,60931,17 +$E,60950,24 +$E,61833,14 +$E,63283,7 +$E,63573,24 +$E,63593,17 +$E,63736,7 +$E,64531,7 +$E,64692,6 +$E,65179,123 +$E,67731,6 +$E,68784,7 +$E,69331,15 +$E,73066,15 +$E,73085,16 +$E,73331,7 +$E,74021,8 +$E,74145,12 +$E,75731,19 +$E,77331,9 +$E,77403,14 +$E,77423,15 +$E,77443,7 +$E,77462,24 +$STOP,175,35113669.0,41241,187,18228,15,3,33 +$START,176,43477 +$E,1334,6 +$E,2134,16 +$E,2935,9 +$E,3011,14 +$E,3031,11 +$E,3055,15 +$E,3075,22 +$E,3095,31 +$E,3114,28 +$E,3734,16 +$E,3815,22 +$E,3895,15 +$E,4534,6 +$E,5334,9 +$E,5529,10 +$E,5549,28 +$E,5568,28 +$E,6136,12 +$E,6934,15 +$E,7441,15 +$E,7460,39 +$E,7480,20 +$E,7691,20 +$E,8686,8 +$E,8725,24 +$E,9334,20 +$E,10134,24 +$E,12534,8 +$E,13164,15 +$E,13183,24 +$E,13203,19 +$E,13336,7 +$E,14228,14 +$E,14247,17 +$E,16694,9 +$E,16714,14 +$E,17069,15 +$E,17334,14 +$E,18934,12 +$E,19043,15 +$E,19062,15 +$E,19082,24 +$E,21552,15 +$E,21572,17 +$E,22133,5 +$E,22933,22 +$E,24535,7 +$E,24971,14 +$E,24994,13 +$E,25013,24 +$E,25333,17 +$E,26933,15 +$E,27733,15 +$E,28302,14 +$E,28533,12 +$E,30133,15 +$E,31733,6 +$E,32441,15 +$E,32460,27 +$E,32480,11 +$E,32534,12 +$E,33037,9 +$E,33057,20 +$E,33076,9 +$E,33333,7 +$E,33594,6 +$E,33614,16 +$E,33633,16 +$E,33709,16 +$E,36425,9 +$E,36444,9 +$E,36606,12 +$E,38404,19 +$E,41661,7 +$E,41681,6 +$E,41700,24 +$E,42032,10 +$E,42132,8 +$E,42729,25 +$E,42748,31 +$E,42911,23 +$E,42968,6 +$E,43732,7 +$E,44532,7 +$E,45998,12 +$E,46017,15 +$E,46037,12 +$E,46132,8 +$E,48533,12 +$E,48812,28 +$E,48832,35 +$E,49332,12 +$E,49936,5 +$E,50788,4 +$E,50807,12 +$E,51732,15 +$E,54132,4 +$E,55298,8 +$E,55318,6 +$E,55338,19 +$E,56168,17 +$E,56187,35 +$E,56206,12 +$E,56532,14 +$E,56994,6 +$E,57013,15 +$E,57033,16 +$E,57332,17 +$E,57972,12 +$E,58011,31 +$E,61866,12 +$E,61886,19 +$E,62932,11 +$E,64532,9 +$E,64610,12 +$E,69332,18 +$E,69507,19 +$E,69527,15 +$E,69546,15 +$E,71095,12 +$E,71114,24 +$E,71133,22 +$E,71732,7 +$E,73332,14 +$E,73496,12 +$E,73516,28 +$E,73535,17 +$E,73689,5 +$E,74932,7 +$E,76414,6 +$E,76726,15 +$E,77356,7 +$E,77668,16 +$STOP,176,35113679.85,58602,133,18282,20,2,14 +$START,177,60439 +$E,109,7 +$E,2520,13 +$E,5235,8 +$E,6835,12 +$E,9235,14 +$E,9470,15 +$E,9490,23 +$E,9510,17 +$E,9995,15 +$E,10015,21 +$E,10035,24 +$E,10051,28 +$E,12033,4 +$E,12053,28 +$E,12153,19 +$E,12173,7 +$E,12192,31 +$E,12720,17 +$E,12905,17 +$E,12924,24 +$E,13022,7 +$E,13041,24 +$E,13536,24 +$E,13576,14 +$E,14035,23 +$E,14835,25 +$E,15635,8 +$E,15805,158 +$E,16026,7 +$E,17234,12 +$E,17524,6 +$E,17543,14 +$E,18034,14 +$E,18713,19 +$E,18732,19 +$E,18752,19 +$E,19030,19 +$E,19637,15 +$E,20894,16 +$E,20936,15 +$E,20977,9 +$E,21234,15 +$E,21438,8 +$E,21457,15 +$E,21477,27 +$E,22834,14 +$E,23634,15 +$E,25234,7 +$E,26036,14 +$E,27314,8 +$E,27334,9 +$E,27469,14 +$E,27523,6 +$E,27543,19 +$E,27634,10 +$E,28005,25 +$E,28025,24 +$E,28267,15 +$E,28296,14 +$E,28315,15 +$E,28434,12 +$E,28649,15 +$E,28668,31 +$E,28688,14 +$E,30289,7 +$E,30308,15 +$E,31158,8 +$E,34583,12 +$E,34603,31 +$E,34622,15 +$E,35161,14 +$E,35634,7 +$E,36350,6 +$E,36370,19 +$E,36390,24 +$E,36442,7 +$E,36458,15 +$E,36477,28 +$E,36967,16 +$E,37234,12 +$E,37737,14 +$E,37988,7 +$E,38008,12 +$E,38034,6 +$E,38478,6 +$E,39379,14 +$E,39633,9 +$E,40433,8 +$E,40800,12 +$E,42033,7 +$E,43030,4 +$E,43049,17 +$E,43069,19 +$E,43633,7 +$E,47175,23 +$E,48433,8 +$E,48629,7 +$E,48650,8 +$E,48669,33 +$E,50033,15 +$E,50833,6 +$E,51613,7 +$E,55644,7 +$E,58758,7 +$E,58778,12 +$E,58798,12 +$E,58840,4 +$E,59051,14 +$E,59225,9 +$E,59364,13 +$E,59384,15 +$E,60443,12 +$E,61233,4 +$E,63531,7 +$E,64812,12 +$E,66053,4 +$E,66833,20 +$E,67531,20 +$E,67552,16 +$E,67572,13 +$E,67633,14 +$E,67690,16 +$E,67709,32 +$E,67729,24 +$E,68218,31 +$E,68237,31 +$E,68337,19 +$E,68356,17 +$E,68433,23 +$E,69233,17 +$E,69726,4 +$E,69741,12 +$E,69776,11 +$E,69867,7 +$E,71633,9 +$E,72828,6 +$E,73233,16 +$E,73506,12 +$E,74385,7 +$E,74404,20 +$E,74425,24 +$E,74485,9 +$E,74505,12 +$E,74524,12 +$E,74723,17 +$E,74742,31 +$E,74762,7 +$E,74840,15 +$E,75633,8 +$E,76805,16 +$E,76825,14 +$E,77431,15 +$E,77450,24 +$E,77607,10 +$E,77627,24 +$E,77648,15 +$STOP,177,35113690.41,10864,156,17735,9,2,19 +$START,178,12821 +$E,860,11 +$E,4980,15 +$E,7380,9 +$E,7846,19 +$E,7866,15 +$E,7886,24 +$E,8980,12 +$E,9828,4 +$E,9847,30 +$E,10325,7 +$E,10481,15 +$E,10501,23 +$E,10520,31 +$E,10542,14 +$E,10561,31 +$E,10601,12 +$E,10636,17 +$E,12179,17 +$E,14697,12 +$E,15379,7 +$E,17481,6 +$E,17500,9 +$E,17580,9 +$E,17865,6 +$E,17884,6 +$E,18167,12 +$E,18187,15 +$E,18413,7 +$E,18579,17 +$E,19379,15 +$E,19613,71 +$E,20343,111 +$E,20375,7 +$E,20395,16 +$E,21784,19 +$E,25789,4 +$E,26417,6 +$E,26617,7 +$E,26656,12 +$E,26676,22 +$E,26790,6 +$E,26871,12 +$E,27037,7 +$E,27057,24 +$E,27224,7 +$E,27347,8 +$E,27367,7 +$E,27386,6 +$E,27526,15 +$E,28179,12 +$E,28979,15 +$E,29779,17 +$E,29890,15 +$E,29910,15 +$E,29931,6 +$E,32405,7 +$E,32807,12 +$E,33188,14 +$E,33208,16 +$E,33757,12 +$E,34579,12 +$E,35144,12 +$E,35164,24 +$E,35183,17 +$E,35397,6 +$E,36179,19 +$E,36434,7 +$E,36453,19 +$E,36473,8 +$E,36611,7 +$E,38081,22 +$E,38137,19 +$E,38737,6 +$E,42287,6 +$E,42460,4 +$E,42480,12 +$E,42504,17 +$E,44581,7 +$E,44601,12 +$E,44620,6 +$E,44673,15 +$E,46579,12 +$E,49781,6 +$E,50885,7 +$E,50929,15 +$E,50948,16 +$E,51148,14 +$E,51167,17 +$E,51187,9 +$E,54754,7 +$E,55226,6 +$E,55378,24 +$E,55427,15 +$E,55458,13 +$E,55478,13 +$E,56048,8 +$E,56067,18 +$E,58578,5 +$E,60320,7 +$E,60715,8 +$E,60735,22 +$E,60830,15 +$E,61778,19 +$E,64155,12 +$E,64178,4 +$E,64478,12 +$E,64535,6 +$E,67028,6 +$E,67378,14 +$E,71272,4 +$E,72083,24 +$E,72103,14 +$E,72123,11 +$E,72151,19 +$E,72228,17 +$E,72248,16 +$E,72978,10 +$E,73778,12 +$E,74010,17 +$E,74029,32 +$E,74049,24 +$E,74212,15 +$E,74237,19 +$E,74256,19 +$E,75129,9 +$E,75149,6 +$E,75379,28 +$E,75395,6 +$E,75460,9 +$E,76181,7 +$E,76266,19 +$E,76287,12 +$E,76306,23 +$E,77009,31 +$E,77011,14 +$E,77410,27 +$STOP,178,35113701.9,28041,136,17773,12,3,22 +$START,179,29924 +$E,39,4 +$E,59,14 +$E,706,19 +$E,726,25 +$E,745,6 +$E,1540,16 +$E,2340,12 +$E,4495,8 +$E,4515,16 +$E,4536,9 +$E,4740,14 +$E,6340,14 +$E,7320,9 +$E,7340,24 +$E,7360,24 +$E,7786,14 +$E,7806,28 +$E,7833,7 +$E,9211,7 +$E,9233,9 +$E,9276,4 +$E,9540,12 +$E,10278,7 +$E,10442,14 +$E,10462,15 +$E,10776,7 +$E,10796,15 +$E,11177,6 +$E,11579,15 +$E,11598,30 +$E,11945,15 +$E,12079,20 +$E,12742,16 +$E,13540,19 +$E,14552,15 +$E,14698,12 +$E,15139,22 +$E,15976,6 +$E,16058,12 +$E,16077,14 +$E,16098,14 +$E,16153,12 +$E,16172,17 +$E,16740,12 +$E,19168,7 +$E,19293,6 +$E,19313,10 +$E,19332,12 +$E,19823,6 +$E,20405,24 +$E,20425,25 +$E,20619,38 +$E,20739,9 +$E,20859,8 +$E,22038,11 +$E,22288,15 +$E,22308,15 +$E,22331,15 +$E,22363,15 +$E,22631,12 +$E,22651,15 +$E,22683,11 +$E,22722,8 +$E,22798,19 +$E,22818,28 +$E,22837,24 +$E,23206,15 +$E,23225,15 +$E,23361,15 +$E,23904,15 +$E,23923,17 +$E,25223,12 +$E,25539,7 +$E,27891,17 +$E,27910,24 +$E,27968,20 +$E,27988,20 +$E,28043,28 +$E,28063,28 +$E,28082,35 +$E,28236,17 +$E,28272,16 +$E,28291,28 +$E,28639,4 +$E,28734,19 +$E,29912,7 +$E,30347,19 +$E,31112,21 +$E,31131,14 +$E,31150,14 +$E,32104,15 +$E,35139,7 +$E,35254,11 +$E,35274,23 +$E,35293,33 +$E,35943,18 +$E,35978,22 +$E,36119,12 +$E,39670,12 +$E,39710,19 +$E,39938,7 +$E,40187,19 +$E,40226,6 +$E,40363,15 +$E,40382,12 +$E,43138,8 +$E,44738,14 +$E,47432,11 +$E,47452,12 +$E,47471,24 +$E,48472,12 +$E,48492,22 +$E,48738,15 +$E,48873,15 +$E,48912,19 +$E,49538,19 +$E,49711,19 +$E,49731,15 +$E,49750,17 +$E,50023,20 +$E,50063,28 +$E,50470,17 +$E,50491,15 +$E,51939,11 +$E,55123,15 +$E,55144,14 +$E,56738,7 +$E,57889,12 +$E,58029,19 +$E,58049,15 +$E,59938,7 +$E,62006,11 +$E,62026,15 +$E,62045,17 +$E,62338,14 +$E,62792,5 +$E,63246,8 +$E,63265,15 +$E,63284,17 +$E,64154,12 +$E,64208,18 +$E,64335,15 +$E,64500,17 +$E,64580,7 +$E,64599,19 +$E,64825,8 +$E,64844,19 +$E,65230,7 +$E,65250,19 +$E,65539,7 +$E,66022,7 +$E,66042,15 +$E,66191,15 +$E,66338,8 +$E,66715,24 +$E,67107,6 +$E,67699,6 +$E,67950,11 +$E,68206,15 +$E,68280,12 +$E,68359,12 +$E,68378,15 +$E,68738,7 +$E,68821,7 +$E,68840,7 +$E,68862,14 +$E,69141,8 +$E,69299,28 +$E,69441,17 +$E,69500,12 +$E,69542,11 +$E,69839,15 +$E,69858,30 +$E,70055,15 +$E,70625,12 +$E,70815,15 +$E,70836,9 +$E,71108,7 +$E,71148,11 +$E,71198,15 +$E,71498,4 +$E,71518,24 +$E,71538,14 +$E,71938,9 +$E,72426,14 +$E,72447,15 +$E,72604,14 +$E,72738,7 +$E,73538,21 +$E,74040,6 +$E,74253,15 +$E,74338,15 +$E,75784,15 +$E,75973,17 +$E,75993,13 +$E,76012,19 +$E,76738,15 +$E,77538,17 +$E,77557,19 +$E,77576,21 +$E,78120,6 +$STOP,179,35113711.67,47695,201,18024,16,4,24 +$ENV,179,35113712.64,23.7,56.4,23.9,54.4,23.58,971.40 +$BATT,179,35113712.72,4143,-17,891,938,24.05 +$START,180,51420 +$E,2713,7 +$E,2769,7 +$E,5356,6 +$E,5396,28 +$E,5571,6 +$E,6098,12 +$E,6137,24 +$E,6339,8 +$E,6358,16 +$E,8580,6 +$E,8600,11 +$E,8620,15 +$E,9275,8 +$E,9294,11 +$E,9590,12 +$E,9621,7 +$E,12260,20 +$E,12280,19 +$E,16906,4 +$E,17115,12 +$E,17148,15 +$E,17168,15 +$E,17271,24 +$E,17290,15 +$E,17310,24 +$E,17706,7 +$E,18506,7 +$E,19037,17 +$E,19056,15 +$E,19075,21 +$E,19308,14 +$E,19324,28 +$E,20106,15 +$E,21404,7 +$E,21424,15 +$E,21706,16 +$E,22428,7 +$E,22506,11 +$E,23302,12 +$E,23321,21 +$E,23337,12 +$E,23356,15 +$E,23833,17 +$E,23916,14 +$E,27306,8 +$E,29538,7 +$E,30833,19 +$E,30856,7 +$E,32396,12 +$E,32906,12 +$E,34055,12 +$E,34076,12 +$E,36287,5 +$E,36957,6 +$E,37691,7 +$E,38513,12 +$E,38548,15 +$E,38568,24 +$E,42505,12 +$E,44050,7 +$E,44090,12 +$E,44109,15 +$E,45078,19 +$E,45097,12 +$E,45705,14 +$E,47305,12 +$E,48729,14 +$E,48749,21 +$E,48769,24 +$E,48915,15 +$E,49063,9 +$E,50496,9 +$E,50791,16 +$E,50811,14 +$E,52584,7 +$E,52605,14 +$E,54507,7 +$E,55729,12 +$E,55765,7 +$E,55871,7 +$E,56289,15 +$E,56755,15 +$E,57700,11 +$E,57756,19 +$E,58158,24 +$E,58182,24 +$E,58201,28 +$E,58368,14 +$E,58915,7 +$E,58970,4 +$E,59029,17 +$E,61706,7 +$E,61879,4 +$E,62505,9 +$E,64023,7 +$E,64043,6 +$E,64905,7 +$E,68338,14 +$E,68358,24 +$E,68663,15 +$E,68683,15 +$E,68703,21 +$E,69784,22 +$E,69823,6 +$E,69982,11 +$E,70505,7 +$E,71305,9 +$E,73622,14 +$E,74192,6 +$E,74505,10 +$E,76105,24 +$E,76321,14 +$E,76360,16 +$E,77705,9 +$STOP,180,35113722.81,442,114,17718,26,4,22 +$START,181,2101 +$E,16,8 +$E,103,4 +$E,1553,19 +$E,2353,14 +$E,3065,12 +$E,3084,29 +$E,5329,12 +$E,5552,15 +$E,6353,6 +$E,6606,9 +$E,6626,24 +$E,6646,14 +$E,8023,14 +$E,8042,6 +$E,8934,15 +$E,8953,18 +$E,8988,14 +$E,9590,14 +$E,9609,15 +$E,10036,9 +$E,10069,12 +$E,10287,7 +$E,10306,15 +$E,10367,14 +$E,10647,7 +$E,10833,14 +$E,10957,12 +$E,11126,15 +$E,11756,14 +$E,12196,23 +$E,12216,15 +$E,13569,12 +$E,14182,22 +$E,16304,6 +$E,16609,15 +$E,17053,11 +$E,17105,7 +$E,17376,9 +$E,17444,17 +$E,17464,7 +$E,17771,9 +$E,17791,15 +$E,17810,30 +$E,17857,8 +$E,18352,9 +$E,19066,15 +$E,19088,7 +$E,20173,8 +$E,20426,11 +$E,22808,7 +$E,22847,8 +$E,22966,7 +$E,23152,14 +$E,24208,17 +$E,24228,17 +$E,24248,24 +$E,24269,15 +$E,24288,24 +$E,24308,19 +$E,24535,18 +$E,28795,6 +$E,28799,15 +$E,29130,27 +$E,29552,27 +$E,31152,7 +$E,34116,12 +$E,34146,7 +$E,34167,15 +$E,34352,7 +$E,34635,6 +$E,34655,20 +$E,36258,16 +$E,36278,15 +$E,36297,30 +$E,36752,33 +$E,36985,14 +$E,37005,31 +$E,37026,38 +$E,37046,7 +$E,39740,15 +$E,39760,19 +$E,39951,7 +$E,41551,12 +$E,42351,12 +$E,43951,7 +$E,46013,7 +$E,46053,22 +$E,46364,7 +$E,47698,12 +$E,47718,7 +$E,49808,7 +$E,50625,11 +$E,50645,12 +$E,50665,15 +$E,51151,18 +$E,51719,6 +$E,51894,8 +$E,53522,7 +$E,53883,9 +$E,53903,6 +$E,54518,16 +$E,54557,25 +$E,54798,8 +$E,56043,7 +$E,56063,6 +$E,56753,7 +$E,58038,12 +$E,58058,15 +$E,58078,7 +$E,62367,10 +$E,62386,12 +$E,62405,26 +$E,62432,9 +$E,62452,32 +$E,63633,14 +$E,63652,15 +$E,65346,427 +$E,65551,6 +$E,65785,8 +$E,65804,30 +$E,67151,9 +$E,67955,16 +$E,69551,9 +$E,71575,7 +$E,72938,8 +$E,72957,22 +$E,72977,18 +$E,73514,11 +$E,73535,12 +$E,73554,24 +$E,73570,15 +$E,74355,14 +$E,75026,8 +$E,75046,31 +$E,75151,14 +$E,76751,6 +$E,77037,4 +$E,77209,23 +$E,77899,15 +$E,77919,19 +$E,77938,15 +$E,78061,4 +$STOP,181,35113733.27,17534,142,18411,20,2,30 +$START,182,19347 +$E,1176,14 +$E,1969,15 +$E,2406,12 +$E,2448,7 +$E,2468,15 +$E,2599,15 +$E,2619,19 +$E,3937,30 +$E,4374,15 +$E,5169,8 +$E,6075,7 +$E,6769,7 +$E,7671,6 +$E,7951,15 +$E,10259,7 +$E,10791,7 +$E,11689,5 +$E,13169,12 +$E,14769,12 +$E,16380,16 +$E,16396,14 +$E,16415,25 +$E,16885,15 +$E,16905,17 +$E,16925,31 +$E,17187,15 +$E,18769,12 +$E,21876,24 +$E,22283,7 +$E,22303,17 +$E,22322,27 +$E,22642,22 +$E,22662,22 +$E,22698,15 +$E,22769,11 +$E,22865,12 +$E,22885,19 +$E,23008,20 +$E,23047,6 +$E,24384,5 +$E,25170,7 +$E,30769,7 +$E,31242,12 +$E,32369,24 +$E,32411,12 +$E,32414,22 +$E,32436,7 +$E,32449,27 +$E,32786,6 +$E,33969,11 +$E,34769,17 +$E,36369,7 +$E,36771,7 +$E,36790,7 +$E,36961,12 +$E,36980,28 +$E,37169,14 +$E,37460,15 +$E,37479,24 +$E,37510,12 +$E,37889,19 +$E,37910,15 +$E,37930,28 +$E,38678,12 +$E,39568,7 +$E,40368,12 +$E,40399,20 +$E,40513,24 +$E,41968,6 +$E,42268,8 +$E,42768,9 +$E,43756,12 +$E,43776,7 +$E,44368,8 +$E,46768,14 +$E,48399,12 +$E,48420,5 +$E,52368,6 +$E,52747,10 +$E,52766,25 +$E,52786,10 +$E,52881,15 +$E,53955,17 +$E,53974,5 +$E,54526,6 +$E,54545,15 +$E,55314,13 +$E,55340,5 +$E,55359,31 +$E,57070,6 +$E,57310,8 +$E,57330,11 +$E,60820,11 +$E,60840,24 +$E,60880,15 +$E,61170,4 +$E,61336,19 +$E,61758,12 +$E,63568,13 +$E,64543,12 +$E,64563,12 +$E,64584,17 +$E,64604,4 +$E,64866,4 +$E,65168,12 +$E,65269,7 +$E,65864,14 +$E,65886,11 +$E,65905,19 +$E,65968,24 +$E,66768,25 +$E,67341,30 +$E,67360,33 +$E,69968,8 +$E,73521,7 +$E,74417,54 +$E,74543,15 +$E,74583,11 +$E,74938,15 +$E,76153,22 +$E,76173,27 +$E,76617,7 +$E,77710,6 +$STOP,182,35113743.87,34176,123,18106,17,3,14 +$START,183,35893 +$E,19,8 +$E,670,8 +$E,690,14 +$E,705,30 +$E,725,28 +$E,1954,12 +$E,2732,12 +$E,2752,24 +$E,2774,24 +$E,3086,9 +$E,4232,6 +$E,5589,7 +$E,5608,9 +$E,5627,12 +$E,5901,7 +$E,6956,15 +$E,6976,17 +$E,10015,15 +$E,10034,12 +$E,10260,24 +$E,10279,23 +$E,10299,19 +$E,11282,56 +$E,12341,7 +$E,12361,6 +$E,12380,14 +$E,12423,15 +$E,12578,11 +$E,13054,19 +$E,13074,12 +$E,13486,12 +$E,15107,7 +$E,15186,23 +$E,16296,14 +$E,16686,7 +$E,17960,6 +$E,17980,19 +$E,18002,12 +$E,18126,15 +$E,18146,31 +$E,18166,31 +$E,19886,7 +$E,20279,15 +$E,20298,10 +$E,20318,19 +$E,20695,14 +$E,20711,25 +$E,22286,4 +$E,23514,12 +$E,23534,7 +$E,23886,12 +$E,28439,7 +$E,28459,12 +$E,28506,14 +$E,28529,17 +$E,28549,30 +$E,28681,24 +$E,28700,24 +$E,28737,14 +$E,28845,6 +$E,28991,15 +$E,29011,14 +$E,29349,15 +$E,29368,27 +$E,29409,8 +$E,29486,11 +$E,29519,14 +$E,29538,28 +$E,31086,12 +$E,31405,24 +$E,31424,24 +$E,31444,19 +$E,31886,5 +$E,35089,15 +$E,35129,22 +$E,35132,14 +$E,35463,9 +$E,35473,22 +$E,36721,15 +$E,37486,22 +$E,39631,7 +$E,39695,7 +$E,39885,14 +$E,41805,7 +$E,41885,28 +$E,41904,28 +$E,44685,9 +$E,44841,7 +$E,44861,12 +$E,44884,15 +$E,45891,8 +$E,46104,14 +$E,46124,12 +$E,47885,14 +$E,48794,4 +$E,49365,11 +$E,49384,15 +$E,49404,16 +$E,49443,13 +$E,49463,30 +$E,49485,12 +$E,49500,7 +$E,49886,22 +$E,49906,15 +$E,50495,8 +$E,50634,7 +$E,50654,32 +$E,51048,11 +$E,51073,20 +$E,51092,12 +$E,51191,7 +$E,51888,12 +$E,53075,10 +$E,53095,14 +$E,53656,15 +$E,53948,7 +$E,54009,15 +$E,54028,9 +$E,55814,4 +$E,55853,7 +$E,55885,11 +$E,57485,7 +$E,58285,15 +$E,59085,16 +$E,59885,15 +$E,60480,16 +$E,60637,11 +$E,61242,47 +$E,61485,15 +$E,62012,8 +$E,62324,6 +$E,65129,6 +$E,65149,7 +$E,65171,7 +$E,65330,7 +$E,65349,23 +$E,65644,7 +$E,66976,8 +$E,68200,14 +$E,68314,15 +$E,68335,12 +$E,68436,7 +$E,68440,24 +$E,68582,12 +$E,69485,16 +$E,69658,12 +$E,69739,14 +$E,70285,15 +$E,70728,4 +$E,71198,15 +$E,71218,16 +$E,71238,16 +$E,72685,15 +$E,74952,12 +$E,75031,12 +$E,76105,17 +$E,77178,15 +$E,77197,15 +$E,77217,27 +$E,77337,17 +$E,77356,29 +$E,77376,35 +$E,77541,11 +$E,77560,15 +$E,77579,15 +$STOP,183,35113754.38,52150,165,18088,18,3,28 +$START,184,54184 +$E,58,7 +$E,1232,15 +$E,1251,12 +$E,1294,17 +$E,1658,16 +$E,2229,12 +$E,4858,5 +$E,8058,4 +$E,8101,11 +$E,8120,15 +$E,8478,11 +$E,8858,12 +$E,8874,9 +$E,9859,6 +$E,12623,7 +$E,13326,24 +$E,13659,12 +$E,13857,14 +$E,14185,13 +$E,14451,9 +$E,14459,19 +$E,14748,15 +$E,14865,12 +$E,15006,36 +$E,15025,16 +$E,15341,17 +$E,15361,23 +$E,15458,7 +$E,15998,15 +$E,16096,12 +$E,16155,8 +$E,16373,7 +$E,16429,11 +$E,17248,5 +$E,17658,16 +$E,17873,15 +$E,18248,14 +$E,18873,16 +$E,19435,7 +$E,20123,23 +$E,20545,24 +$E,20548,6 +$E,20550,11 +$E,20561,12 +$E,20701,17 +$E,20826,14 +$E,20967,19 +$E,21326,9 +$E,21451,15 +$E,21623,8 +$E,21665,8 +$E,21685,6 +$E,22014,6 +$E,22278,4 +$E,22475,6 +$E,22873,8 +$E,22935,14 +$E,23373,7 +$E,24506,7 +$E,24810,13 +$E,25052,6 +$E,25169,7 +$E,25189,15 +$E,25208,19 +$E,25240,12 +$E,25424,26 +$E,25443,22 +$E,25631,6 +$E,25982,12 +$E,26463,14 +$E,26680,12 +$E,26700,21 +$E,26719,19 +$E,26842,16 +$E,26862,21 +$E,26998,12 +$E,28748,7 +$E,28810,7 +$E,29879,6 +$E,30342,6 +$E,30685,12 +$E,31258,17 +$E,31284,14 +$E,31323,18 +$E,31935,15 +$E,33658,8 +$E,33755,12 +$E,33774,21 +$E,34201,9 +$E,34221,12 +$E,34240,23 +$E,34747,24 +$E,34767,28 +$E,34787,27 +$E,35806,19 +$E,35826,24 +$E,36101,15 +$E,36293,8 +$E,36313,19 +$E,36332,24 +$E,36368,11 +$E,36554,11 +$E,36592,14 +$E,36858,9 +$E,37488,7 +$E,37713,17 +$E,37716,19 +$E,38458,14 +$E,39047,4 +$E,39066,12 +$E,39086,24 +$E,40057,7 +$E,40243,24 +$E,40262,15 +$E,40282,24 +$E,40857,5 +$E,41657,23 +$E,42457,15 +$E,43130,19 +$E,43149,30 +$E,43171,19 +$E,43257,27 +$E,43809,16 +$E,44063,12 +$E,44271,4 +$E,45372,7 +$E,45684,11 +$E,45747,12 +$E,45895,8 +$E,46309,6 +$E,46536,19 +$E,46557,15 +$E,46863,7 +$E,46934,9 +$E,47247,19 +$E,47257,8 +$E,47394,7 +$E,47413,11 +$E,47433,24 +$E,47872,12 +$E,48004,12 +$E,48014,24 +$E,48057,25 +$E,48184,15 +$E,48512,18 +$E,48531,22 +$E,48551,23 +$E,48670,4 +$E,48690,28 +$E,48709,24 +$E,48809,7 +$E,49747,12 +$E,50109,57 +$E,50457,21 +$E,51257,12 +$E,53657,14 +$E,54611,4 +$E,54631,14 +$E,54744,13 +$E,54764,24 +$E,55684,22 +$E,55748,7 +$E,55936,4 +$E,55956,15 +$E,55976,15 +$E,56057,23 +$E,56857,15 +$E,57037,25 +$E,57057,18 +$E,57078,24 +$E,57208,12 +$E,57657,6 +$E,57904,19 +$E,60428,7 +$E,60468,14 +$E,60488,25 +$E,60513,16 +$E,60532,28 +$E,60554,17 +$E,60899,15 +$E,60919,24 +$E,62457,12 +$E,63809,15 +$E,64028,11 +$E,64057,7 +$E,64141,14 +$E,64324,7 +$E,64364,15 +$E,64409,20 +$E,64430,19 +$E,64612,19 +$E,64919,23 +$E,64939,6 +$E,65520,28 +$E,65676,6 +$E,65832,15 +$E,65989,14 +$E,66034,10 +$E,66053,17 +$E,66145,12 +$E,66301,12 +$E,66457,14 +$E,66614,14 +$E,66770,26 +$E,67274,16 +$E,67559,30 +$E,67621,15 +$E,67700,12 +$E,67871,16 +$E,68184,38 +$E,68564,7 +$E,68780,16 +$E,68809,14 +$E,68820,24 +$E,69121,6 +$E,69638,22 +$E,69660,5 +$E,70598,12 +$E,70618,23 +$E,70637,7 +$E,71934,8 +$E,71950,12 +$E,72012,11 +$E,72038,9 +$E,72057,15 +$E,72559,15 +$E,72700,12 +$E,73036,7 +$E,73184,31 +$E,73246,24 +$E,73301,7 +$E,73387,7 +$E,73473,29 +$E,73657,6 +$E,73809,19 +$E,74434,19 +$E,74629,4 +$E,75059,24 +$E,75240,12 +$E,75259,19 +$E,75684,7 +$E,75996,11 +$E,76174,12 +$E,76700,24 +$E,76719,18 +$E,76857,24 +$E,77053,6 +$E,77229,45 +$E,77728,10 +$E,77871,7 +$STOP,184,35113765.10,8929,250,18987,38,10,46 +$START,185,11947 +$E,1151,6 +$E,1537,30 +$E,1926,14 +$E,1945,16 +$E,1965,15 +$E,2422,19 +$E,3801,12 +$E,3820,4 +$E,3840,7 +$E,4037,35 +$E,5013,7 +$E,5504,16 +$E,5652,15 +$E,6422,22 +$E,6537,45 +$E,7223,15 +$E,7225,28 +$E,7787,14 +$E,8022,17 +$E,8115,7 +$E,8725,24 +$E,8823,24 +$E,9189,12 +$E,9623,22 +$E,9902,30 +$E,10661,4 +$E,10805,96 +$E,11771,15 +$E,11791,12 +$E,12095,12 +$E,12115,28 +$E,12822,11 +$E,13650,15 +$E,13669,15 +$E,17038,17 +$E,17058,11 +$E,17077,31 +$E,18073,7 +$E,18483,4 +$E,18862,6 +$E,19037,6 +$E,19088,12 +$E,19127,16 +$E,19224,16 +$E,19774,17 +$E,19794,25 +$E,20038,22 +$E,21755,15 +$E,22423,9 +$E,24084,63 +$E,24467,7 +$E,24607,7 +$E,24662,24 +$E,24725,38 +$E,24920,15 +$E,24975,25 +$E,25037,25 +$E,25100,25 +$E,25123,22 +$E,25132,4 +$E,25287,28 +$E,25459,22 +$E,25545,24 +$E,25600,20 +$E,25604,7 +$E,25623,24 +$E,25639,12 +$E,25669,12 +$E,25689,16 +$E,25709,40 +$E,25728,24 +$E,25857,27 +$E,25861,7 +$E,25912,28 +$E,25975,34 +$E,26225,48 +$E,26291,6 +$E,26310,22 +$E,26537,39 +$E,27162,24 +$E,27870,12 +$E,27891,12 +$E,27910,6 +$E,28031,7 +$E,28822,24 +$E,28932,7 +$E,33179,15 +$E,33199,14 +$E,33219,15 +$E,33500,11 +$E,33520,6 +$E,33622,14 +$E,34166,9 +$E,34876,11 +$E,34905,6 +$E,34925,12 +$E,35064,12 +$E,35084,24 +$E,35103,31 +$E,35222,22 +$E,35262,17 +$E,38165,17 +$E,41946,7 +$E,41966,7 +$E,42788,16 +$E,42828,15 +$E,42847,17 +$E,43227,23 +$E,43243,7 +$E,43262,12 +$E,43339,24 +$E,46298,7 +$E,46318,7 +$E,46421,15 +$E,46639,4 +$E,46659,7 +$E,46796,11 +$E,46816,12 +$E,47874,12 +$E,48220,9 +$E,52303,14 +$E,53710,7 +$E,53892,14 +$E,53912,22 +$E,53931,11 +$E,54766,7 +$E,55221,8 +$E,56074,7 +$E,56586,19 +$E,56607,12 +$E,56626,11 +$E,56763,19 +$E,57621,13 +$E,57637,16 +$E,57644,6 +$E,57698,7 +$E,58386,11 +$E,58405,30 +$E,58424,8 +$E,59173,7 +$E,59213,11 +$E,59264,7 +$E,59284,8 +$E,59304,15 +$E,60021,12 +$E,60082,14 +$E,60494,7 +$E,61023,14 +$E,61043,8 +$E,61062,12 +$E,62010,35 +$E,62705,7 +$E,64828,7 +$E,66423,7 +$E,67220,7 +$E,68656,7 +$E,74123,24 +$E,75437,28 +$E,76122,7 +$E,76142,15 +$E,76161,14 +$E,77686,6 +$E,77935,15 +$STOP,185,35113776.48,28130,163,18192,27,5,21 +$START,186,30264 +$E,113,81 +$E,115,13 +$E,116,7 +$E,118,14 +$E,118,4 +$E,119,20 +$E,122,6 +$E,183,7 +$E,246,4 +$E,434,39 +$E,435,16 +$E,436,6 +$E,439,12 +$E,440,24 +$E,752,6 +$E,911,9 +$E,984,4 +$E,1029,24 +$E,1050,252 +$E,1052,12 +$E,1052,4 +$E,1064,25 +$E,1092,32 +$E,1112,31 +$E,1136,23 +$E,1207,12 +$E,1226,19 +$E,1276,7 +$E,1502,19 +$E,1684,65 +$E,1686,7 +$E,1687,12 +$E,1689,15 +$E,1690,4 +$E,1691,4 +$E,1746,29 +$E,1747,14 +$E,1753,4 +$E,1848,14 +$E,2300,172 +$E,2302,7 +$E,2473,15 +$E,3184,15 +$E,3246,51 +$E,3249,14 +$E,3250,9 +$E,3251,15 +$E,3252,7 +$E,3252,31 +$E,3254,6 +$E,3309,18 +$E,3313,4 +$E,3410,36 +$E,3496,31 +$E,3550,217 +$E,3552,26 +$E,3553,22 +$E,3553,14 +$E,3554,44 +$E,3556,12 +$E,3557,19 +$E,3558,15 +$E,3558,28 +$E,3560,6 +$E,3560,8 +$E,3613,39 +$E,3665,6 +$E,3723,54 +$E,4035,47 +$E,4298,6 +$E,4348,35 +$E,5910,35 +$E,6050,236 +$E,6052,9 +$E,8016,7 +$E,8197,7 +$E,8410,48 +$E,8449,15 +$E,8550,272 +$E,8552,8 +$E,8552,6 +$E,8723,103 +$E,8728,7 +$E,8730,9 +$E,8731,15 +$E,9035,88 +$E,9039,9 +$E,9041,15 +$E,9043,6 +$E,9044,14 +$E,9785,7 +$E,10169,12 +$E,10188,24 +$E,10208,28 +$E,10568,17 +$E,10910,65 +$E,10914,7 +$E,10996,56 +$E,10999,7 +$E,11050,216 +$E,11052,7 +$E,11059,113 +$E,11061,12 +$E,11063,31 +$E,11063,12 +$E,11063,36 +$E,11064,15 +$E,11065,15 +$E,11066,6 +$E,11121,44 +$E,11129,7 +$E,11223,71 +$E,11226,6 +$E,11229,9 +$E,11368,7 +$E,11535,71 +$E,11539,14 +$E,11541,7 +$E,11543,7 +$E,11621,38 +$E,11684,97 +$E,11685,12 +$E,11687,15 +$E,11687,17 +$E,11688,6 +$E,11690,4 +$E,11693,7 +$E,11746,103 +$E,11747,15 +$E,11750,24 +$E,11751,19 +$E,11752,12 +$E,11753,15 +$E,11753,4 +$E,11809,24 +$E,11848,41 +$E,11856,15 +$E,11933,38 +$E,11942,6 +$E,11988,92 +$E,11991,7 +$E,11992,39 +$E,11992,14 +$E,11994,33 +$E,11995,31 +$E,11997,10 +$E,12051,28 +$E,12160,44 +$E,12246,39 +$E,12300,203 +$E,12302,14 +$E,12303,12 +$E,12304,16 +$E,12306,7 +$E,12307,11 +$E,12310,14 +$E,12363,7 +$E,12473,24 +$E,12785,24 +$E,12968,8 +$E,13098,24 +$E,13410,15 +$E,13550,143 +$E,13768,10 +$E,14568,7 +$E,15910,12 +$E,17312,96 +$E,18082,15 +$E,18136,15 +$E,18410,6 +$E,18550,96 +$E,18568,8 +$E,20968,14 +$E,21050,110 +$E,21768,23 +$E,21911,12 +$E,21930,15 +$E,22554,540 +$E,22568,17 +$E,22611,15 +$E,22631,12 +$E,22650,24 +$E,22797,6 +$E,23377,11 +$E,23410,6 +$E,23550,171 +$E,23621,6 +$E,24289,4 +$E,24968,7 +$E,25910,7 +$E,26050,143 +$E,28410,12 +$E,28550,150 +$E,30214,12 +$E,30237,7 +$E,30256,24 +$E,30422,12 +$E,30568,12 +$E,30922,8 +$E,31050,153 +$E,31052,7 +$E,31199,17 +$E,33449,10 +$E,33550,135 +$E,34568,14 +$E,35488,4 +$E,35507,7 +$E,35647,15 +$E,35666,13 +$E,35686,24 +$E,35910,8 +$E,36050,176 +$E,38410,24 +$E,38441,8 +$E,38453,6 +$E,38496,6 +$E,38550,192 +$E,38558,111 +$E,38560,12 +$E,38561,16 +$E,38562,12 +$E,38562,33 +$E,38563,32 +$E,38564,19 +$E,38565,14 +$E,38566,14 +$E,38621,84 +$E,38624,14 +$E,38625,7 +$E,38625,4 +$E,38626,15 +$E,38627,7 +$E,38629,15 +$E,38629,7 +$E,38683,80 +$E,38687,4 +$E,38687,30 +$E,38689,9 +$E,38690,7 +$E,38691,14 +$E,38746,108 +$E,38746,15 +$E,38749,9 +$E,38750,6 +$E,38751,15 +$E,38752,15 +$E,39035,14 +$E,39120,12 +$E,39182,89 +$E,39184,15 +$E,39185,6 +$E,39186,60 +$E,39186,49 +$E,39187,40 +$E,39188,11 +$E,39189,15 +$E,39190,13 +$E,39367,12 +$E,39549,8 +$E,39799,179 +$E,39807,60 +$E,39812,15 +$E,39812,4 +$E,39813,4 +$E,39815,7 +$E,40509,14 +$E,40530,15 +$E,40770,8 +$E,40967,7 +$E,41287,12 +$E,41306,17 +$E,41328,6 +$E,42567,16 +$E,43380,8 +$E,43397,12 +$E,44201,12 +$E,44220,28 +$E,44239,30 +$E,44890,16 +$E,44909,17 +$E,45767,12 +$E,46049,171 +$E,46057,126 +$E,46058,6 +$E,46058,12 +$E,46060,8 +$E,46061,4 +$E,46062,29 +$E,46062,6 +$E,46064,6 +$E,46065,15 +$E,46371,12 +$E,46571,14 +$E,46995,84 +$E,46998,8 +$E,46999,25 +$E,46999,31 +$E,47003,9 +$E,47299,176 +$STOP,186,35113787.21,53779,457,17945,26,11,39 +$START,187,57405 +$E,872,353 +$E,874,16 +$E,1847,6 +$E,1866,6 +$E,2690,15 +$E,3271,42 +$E,3272,11 +$E,3274,6 +$E,3275,14 +$E,3372,404 +$E,3374,24 +$E,5771,262 +$E,5773,35 +$E,5774,38 +$E,5775,15 +$E,5775,12 +$E,5776,44 +$E,5777,8 +$E,5778,15 +$E,5778,15 +$E,5779,36 +$E,5780,20 +$E,5872,344 +$E,5874,12 +$E,5874,6 +$E,7834,11 +$E,8011,7 +$E,8031,15 +$E,8290,23 +$E,8372,376 +$E,8374,15 +$E,9090,7 +$E,9308,6 +$E,10295,8 +$E,10335,11 +$E,10374,24 +$E,10771,49 +$E,10777,13 +$E,10779,7 +$E,10872,417 +$E,10874,17 +$E,10874,17 +$E,11282,6 +$E,12683,14 +$E,13372,248 +$E,13374,12 +$E,13399,11 +$E,13439,8 +$E,13681,25 +$E,13701,24 +$E,13721,14 +$E,13814,15 +$E,13834,24 +$E,13854,20 +$E,13890,7 +$E,13974,17 +$E,13994,16 +$E,14690,4 +$E,15062,10 +$E,15082,16 +$E,15872,211 +$E,15874,9 +$E,16290,6 +$E,16343,6 +$E,16552,7 +$E,16572,22 +$E,17090,19 +$E,17904,44 +$E,18372,264 +$E,18396,120 +$E,18397,7 +$E,18399,14 +$E,18400,17 +$E,18400,24 +$E,18402,26 +$E,18404,15 +$E,18459,127 +$E,18459,30 +$E,18462,12 +$E,18463,15 +$E,18464,13 +$E,18466,12 +$E,18467,17 +$E,20424,4 +$E,20872,192 +$E,20874,11 +$E,21891,6 +$E,23372,204 +$E,23374,9 +$E,23490,8 +$E,23871,7 +$E,23903,12 +$E,23923,15 +$E,24290,11 +$E,24487,7 +$E,25771,16 +$E,25872,177 +$E,26690,15 +$E,28290,16 +$E,29090,15 +$E,31490,20 +$E,31880,10 +$E,32070,17 +$E,32104,24 +$E,32127,12 +$E,33866,7 +$E,33885,11 +$E,33904,23 +$E,34690,15 +$E,35591,8 +$E,35665,4 +$E,35772,15 +$E,35791,15 +$E,35811,6 +$E,37090,15 +$E,38368,7 +$E,38390,20 +$E,38409,12 +$E,39239,8 +$E,39260,15 +$E,39279,19 +$E,39299,18 +$E,39319,20 +$E,39339,15 +$E,40190,23 +$E,40495,23 +$E,40515,6 +$E,40872,238 +$E,40880,56 +$E,40881,28 +$E,41106,192 +$E,41108,12 +$E,41112,28 +$E,41115,34 +$E,41115,17 +$E,41125,7 +$E,41164,14 +$E,41773,12 +$E,41792,19 +$E,41812,25 +$E,41892,24 +$E,42280,15 +$E,42300,14 +$E,42319,25 +$E,42367,8 +$E,42386,15 +$E,42405,27 +$E,42510,18 +$E,42530,7 +$E,42689,15 +$E,42759,15 +$E,42778,15 +$E,42878,19 +$E,43059,9 +$E,43506,8 +$E,43609,6 +$E,43628,6 +$E,44488,19 +$E,45080,6 +$E,45237,15 +$E,46304,12 +$E,46784,7 +$E,46815,8 +$E,46835,20 +$E,46855,14 +$E,47698,17 +$E,47718,14 +$E,47737,12 +$E,48310,4 +$E,49096,19 +$E,49112,14 +$E,50688,28 +$E,51496,11 +$E,51799,7 +$E,52292,7 +$E,53088,15 +$E,53889,19 +$E,54244,8 +$E,54688,20 +$E,54716,15 +$E,55489,9 +$E,56288,7 +$E,56424,12 +$E,56444,15 +$E,56862,22 +$E,56901,24 +$E,57088,16 +$E,57888,24 +$E,58688,23 +$E,62689,17 +$E,63985,6 +$E,64027,12 +$E,64208,15 +$E,64228,15 +$E,64294,12 +$E,64342,14 +$E,64361,23 +$E,64381,22 +$E,64629,15 +$E,64648,17 +$E,64937,8 +$E,64957,18 +$E,64977,19 +$E,65088,4 +$E,65307,7 +$E,66688,12 +$E,68220,8 +$E,68239,7 +$E,68260,8 +$E,68288,12 +$E,68893,14 +$E,71488,12 +$E,72340,12 +$E,72361,15 +$E,72380,19 +$E,72817,23 +$E,72837,30 +$E,73245,7 +$E,73954,16 +$E,73973,16 +$E,73993,30 +$E,76095,5 +$E,77570,12 +$E,77612,24 +$E,77893,7 +$STOP,187,35113799.7,10974,225,17386,17,3,29 +$START,188,13778 +$E,59,15 +$E,282,15 +$E,366,7 +$E,498,6 +$E,693,12 +$E,713,24 +$E,795,17 +$E,814,14 +$E,860,9 +$E,898,7 +$E,1076,19 +$E,2400,13 +$E,3374,15 +$E,3815,7 +$E,3835,15 +$E,4004,12 +$E,6290,7 +$E,6309,7 +$E,8327,7 +$E,9648,6 +$E,9699,6 +$E,9799,4 +$E,9819,14 +$E,9851,15 +$E,10088,11 +$E,11244,15 +$E,12844,14 +$E,13348,8 +$E,13374,12 +$E,14393,14 +$E,14805,4 +$E,14824,15 +$E,14846,14 +$E,15358,15 +$E,15806,15 +$E,15826,6 +$E,15980,12 +$E,16001,15 +$E,16056,8 +$E,16308,12 +$E,16427,7 +$E,16446,24 +$E,16517,12 +$E,16699,12 +$E,16844,12 +$E,17644,15 +$E,18147,22 +$E,18167,23 +$E,18187,19 +$E,18445,14 +$E,19244,16 +$E,22327,24 +$E,22346,19 +$E,22444,15 +$E,22469,12 +$E,22918,7 +$E,23154,11 +$E,23173,24 +$E,23196,9 +$E,23244,9 +$E,23361,15 +$E,23381,6 +$E,23458,24 +$E,23478,16 +$E,23497,14 +$E,24033,16 +$E,24053,24 +$E,24068,24 +$E,24088,24 +$E,24417,12 +$E,24769,6 +$E,24789,17 +$E,26089,12 +$E,26109,11 +$E,26128,15 +$E,29069,15 +$E,29349,12 +$E,29371,10 +$E,29391,7 +$E,29645,14 +$E,29753,17 +$E,29792,6 +$E,30141,8 +$E,30197,14 +$E,30217,15 +$E,30277,12 +$E,30355,8 +$E,30471,6 +$E,30490,12 +$E,30510,24 +$E,31317,19 +$E,31940,6 +$E,31959,15 +$E,32073,8 +$E,32093,8 +$E,32112,15 +$E,33645,6 +$E,34090,11 +$E,34485,8 +$E,34524,19 +$E,34604,22 +$E,34623,21 +$E,34643,14 +$E,35244,24 +$E,36044,9 +$E,37646,19 +$E,39083,14 +$E,39244,8 +$E,40066,12 +$E,40136,15 +$E,40499,12 +$E,40519,19 +$E,40538,36 +$E,40932,15 +$E,41136,28 +$E,41156,12 +$E,41644,6 +$E,43251,5 +$E,44043,14 +$E,47242,7 +$E,48051,8 +$E,49107,11 +$E,49642,15 +$E,50871,12 +$E,50910,24 +$E,52252,9 +$E,52292,15 +$E,52699,6 +$E,52842,12 +$E,53002,12 +$E,53022,25 +$E,53042,28 +$E,56842,17 +$E,58354,7 +$E,58374,8 +$E,58393,19 +$E,58496,7 +$E,58536,7 +$E,58666,8 +$E,58685,19 +$E,59094,6 +$E,59113,19 +$E,59416,6 +$E,59914,11 +$E,59934,11 +$E,59954,22 +$E,60216,4 +$E,60236,12 +$E,60265,6 +$E,60285,6 +$E,60498,8 +$E,60538,7 +$E,60781,15 +$E,60800,8 +$E,60820,12 +$E,61896,5 +$E,61916,12 +$E,62421,12 +$E,62477,23 +$E,63518,7 +$E,63557,24 +$E,63721,15 +$E,63759,14 +$E,63779,12 +$E,64066,8 +$E,64092,14 +$E,64113,11 +$E,65642,7 +$E,66018,146 +$E,68779,8 +$E,68799,24 +$E,68818,28 +$E,68842,25 +$E,69642,19 +$E,70897,8 +$E,70917,28 +$E,70936,30 +$E,71247,16 +$E,72842,19 +$E,73642,15 +$E,74031,19 +$E,75547,89 +$E,76101,9 +$E,76842,14 +$E,77556,10 +$STOP,188,35113810.27,30835,185,17425,21,2,21 +$START,189,33141 +$E,1339,9 +$E,1358,7 +$E,1378,16 +$E,1398,16 +$E,3192,4 +$E,5435,14 +$E,5454,14 +$E,5599,22 +$E,5619,17 +$E,5638,25 +$E,6097,5 +$E,6116,8 +$E,7681,7 +$E,7700,19 +$E,7740,8 +$E,7760,17 +$E,7779,22 +$E,8430,10 +$E,8461,14 +$E,8481,21 +$E,8744,22 +$E,9278,6 +$E,9297,25 +$E,9317,23 +$E,9569,15 +$E,10132,6 +$E,10885,6 +$E,11817,7 +$E,12020,6 +$E,15165,7 +$E,16025,16 +$E,16044,19 +$E,16182,22 +$E,16203,12 +$E,16325,24 +$E,16361,4 +$E,16380,28 +$E,16675,12 +$E,16744,12 +$E,19062,7 +$E,19369,10 +$E,19389,9 +$E,19408,10 +$E,19755,7 +$E,20792,8 +$E,20812,12 +$E,20831,20 +$E,21551,13 +$E,22161,11 +$E,22181,28 +$E,22201,30 +$E,22260,15 +$E,22471,14 +$E,22776,4 +$E,22888,7 +$E,22916,7 +$E,23101,6 +$E,23121,24 +$E,23144,7 +$E,23179,7 +$E,23914,28 +$E,23934,22 +$E,23953,23 +$E,23969,24 +$E,24797,22 +$E,24817,6 +$E,25550,12 +$E,25987,17 +$E,26006,18 +$E,26344,7 +$E,30237,10 +$E,30257,15 +$E,31844,14 +$E,31883,15 +$E,31952,12 +$E,32005,6 +$E,32744,12 +$E,33016,7 +$E,35249,15 +$E,35268,17 +$E,35288,24 +$E,35948,14 +$E,36311,15 +$E,36331,14 +$E,36653,19 +$E,36744,4 +$E,37379,7 +$E,37551,7 +$E,37636,12 +$E,37939,7 +$E,37959,7 +$E,38222,7 +$E,38242,19 +$E,38526,15 +$E,38767,6 +$E,38789,24 +$E,39142,12 +$E,39597,22 +$E,39838,9 +$E,40742,9 +$E,41542,15 +$E,43145,6 +$E,47145,9 +$E,47239,8 +$E,47942,19 +$E,49313,7 +$E,49542,7 +$E,50443,6 +$E,50686,24 +$E,51043,359 +$E,51474,6 +$E,51493,10 +$E,51596,12 +$E,51616,23 +$E,51635,30 +$E,51969,15 +$E,52111,12 +$E,53144,10 +$E,53542,20 +$E,53941,17 +$E,53961,28 +$E,55142,22 +$E,55944,13 +$E,56742,8 +$E,57909,7 +$E,57928,7 +$E,58342,19 +$E,59344,15 +$E,59541,15 +$E,60742,14 +$E,61833,9 +$E,62952,22 +$E,62972,26 +$E,63709,16 +$E,63988,4 +$E,64190,24 +$E,64742,16 +$E,65993,7 +$E,66013,12 +$E,66786,12 +$E,66806,12 +$E,66825,7 +$E,69341,24 +$E,69360,19 +$E,70947,8 +$E,70967,14 +$E,71145,12 +$E,71383,15 +$E,71403,16 +$E,75422,7 +$E,75442,24 +$E,76255,6 +$E,76325,15 +$E,77547,8 +$STOP,189,35113821.13,48988,154,17310,12,2,33 +$START,190,50912 +$E,10,7 +$E,405,9 +$E,425,12 +$E,444,19 +$E,636,12 +$E,886,19 +$E,926,14 +$E,2238,8 +$E,2765,17 +$E,2784,15 +$E,2806,12 +$E,3041,7 +$E,3493,24 +$E,3528,7 +$E,4636,11 +$E,4834,12 +$E,5047,9 +$E,5067,8 +$E,5436,12 +$E,6032,12 +$E,6055,12 +$E,6074,7 +$E,6306,7 +$E,6325,9 +$E,6345,14 +$E,6465,8 +$E,6486,28 +$E,6506,27 +$E,7630,9 +$E,7652,12 +$E,8294,19 +$E,8636,15 +$E,12055,12 +$E,13755,7 +$E,14236,7 +$E,14348,14 +$E,14368,38 +$E,14387,27 +$E,14522,28 +$E,14686,11 +$E,15037,13 +$E,15726,15 +$E,16207,14 +$E,17443,4 +$E,18608,14 +$E,19051,12 +$E,19611,19 +$E,19836,17 +$E,20213,15 +$E,21960,6 +$E,24636,10 +$E,25436,5 +$E,25735,7 +$E,25844,14 +$E,27088,17 +$E,27216,8 +$E,27657,23 +$E,27836,7 +$E,27871,15 +$E,27942,24 +$E,28117,7 +$E,28136,35 +$E,28156,23 +$E,28526,8 +$E,28541,35 +$E,28544,31 +$E,28642,15 +$E,28875,30 +$E,29436,16 +$E,29504,19 +$E,29523,19 +$E,29744,12 +$E,29800,23 +$E,30236,15 +$E,32384,7 +$E,32404,15 +$E,32999,17 +$E,33018,19 +$E,33753,6 +$E,34239,8 +$E,38235,7 +$E,39035,5 +$E,40621,6 +$E,41719,7 +$E,41739,12 +$E,41858,15 +$E,45149,4 +$E,45169,15 +$E,45188,12 +$E,45449,11 +$E,45860,7 +$E,50234,12 +$E,51938,19 +$E,52634,16 +$E,53434,7 +$E,53525,13 +$E,58235,7 +$E,58989,11 +$E,59026,14 +$E,59089,14 +$E,59109,19 +$E,59837,6 +$E,60566,14 +$E,60586,14 +$E,61022,12 +$E,61041,31 +$E,61061,14 +$E,61166,16 +$E,61186,21 +$E,61816,9 +$E,61836,25 +$E,62234,16 +$E,62316,20 +$E,62336,22 +$E,62356,19 +$E,63035,7 +$E,67034,7 +$E,69555,7 +$E,69575,7 +$E,69977,24 +$E,70041,16 +$E,70112,15 +$E,70131,19 +$E,70242,23 +$E,70360,11 +$E,70774,17 +$E,70929,30 +$E,70964,22 +$E,71034,6 +$E,71106,7 +$E,73930,7 +$E,73950,16 +$E,74169,12 +$E,74190,19 +$E,74210,31 +$E,74247,15 +$E,75034,7 +$E,76573,12 +$E,77357,14 +$E,77779,14 +$STOP,190,35113831.79,685,140,17481,20,1,15 +$START,191,2572 +$E,237,10 +$E,1149,7 +$E,2706,7 +$E,3161,30 +$E,3731,15 +$E,3755,15 +$E,3775,24 +$E,4503,15 +$E,4522,30 +$E,4542,28 +$E,5103,11 +$E,7123,11 +$E,7142,25 +$E,7162,31 +$E,8303,19 +$E,9103,12 +$E,9903,15 +$E,10703,14 +$E,11503,19 +$E,11877,9 +$E,12056,20 +$E,12303,10 +$E,12767,6 +$E,12796,7 +$E,12867,13 +$E,13103,14 +$E,13228,15 +$E,13250,17 +$E,13270,32 +$E,15503,15 +$E,16121,6 +$E,16317,6 +$E,18407,6 +$E,19505,7 +$E,22482,7 +$E,22502,14 +$E,22797,16 +$E,25961,17 +$E,25972,7 +$E,26281,7 +$E,26703,15 +$E,27152,7 +$E,27172,14 +$E,27192,17 +$E,27243,16 +$E,27466,23 +$E,27486,29 +$E,27521,20 +$E,27730,54 +$E,27937,22 +$E,27967,11 +$E,28572,19 +$E,28629,9 +$E,28789,24 +$E,29117,18 +$E,29468,7 +$E,29488,19 +$E,29612,12 +$E,30703,24 +$E,31434,7 +$E,31453,19 +$E,31473,24 +$E,31509,21 +$E,31788,6 +$E,31808,15 +$E,31828,7 +$E,32896,8 +$E,33103,27 +$E,35304,15 +$E,35323,29 +$E,35343,24 +$E,35622,6 +$E,35642,14 +$E,35661,24 +$E,35784,12 +$E,35804,30 +$E,35823,15 +$E,36283,15 +$E,36302,15 +$E,39240,7 +$E,39501,11 +$E,39918,7 +$E,40720,19 +$E,40739,25 +$E,40797,16 +$E,40820,17 +$E,40841,24 +$E,41188,8 +$E,41208,20 +$E,41227,31 +$E,44301,6 +$E,45342,4 +$E,45374,12 +$E,45394,31 +$E,45670,7 +$E,45691,24 +$E,45901,15 +$E,47189,16 +$E,47208,19 +$E,48948,6 +$E,48967,16 +$E,49902,9 +$E,50705,25 +$E,52019,19 +$E,52309,15 +$E,53101,7 +$E,54302,4 +$E,55696,7 +$E,55767,9 +$E,56727,20 +$E,56747,22 +$E,56777,6 +$E,56796,7 +$E,56817,19 +$E,56957,17 +$E,56976,23 +$E,56995,21 +$E,57101,14 +$E,57224,15 +$E,57388,12 +$E,58215,9 +$E,58326,13 +$E,58775,17 +$E,59482,6 +$E,59503,7 +$E,60471,14 +$E,60492,9 +$E,60512,12 +$E,60532,8 +$E,61580,30 +$E,61905,6 +$E,63306,99 +$E,63311,10 +$E,63314,11 +$E,63501,19 +$E,63548,44 +$E,63552,8 +$E,63751,192 +$E,63752,7 +$E,63861,48 +$E,63864,39 +$E,63866,8 +$E,63867,14 +$E,63919,15 +$E,63938,17 +$E,64173,71 +$E,64173,71 +$E,64174,26 +$E,64176,31 +$E,64178,12 +$E,64178,19 +$E,64179,7 +$E,64179,39 +$E,64182,12 +$E,64235,35 +$E,64236,7 +$E,64236,7 +$E,64238,8 +$E,64242,8 +$E,64486,44 +$E,64486,8 +$E,64487,12 +$E,64490,12 +$E,64490,7 +$E,64491,17 +$E,64492,35 +$E,64685,12 +$E,64704,15 +$E,65001,231 +$E,65002,6 +$E,65101,17 +$E,65110,32 +$E,65114,7 +$E,65769,25 +$E,65790,8 +$E,65810,17 +$E,65901,12 +$E,65942,15 +$E,66068,17 +$E,66106,8 +$E,66126,30 +$E,66251,129 +$E,66360,51 +$E,66364,33 +$E,66986,23 +$E,66987,6 +$E,66988,9 +$E,66992,24 +$E,67048,51 +$E,67073,15 +$E,67298,34 +$E,67298,15 +$E,67301,9 +$E,67303,12 +$E,67307,7 +$E,67501,120 +$E,67917,15 +$E,67937,12 +$E,68511,16 +$E,68531,15 +$E,68751,76 +$E,69344,12 +$E,69364,19 +$E,69383,15 +$E,70701,15 +$E,71250,92 +$E,71505,14 +$E,72322,6 +$E,73750,62 +$E,74094,15 +$E,75110,4 +$E,75431,7 +$E,75735,37 +$E,75737,6 +$E,75742,12 +$E,75743,12 +$E,76250,140 +$E,76252,7 +$E,76301,9 +$E,77101,4 +$STOP,191,35113842.38,21456,220,17610,32,6,26 +$START,192,24035 +$E,1303,7 +$E,1752,112 +$E,1784,8 +$E,3579,12 +$E,3602,16 +$E,3622,12 +$E,3690,12 +$E,4109,8 +$E,4152,9 +$E,4252,136 +$E,4600,9 +$E,5305,7 +$E,5736,4 +$E,5756,25 +$E,5784,19 +$E,6011,9 +$E,6104,28 +$E,6222,7 +$E,6241,22 +$E,6261,31 +$E,6407,7 +$E,6752,115 +$E,7683,15 +$E,8604,4 +$E,8624,16 +$E,8643,14 +$E,9252,111 +$E,9284,8 +$E,9303,14 +$E,9590,11 +$E,9610,14 +$E,11097,11 +$E,11116,15 +$E,11218,17 +$E,11257,28 +$E,11362,15 +$E,11382,23 +$E,11752,156 +$E,12503,17 +$E,13776,12 +$E,13880,12 +$E,14141,9 +$E,14252,212 +$E,14465,7 +$E,14486,4 +$E,15600,12 +$E,15619,22 +$E,15703,7 +$E,16033,14 +$E,16053,15 +$E,16072,23 +$E,16503,14 +$E,16591,6 +$E,16707,11 +$E,16752,139 +$E,16784,16 +$E,16788,14 +$E,17913,16 +$E,17933,17 +$E,18091,6 +$E,18110,14 +$E,18129,9 +$E,18903,12 +$E,19252,172 +$E,21519,7 +$E,21752,167 +$E,22103,4 +$E,22910,7 +$E,23703,7 +$E,24226,15 +$E,24252,108 +$E,24284,11 +$E,24507,23 +$E,24638,19 +$E,24658,24 +$E,24774,24 +$E,25254,8 +$E,25273,16 +$E,25293,22 +$E,25312,22 +$E,26089,9 +$E,26108,8 +$E,26124,19 +$E,26752,181 +$E,26903,9 +$E,28502,9 +$E,29252,123 +$E,29303,9 +$E,29368,6 +$E,29388,14 +$E,29408,21 +$E,29610,7 +$E,30006,7 +$E,30194,4 +$E,30214,26 +$E,31182,14 +$E,31206,12 +$E,31225,17 +$E,31752,127 +$E,32502,12 +$E,33302,17 +$E,33339,5 +$E,34252,113 +$E,34871,17 +$E,35600,6 +$E,36133,22 +$E,36428,4 +$E,36453,15 +$E,36473,28 +$E,36752,60 +$E,37075,23 +$E,37095,10 +$E,37302,15 +$E,38340,7 +$E,38364,13 +$E,38385,15 +$E,38906,15 +$E,39251,70 +$E,39701,15 +$E,40126,19 +$E,40302,22 +$E,41751,39 +$E,44251,44 +$E,45336,7 +$E,46105,7 +$E,46587,12 +$E,46710,19 +$E,46751,81 +$E,46838,14 +$E,46858,14 +$E,46877,19 +$E,46901,12 +$E,47701,22 +$E,49251,120 +$E,49309,6 +$E,49345,24 +$E,49364,18 +$E,49494,12 +$E,49513,24 +$E,49533,17 +$E,51751,120 +$E,52769,12 +$E,53571,7 +$E,54251,143 +$E,54885,7 +$E,54920,8 +$E,54940,15 +$E,55701,8 +$E,56559,9 +$E,56656,12 +$E,56846,6 +$E,56865,12 +$E,56892,112 +$E,56901,15 +$E,56901,6 +$E,56949,5 +$E,56971,6 +$E,56991,20 +$E,57126,71 +$E,57132,11 +$E,57135,12 +$E,57177,13 +$E,57404,24 +$E,57624,7 +$E,57749,8 +$E,57768,14 +$E,57941,12 +$E,57983,13 +$E,58003,14 +$E,58180,11 +$E,58233,15 +$E,59554,23 +$E,59593,6 +$E,59613,19 +$E,60501,6 +$E,62005,11 +$E,62025,14 +$E,62045,15 +$E,62105,16 +$E,62336,20 +$E,62356,16 +$E,62376,12 +$E,62536,12 +$E,62901,14 +$E,63281,14 +$E,63431,12 +$E,63763,6 +$E,63962,31 +$E,63982,20 +$E,64168,12 +$E,64187,19 +$E,64207,31 +$E,64375,12 +$E,64501,7 +$E,64536,15 +$E,64725,7 +$E,64745,10 +$E,64875,14 +$E,65047,12 +$E,65341,19 +$E,65344,19 +$E,65691,19 +$E,66901,14 +$E,67331,14 +$E,68163,24 +$E,68182,16 +$E,68562,14 +$E,68581,15 +$E,69301,12 +$E,69686,15 +$E,72501,9 +$E,75077,7 +$E,75097,16 +$E,75116,23 +$E,75872,7 +$E,77073,8 +$E,77153,7 +$E,77301,14 +$STOP,192,35113853.52,42906,218,17016,15,2,20 +$START,193,45850 +$E,1151,7 +$E,3834,19 +$E,4121,22 +$E,4453,12 +$E,4473,14 +$E,5123,14 +$E,5200,12 +$E,5578,22 +$E,5598,22 +$E,5897,11 +$E,6300,7 +$E,6339,20 +$E,6751,19 +$E,7525,6 +$E,7564,17 +$E,7580,15 +$E,8267,15 +$E,8307,31 +$E,8373,22 +$E,9966,19 +$E,10018,19 +$E,10037,12 +$E,10062,19 +$E,10131,8 +$E,10170,16 +$E,11603,7 +$E,11729,16 +$E,12570,12 +$E,12590,12 +$E,13157,12 +$E,13729,8 +$E,13860,12 +$E,13968,4 +$E,14752,16 +$E,15000,14 +$E,15019,12 +$E,15470,9 +$E,15490,25 +$E,15509,16 +$E,15551,15 +$E,15963,24 +$E,15982,24 +$E,18364,19 +$E,18521,15 +$E,18697,12 +$E,18727,22 +$E,18750,19 +$E,18821,7 +$E,19276,14 +$E,19295,27 +$E,19551,19 +$E,21167,7 +$E,21628,24 +$E,24352,6 +$E,26023,15 +$E,26042,23 +$E,26248,14 +$E,26267,32 +$E,26298,22 +$E,26702,15 +$E,26722,30 +$E,26743,16 +$E,26967,19 +$E,26986,16 +$E,27093,15 +$E,27113,24 +$E,27550,12 +$E,27755,11 +$E,27774,15 +$E,29151,6 +$E,31550,15 +$E,32355,13 +$E,32897,24 +$E,32921,12 +$E,32942,19 +$E,33150,15 +$E,34944,17 +$E,34964,24 +$E,35453,9 +$E,35492,19 +$E,35566,6 +$E,36350,6 +$E,37439,6 +$E,37459,23 +$E,37478,24 +$E,37569,13 +$E,37588,15 +$E,38103,6 +$E,38294,7 +$E,38359,14 +$E,38868,8 +$E,38927,15 +$E,39549,8 +$E,40349,19 +$E,42587,14 +$E,42606,12 +$E,42917,14 +$E,42937,15 +$E,42957,8 +$E,43097,24 +$E,43476,16 +$E,43549,12 +$E,44211,19 +$E,44232,14 +$E,44251,27 +$E,44508,15 +$E,46278,19 +$E,46749,11 +$E,47274,9 +$E,47549,7 +$E,47602,14 +$E,48540,12 +$E,48559,15 +$E,48697,14 +$E,48716,22 +$E,49149,12 +$E,51558,6 +$E,51579,15 +$E,55307,7 +$E,55365,7 +$E,56005,7 +$E,56492,12 +$E,56512,12 +$E,56840,11 +$E,57358,12 +$E,57377,7 +$E,58086,12 +$E,58749,6 +$E,59203,12 +$E,59222,17 +$E,59395,6 +$E,59971,9 +$E,60245,14 +$E,60264,28 +$E,60352,7 +$E,63813,15 +$E,64805,6 +$E,65018,25 +$E,65362,7 +$E,65382,19 +$E,65679,6 +$E,65715,6 +$E,65949,17 +$E,66749,6 +$E,66879,9 +$E,66899,8 +$E,66918,22 +$E,67256,24 +$E,67276,14 +$E,67310,15 +$E,69949,15 +$E,70525,7 +$E,70546,7 +$E,70568,12 +$E,71794,10 +$E,71813,7 +$E,71833,12 +$E,71908,15 +$E,72099,15 +$E,72365,19 +$E,72390,19 +$E,72628,6 +$E,72728,17 +$E,73027,15 +$E,73048,12 +$E,73949,6 +$E,74050,24 +$E,74349,15 +$E,74368,18 +$E,75554,11 +$E,76255,8 +$E,77149,11 +$STOP,193,35113864.70,62408,172,16874,20,5,20 +$START,194,64513 +$E,1539,15 +$E,1561,17 +$E,1581,33 +$E,1751,12 +$E,1808,7 +$E,2551,15 +$E,4151,4 +$E,6556,7 +$E,8151,14 +$E,8264,14 +$E,8289,15 +$E,10121,5 +$E,10203,6 +$E,10281,9 +$E,10452,7 +$E,10472,16 +$E,10643,14 +$E,10662,7 +$E,10682,14 +$E,10800,6 +$E,10839,15 +$E,10957,4 +$E,10999,8 +$E,11078,7 +$E,11373,15 +$E,11389,15 +$E,12288,14 +$E,12309,14 +$E,12837,6 +$E,12858,16 +$E,12951,14 +$E,15350,14 +$E,15652,4 +$E,15672,8 +$E,16072,7 +$E,16091,19 +$E,16126,19 +$E,16151,24 +$E,17120,12 +$E,17140,11 +$E,17161,23 +$E,17751,33 +$E,20150,14 +$E,20619,35 +$E,20639,19 +$E,20950,19 +$E,21509,8 +$E,21528,24 +$E,21548,44 +$E,22047,12 +$E,22067,30 +$E,22086,44 +$E,22550,19 +$E,23135,18 +$E,23155,24 +$E,23174,25 +$E,25750,12 +$E,26562,6 +$E,27350,7 +$E,27405,19 +$E,27903,14 +$E,27923,12 +$E,29821,24 +$E,30673,14 +$E,30712,12 +$E,31585,12 +$E,31605,12 +$E,32150,6 +$E,32979,14 +$E,33267,15 +$E,33288,12 +$E,33308,14 +$E,33750,12 +$E,34586,17 +$E,34605,24 +$E,34685,12 +$E,35110,14 +$E,35134,15 +$E,35176,19 +$E,35351,12 +$E,35699,7 +$E,35953,18 +$E,35973,19 +$E,36960,4 +$E,37443,14 +$E,37463,15 +$E,37483,7 +$E,39292,7 +$E,40227,7 +$E,40246,14 +$E,40361,7 +$E,40380,12 +$E,40415,6 +$E,40873,19 +$E,40894,14 +$E,40914,20 +$E,40934,19 +$E,40954,15 +$E,41158,9 +$E,41253,19 +$E,41274,15 +$E,41293,24 +$E,41415,15 +$E,41750,9 +$E,44351,7 +$E,44566,14 +$E,44949,23 +$E,45529,7 +$E,45548,23 +$E,45749,24 +$E,45765,23 +$E,45823,15 +$E,45842,12 +$E,45867,14 +$E,46554,12 +$E,47349,5 +$E,48417,11 +$E,48438,15 +$E,48460,8 +$E,52149,9 +$E,53138,15 +$E,53536,15 +$E,53556,12 +$E,53575,17 +$E,55349,20 +$E,57110,190 +$E,58933,280 +$E,61755,7 +$E,62555,17 +$E,63355,7 +$E,63893,11 +$E,63913,4 +$E,63932,14 +$E,64149,7 +$E,65749,16 +$E,66455,11 +$E,66475,27 +$E,66599,7 +$E,67832,111 +$E,68341,7 +$E,68361,15 +$E,68478,15 +$E,68983,6 +$E,70549,9 +$E,71277,6 +$E,71453,6 +$E,72099,7 +$E,73430,6 +$E,73749,12 +$E,74555,12 +$E,75349,7 +$E,76155,7 +$E,76350,24 +$E,76370,7 +$E,76645,18 +$E,76665,27 +$E,77937,7 +$E,77977,6 +$STOP,194,35113875.48,15081,158,16855,18,1,26 +$START,195,17821 +$E,1370,15 +$E,2176,16 +$E,2726,16 +$E,2746,24 +$E,2976,11 +$E,4580,23 +$E,4597,15 +$E,4921,8 +$E,4940,22 +$E,5370,20 +$E,7296,7 +$E,7317,15 +$E,9370,6 +$E,10970,4 +$E,12570,7 +$E,12737,6 +$E,14104,6 +$E,14124,7 +$E,14169,15 +$E,15777,6 +$E,17033,7 +$E,19971,7 +$E,20139,12 +$E,20854,15 +$E,20873,9 +$E,20893,20 +$E,21555,7 +$E,22174,7 +$E,24738,5 +$E,24911,11 +$E,24959,7 +$E,25095,6 +$E,25215,7 +$E,25560,16 +$E,25601,23 +$E,25733,12 +$E,25753,28 +$E,25787,7 +$E,26175,10 +$E,26441,27 +$E,27769,15 +$E,30492,8 +$E,30513,11 +$E,30635,12 +$E,30857,11 +$E,30876,14 +$E,31981,11 +$E,32000,14 +$E,32585,7 +$E,34453,38 +$E,38969,12 +$E,41370,8 +$E,41834,12 +$E,42168,7 +$E,43316,4 +$E,44166,22 +$E,44187,21 +$E,44568,23 +$E,44755,24 +$E,44774,32 +$E,45041,18 +$E,45061,17 +$E,45081,15 +$E,45285,7 +$E,46168,10 +$E,46968,16 +$E,47273,9 +$E,49579,8 +$E,49748,8 +$E,49768,7 +$E,49788,12 +$E,50118,7 +$E,51203,6 +$E,51376,14 +$E,51417,17 +$E,51559,16 +$E,51703,11 +$E,52584,7 +$E,53374,7 +$E,54886,4 +$E,54905,24 +$E,54925,24 +$E,54971,16 +$E,56111,14 +$E,56568,14 +$E,57208,28 +$E,57227,23 +$E,57368,6 +$E,57408,4 +$E,62651,15 +$E,62841,9 +$E,63386,7 +$E,63409,9 +$E,63429,12 +$E,64017,14 +$E,64037,16 +$E,64056,24 +$E,65401,14 +$E,66968,6 +$E,69769,22 +$E,69790,4 +$E,69891,15 +$E,70773,15 +$E,70794,12 +$E,70910,14 +$E,70930,15 +$E,70990,7 +$E,71678,14 +$E,71697,20 +$E,71717,32 +$E,71768,12 +$E,71872,21 +$E,71903,7 +$E,71932,22 +$E,73374,15 +$E,73678,16 +$E,73698,23 +$E,74174,15 +$E,74245,19 +$E,74266,17 +$E,74287,24 +$E,75768,8 +$STOP,195,35113886.28,32610,122,17454,17,5,24 +$START,196,34217 +$E,351,7 +$E,370,14 +$E,815,14 +$E,855,15 +$E,1043,12 +$E,1192,12 +$E,1213,14 +$E,1298,12 +$E,1371,15 +$E,1391,6 +$E,2022,15 +$E,2042,16 +$E,2062,10 +$E,2309,15 +$E,2348,23 +$E,3907,19 +$E,4049,6 +$E,4073,8 +$E,4799,7 +$E,4819,6 +$E,5037,4 +$E,7437,14 +$E,8320,7 +$E,9038,12 +$E,10069,15 +$E,10089,15 +$E,12246,15 +$E,13041,24 +$E,13770,7 +$E,13836,14 +$E,14958,14 +$E,14978,18 +$E,15119,15 +$E,15304,7 +$E,15323,9 +$E,15552,7 +$E,18652,7 +$E,20580,7 +$E,20599,15 +$E,20619,24 +$E,20737,12 +$E,20757,25 +$E,20785,28 +$E,21036,15 +$E,21373,24 +$E,21394,24 +$E,21414,9 +$E,22055,9 +$E,22075,22 +$E,22095,14 +$E,23140,20 +$E,24400,15 +$E,24420,15 +$E,24678,7 +$E,24736,15 +$E,25473,6 +$E,25522,23 +$E,25561,8 +$E,26637,9 +$E,26659,12 +$E,26679,14 +$E,27625,7 +$E,27644,28 +$E,28227,12 +$E,28268,15 +$E,29036,14 +$E,30643,15 +$E,31374,10 +$E,31436,12 +$E,31799,15 +$E,31818,19 +$E,31839,24 +$E,31956,6 +$E,31978,12 +$E,31997,22 +$E,32118,8 +$E,32137,24 +$E,32237,7 +$E,32719,14 +$E,32738,30 +$E,32758,4 +$E,32791,15 +$E,32810,9 +$E,32829,22 +$E,33043,6 +$E,34573,9 +$E,34645,12 +$E,34712,15 +$E,35258,8 +$E,35278,15 +$E,35297,27 +$E,35479,7 +$E,36243,17 +$E,37036,15 +$E,37836,15 +$E,38102,15 +$E,38268,7 +$E,38288,20 +$E,38307,13 +$E,38643,11 +$E,39283,14 +$E,39520,4 +$E,39881,6 +$E,40170,6 +$E,40190,22 +$E,40235,7 +$E,41035,12 +$E,41258,17 +$E,41277,15 +$E,41297,25 +$E,41541,24 +$E,41560,23 +$E,43262,7 +$E,43281,15 +$E,43711,15 +$E,43731,24 +$E,44217,7 +$E,44237,22 +$E,44270,8 +$E,44933,4 +$E,45222,6 +$E,45510,7 +$E,45530,7 +$E,45550,12 +$E,45998,15 +$E,46018,15 +$E,46037,28 +$E,48602,19 +$E,48621,23 +$E,49079,7 +$E,49414,28 +$E,50261,17 +$E,50642,12 +$E,52737,11 +$E,52776,18 +$E,53223,6 +$E,53242,9 +$E,53375,8 +$E,53717,15 +$E,56235,16 +$E,57042,7 +$E,60519,10 +$E,64739,12 +$E,64759,7 +$E,64779,7 +$E,67129,17 +$E,68078,24 +$E,68098,28 +$E,68244,22 +$E,68259,23 +$E,73042,8 +$E,73141,521 +$E,74635,12 +$E,74761,9 +$E,74834,6 +$E,75444,12 +$STOP,196,35113896.77,50145,156,17300,19,2,19 +$START,197,52190 +$E,1339,8 +$E,1359,7 +$E,2918,15 +$E,3277,19 +$E,4727,8 +$E,6007,12 +$E,6028,15 +$E,6048,24 +$E,6334,8 +$E,8101,12 +$E,8958,12 +$E,8977,7 +$E,9334,15 +$E,9354,18 +$E,9374,12 +$E,9526,15 +$E,10694,14 +$E,11204,5 +$E,11926,7 +$E,11983,14 +$E,12025,15 +$E,12045,17 +$E,12150,12 +$E,13112,8 +$E,14326,7 +$E,15457,94 +$E,15560,17 +$E,15579,20 +$E,15599,31 +$E,15926,13 +$E,16028,15 +$E,16047,35 +$E,19770,9 +$E,19926,7 +$E,20245,24 +$E,22326,14 +$E,22621,15 +$E,22641,7 +$E,25067,24 +$E,25736,15 +$E,25756,19 +$E,25775,25 +$E,26326,14 +$E,27126,15 +$E,27926,22 +$E,28776,13 +$E,28796,16 +$E,28815,31 +$E,29153,8 +$E,29170,19 +$E,29173,24 +$E,29539,15 +$E,29596,15 +$E,29616,15 +$E,29636,15 +$E,29686,28 +$E,31926,15 +$E,32726,15 +$E,34024,14 +$E,34243,12 +$E,34263,24 +$E,34333,24 +$E,34408,4 +$E,34922,15 +$E,35126,6 +$E,36507,15 +$E,36527,19 +$E,36546,15 +$E,36906,11 +$E,37708,20 +$E,38336,10 +$E,39125,15 +$E,39937,7 +$E,40671,24 +$E,40691,18 +$E,40729,15 +$E,40745,19 +$E,40772,16 +$E,41525,12 +$E,45135,6 +$E,46325,7 +$E,47125,7 +$E,47454,8 +$E,47484,17 +$E,47509,5 +$E,48213,19 +$E,48233,23 +$E,48252,27 +$E,48425,17 +$E,49695,12 +$E,49715,22 +$E,49734,16 +$E,49883,11 +$E,51925,12 +$E,52015,28 +$E,53525,4 +$E,53633,7 +$E,53705,25 +$E,54326,12 +$E,56415,8 +$E,56435,12 +$E,57001,9 +$E,57331,15 +$E,57351,22 +$E,57525,12 +$E,57898,14 +$E,57917,24 +$E,57937,26 +$E,58474,7 +$E,58494,19 +$E,58556,4 +$E,59694,8 +$E,59907,22 +$E,59945,20 +$E,60998,20 +$E,61018,28 +$E,61450,15 +$E,61470,28 +$E,61489,32 +$E,62484,7 +$E,62504,24 +$E,62541,12 +$E,62839,9 +$E,62880,22 +$E,63937,12 +$E,64494,4 +$E,64725,19 +$E,66087,7 +$E,66116,12 +$E,66451,13 +$E,67066,22 +$E,67869,8 +$E,68733,12 +$E,69317,15 +$E,70337,9 +$E,71403,7 +$E,71423,30 +$E,71442,17 +$E,72725,15 +$E,74329,6 +$E,74502,15 +$E,74525,13 +$E,74836,18 +$E,74856,24 +$E,75098,17 +$E,75118,22 +$E,75137,22 +$E,75157,20 +$E,75307,15 +$E,75327,30 +$E,75607,24 +$E,75633,6 +$E,75911,15 +$E,75972,15 +$E,76617,12 +$E,76637,24 +$E,76657,28 +$E,76725,24 +$STOP,197,35113907.45,2676,158,16593,23,3,21 +$START,198,4772 +$E,142,30 +$E,162,31 +$E,277,15 +$E,462,22 +$E,483,24 +$E,516,9 +$E,586,13 +$E,789,20 +$E,1280,24 +$E,1300,15 +$E,1319,11 +$E,1880,12 +$E,2142,11 +$E,2163,14 +$E,2672,12 +$E,3471,16 +$E,5287,14 +$E,5871,7 +$E,6671,14 +$E,7472,9 +$E,7725,13 +$E,7864,7 +$E,7983,15 +$E,13530,7 +$E,13550,10 +$E,13585,9 +$E,14334,19 +$E,14353,30 +$E,14373,30 +$E,14673,12 +$E,14935,417 +$E,15213,15 +$E,15233,32 +$E,16226,9 +$E,16246,15 +$E,16271,16 +$E,16310,7 +$E,16330,24 +$E,16350,28 +$E,16505,12 +$E,16525,16 +$E,16545,27 +$E,18671,8 +$E,19299,44 +$E,19479,12 +$E,20777,14 +$E,20797,25 +$E,20816,24 +$E,22208,12 +$E,22262,8 +$E,23471,7 +$E,24271,12 +$E,24576,14 +$E,24615,19 +$E,25071,6 +$E,25880,14 +$E,26671,6 +$E,32497,11 +$E,32517,17 +$E,33184,16 +$E,33205,12 +$E,33334,15 +$E,33354,14 +$E,33374,15 +$E,33693,15 +$E,33712,31 +$E,33747,16 +$E,33871,7 +$E,33959,9 +$E,35790,15 +$E,35810,23 +$E,36271,14 +$E,36494,28 +$E,36539,16 +$E,36559,6 +$E,36961,16 +$E,36981,27 +$E,37071,7 +$E,37789,22 +$E,38277,7 +$E,38297,12 +$E,38317,15 +$E,38470,8 +$E,38489,24 +$E,38509,24 +$E,40040,12 +$E,40059,7 +$E,40278,12 +$E,42188,38 +$E,44334,15 +$E,44354,13 +$E,45357,15 +$E,46861,419 +$E,47910,6 +$E,47929,15 +$E,48696,6 +$E,49911,24 +$E,49913,7 +$E,50269,9 +$E,50676,15 +$E,51781,15 +$E,51800,14 +$E,52283,9 +$E,57870,12 +$E,58009,6 +$E,58143,8 +$E,58678,12 +$E,59470,7 +$E,65212,4 +$E,65232,7 +$E,65294,14 +$E,69832,7 +$E,71400,7 +$E,72010,12 +$E,72277,12 +$E,72691,265 +$E,73884,6 +$E,74062,14 +$E,74932,25 +$E,74952,14 +$E,75517,15 +$STOP,198,35113918.17,19564,121,17028,15,1,10 +$START,199,21400 +$E,207,24 +$E,226,24 +$E,246,7 +$E,515,14 +$E,1315,4 +$E,2108,9 +$E,2907,7 +$E,4285,6 +$E,5764,7 +$E,5810,6 +$E,5832,16 +$E,6115,6 +$E,6703,15 +$E,8099,14 +$E,8416,7 +$E,8841,7 +$E,10107,21 +$E,10906,15 +$E,12943,7 +$E,13306,8 +$E,15706,6 +$E,16131,28 +$E,16150,12 +$E,16510,19 +$E,16526,15 +$E,16594,11 +$E,16625,7 +$E,16654,20 +$E,18906,16 +$E,20515,7 +$E,22109,7 +$E,22906,7 +$E,24515,5 +$E,26114,14 +$E,27254,22 +$E,28518,11 +$E,30920,7 +$E,35296,14 +$E,35932,7 +$E,35951,15 +$E,36084,7 +$E,36106,15 +$E,36125,28 +$E,36675,11 +$E,36694,13 +$E,36853,21 +$E,36901,15 +$E,37070,7 +$E,37089,15 +$E,37246,5 +$E,37266,5 +$E,38106,11 +$E,38390,9 +$E,38410,9 +$E,38430,15 +$E,39356,7 +$E,39705,7 +$E,41479,4 +$E,41493,15 +$E,41512,22 +$E,41588,19 +$E,42055,12 +$E,42112,382 +$E,42116,19 +$E,42116,7 +$E,42117,14 +$E,42118,7 +$E,42118,12 +$E,42120,403 +$E,42124,33 +$E,42129,59 +$E,42129,59 +$E,42129,8 +$E,42130,12 +$E,42136,335 +$E,42139,5 +$E,42140,6 +$E,42144,78 +$E,42145,65 +$E,42198,211 +$E,42204,7 +$E,42208,6 +$E,42210,12 +$E,42213,12 +$E,42214,22 +$E,42214,17 +$E,42215,7 +$E,42230,31 +$E,42276,27 +$E,42346,39 +$E,42362,119 +$E,42368,7 +$E,42370,15 +$E,42371,14 +$E,42451,15 +$E,42518,49 +$E,42523,40 +$E,42527,11 +$E,42553,31 +$E,42589,48 +$E,42594,28 +$E,42598,9 +$E,42611,31 +$E,42684,12 +$E,42706,32 +$E,42737,22 +$E,42826,31 +$E,42831,22 +$E,42843,27 +$E,42886,28 +$E,42893,31 +$E,42914,15 +$E,42935,35 +$E,42948,18 +$E,43143,59 +$E,43239,31 +$E,44207,35 +$E,44505,19 +$E,44710,28 +$E,44723,14 +$E,44854,4 +$E,44925,44 +$E,44936,12 +$E,44975,24 +$E,45018,52 +$E,45027,14 +$E,45092,28 +$E,45110,15 +$E,45138,7 +$E,45237,26 +$E,45256,7 +$E,45285,24 +$E,45290,9 +$E,45338,31 +$E,45345,24 +$E,45358,17 +$E,45393,24 +$E,45487,51 +$E,45495,5 +$E,45659,39 +$E,46154,23 +$E,46159,6 +$E,46175,24 +$E,46196,25 +$E,46217,24 +$E,46238,12 +$E,46261,17 +$E,46276,7 +$E,46285,21 +$E,46323,5 +$E,46361,44 +$E,46378,6 +$E,46395,38 +$E,46624,7 +$E,46630,9 +$E,46663,15 +$E,47939,9 +$E,47990,4 +$E,48254,30 +$E,48264,17 +$E,48527,24 +$E,48578,45 +$E,48591,6 +$E,48684,6 +$E,48696,25 +$E,48702,4 +$E,48714,48 +$E,49096,7 +$E,49130,27 +$E,49208,12 +$E,49242,25 +$E,49346,12 +$E,49409,13 +$E,50102,12 +$E,50137,7 +$E,50333,38 +$E,50477,7 +$E,50572,7 +$E,50784,12 +$E,51046,33 +$E,51588,18 +$E,52159,17 +$E,52838,36 +$E,53314,6 +$E,53409,28 +$E,53424,7 +$E,53471,91 +$E,53476,9 +$E,53479,308 +$E,53483,19 +$E,53484,26 +$E,53487,29 +$E,53488,60 +$E,53489,23 +$E,53603,4 +$E,53675,12 +$E,53805,15 +$E,53826,6 +$E,53847,7 +$E,53863,30 +$E,53868,7 +$E,54034,262 +$E,54038,19 +$E,54042,56 +$E,54043,40 +$E,54088,15 +$E,54148,32 +$E,54166,24 +$E,54302,6 +$E,54303,28 +$E,54307,6 +$E,54346,86 +$E,54354,7 +$E,54401,35 +$E,54409,108 +$E,54413,9 +$E,54416,8 +$E,54417,25 +$E,54418,15 +$E,54561,24 +$E,54570,7 +$E,54578,28 +$E,54596,28 +$E,54601,9 +$E,54631,7 +$E,54659,230 +$E,54662,7 +$E,54664,15 +$E,54666,25 +$E,54667,41 +$E,54668,24 +$E,54683,17 +$E,54721,60 +$E,54791,7 +$E,54846,6 +$E,54854,5 +$E,54883,24 +$E,54921,12 +$E,55067,8 +$E,55112,15 +$E,55158,12 +$E,55183,24 +$E,55208,15 +$E,55271,22 +$E,55284,193 +$E,55287,12 +$E,55289,25 +$E,55290,16 +$E,55292,39 +$E,55293,23 +$E,55293,7 +$E,55338,20 +$E,55369,15 +$E,55423,16 +$E,55596,108 +$E,55602,7 +$E,55605,12 +$E,55659,81 +$E,55690,17 +$E,55721,64 +$E,55727,28 +$E,55743,15 +$E,55747,7 +$E,55757,10 +$E,55760,4 +$E,55765,25 +$E,55773,12 +$E,55909,120 +$E,55917,7 +$E,55917,7 +$E,55971,126 +$E,55979,24 +$E,55980,15 +$E,56036,6 +$E,56114,15 +$E,56177,6 +$E,56180,22 +$E,56204,8 +$E,56221,163 +$E,56230,35 +$E,56230,19 +$E,56233,14 +$E,56358,12 +$E,56406,7 +$E,56419,19 +$E,56537,12 +$E,56542,17 +$E,56588,8 +$E,56596,96 +$E,56600,7 +$E,56601,11 +$E,56603,7 +$E,56604,7 +$E,56605,6 +$E,56711,10 +$E,56799,4 +$E,56846,110 +$E,56850,7 +$E,56851,7 +$STOP,199,35113928.68,45200,457,16291,47,8,72 +$START,200,48704 +$E,1265,12 +$E,1490,12 +$E,1509,20 +$E,1552,14 +$E,1582,7 +$E,1584,7 +$E,1587,24 +$E,1589,9 +$E,2029,7 +$E,2570,30 +$E,2730,8 +$E,2774,15 +$E,2805,9 +$E,2851,17 +$E,2970,14 +$E,2991,21 +$E,3052,12 +$E,3070,28 +$E,3132,24 +$E,3382,48 +$E,3695,86 +$E,3701,6 +$E,3703,12 +$E,3749,7 +$E,4063,7 +$E,4320,140 +$E,4324,12 +$E,4324,15 +$E,4326,12 +$E,4328,28 +$E,4328,5 +$E,4329,6 +$E,4406,7 +$E,4576,12 +$E,4945,143 +$E,4946,19 +$E,4949,7 +$E,4950,12 +$E,4953,29 +$E,4999,63 +$E,5257,103 +$E,5265,9 +$E,5265,17 +$E,5320,104 +$E,5327,15 +$E,5328,7 +$E,5555,6 +$E,5570,126 +$E,5573,12 +$E,5578,24 +$E,5578,7 +$E,6249,55 +$E,6486,7 +$E,6506,9 +$E,6744,25 +$E,6865,19 +$E,7499,44 +$E,7714,15 +$E,7725,7 +$E,7747,8 +$E,7757,8 +$E,8070,120 +$E,8077,12 +$E,8132,115 +$E,8135,12 +$E,8137,14 +$E,8138,7 +$E,8140,19 +$E,8141,6 +$E,8477,19 +$E,8541,12 +$E,8626,80 +$E,8644,6 +$E,8665,15 +$E,8686,8 +$E,8695,22 +$E,8749,63 +$E,9999,72 +$E,10065,12 +$E,10884,7 +$E,11745,8 +$E,12285,15 +$E,12306,8 +$E,12325,16 +$E,12499,96 +$E,13973,7 +$E,13993,19 +$E,14504,11 +$E,14524,9 +$E,14999,65 +$E,15171,6 +$E,15724,13 +$E,15756,15 +$E,15814,12 +$E,15835,28 +$E,16325,24 +$E,16366,38 +$E,16468,15 +$E,17460,56 +$E,17499,99 +$E,19999,143 +$E,20364,7 +$E,20384,17 +$E,20403,6 +$E,20478,17 +$E,20602,7 +$E,20779,30 +$E,20799,24 +$E,20938,17 +$E,21929,14 +$E,21955,8 +$E,22061,11 +$E,22499,121 +$E,23375,15 +$E,23433,14 +$E,23667,14 +$E,24353,15 +$E,24378,7 +$E,24711,6 +$E,24999,207 +$E,25000,12 +$E,26067,19 +$E,27460,7 +$E,27498,167 +$E,28465,14 +$E,29253,6 +$E,29272,19 +$E,29288,8 +$E,29998,124 +$E,30085,23 +$E,30660,7 +$E,30952,12 +$E,31665,20 +$E,32465,20 +$E,32498,71 +$E,34141,8 +$E,34161,24 +$E,34211,4 +$E,34632,15 +$E,34632,12 +$E,34638,7 +$E,34998,44 +$E,36348,19 +$E,36625,21 +$E,37498,7 +$E,37680,7 +$E,38065,7 +$E,38552,33 +$E,39997,12 +$E,40474,8 +$E,41273,11 +$E,41729,7 +$E,42497,31 +$E,43473,7 +$E,44997,26 +$E,46874,7 +$E,47497,31 +$E,47665,19 +$E,47700,12 +$E,49269,11 +$E,49997,60 +$E,50048,5 +$E,50054,7 +$E,50066,14 +$E,50572,14 +$E,50592,19 +$E,50611,14 +$E,50631,97 +$E,50631,7 +$E,50639,17 +$E,50881,92 +$E,50885,7 +$E,50889,4 +$E,50889,19 +$E,51094,15 +$E,51133,20 +$E,51193,64 +$E,51201,13 +$E,51247,12 +$E,51699,28 +$E,51718,15 +$E,51799,17 +$E,52131,33 +$E,52900,24 +$E,54104,22 +$E,54133,12 +$E,54248,16 +$E,54268,15 +$E,54287,24 +$E,54515,7 +$E,54943,56 +$E,54968,4 +$E,54976,12 +$E,54997,15 +$E,55006,60 +$E,55131,7 +$E,55256,54 +$E,55456,6 +$E,55476,16 +$E,55496,7 +$E,55498,4 +$E,55559,17 +$E,55664,8 +$E,55712,19 +$E,56247,6 +$E,56703,9 +$E,56926,8 +$E,57230,7 +$E,57249,12 +$E,57309,19 +$E,57389,12 +$E,57497,23 +$E,57908,11 +$E,57928,22 +$E,58864,11 +$E,59997,19 +$E,60256,94 +$E,60264,11 +$E,60473,19 +$E,60811,12 +$E,60915,7 +$E,60934,24 +$E,60943,24 +$E,60946,7 +$E,61033,12 +$E,61128,6 +$E,61141,7 +$E,61153,11 +$E,61170,22 +$E,61193,143 +$E,61198,6 +$E,61200,14 +$E,61201,17 +$E,61202,14 +$E,61247,67 +$E,61256,6 +$E,61271,6 +$E,61364,15 +$E,61370,14 +$E,61451,6 +$E,61537,8 +$E,61564,15 +$E,61576,6 +$E,61642,8 +$E,61795,4 +$E,62058,15 +$E,62077,15 +$E,62093,20 +$E,62113,28 +$E,62136,7 +$E,62189,4 +$E,62374,8 +$E,62394,9 +$E,62497,84 +$E,62676,7 +$E,62695,16 +$E,64997,31 +$E,65264,8 +$E,66064,14 +$E,66538,7 +$E,66702,17 +$E,66722,12 +$E,66745,8 +$E,66864,9 +$E,67497,48 +$E,68042,9 +$E,68473,12 +$E,69997,31 +$E,70519,7 +$E,71664,7 +$E,72497,23 +$E,73146,11 +$E,73175,8 +$E,73293,15 +$E,73327,13 +$E,73347,28 +$E,73451,19 +$E,73470,22 +$E,74997,35 +$E,75110,7 +$E,75131,8 +$E,75576,9 +$E,75595,16 +$E,75663,7 +$E,76320,15 +$E,76340,19 +$E,76613,7 +$E,76632,7 +$E,76651,12 +$E,77455,6 +$E,77475,17 +$E,77497,17 +$E,77619,7 +$E,77644,6 +$E,77663,13 +$E,77784,7 +$STOP,200,35113940.56,6200,296,16224,36,9,39 +$START,201,9593 +$E,19,12 +$E,39,19 +$E,508,15 +$E,1313,12 +$E,1669,24 +$E,1875,19 +$E,1895,24 +$E,1914,15 +$E,2103,7 +$E,3037,19 +$E,3039,6 +$E,3106,7 +$E,3109,14 +$E,3152,11 +$E,3195,15 +$E,3207,7 +$E,3269,7 +$E,3284,6 +$E,3436,185 +$E,3444,231 +$E,3448,7 +$E,3450,9 +$E,3450,7 +$E,3452,29 +$E,3453,14 +$E,3459,215 +$E,3461,6 +$E,3467,7 +$E,3468,26 +$E,3472,6 +$E,3475,104 +$E,3479,7 +$E,3482,7 +$E,3483,81 +$E,3488,7 +$E,3491,31 +$E,3498,195 +$E,3506,31 +$E,3507,41 +$E,3507,19 +$E,3514,14 +$E,3530,41 +$E,3561,35 +$E,3569,97 +$E,3569,9 +$E,3583,15 +$E,3584,207 +$E,3593,17 +$E,3594,7 +$E,3600,204 +$E,3607,9 +$E,3609,17 +$E,3609,6 +$E,3609,9 +$E,3616,6 +$E,3623,24 +$E,3631,79 +$E,3647,9 +$E,3649,12 +$E,3655,56 +$E,3661,6 +$E,3670,94 +$E,3678,22 +$E,3715,12 +$E,3788,9 +$E,3821,16 +$E,3911,7 +$E,3920,224 +$E,3924,5 +$E,3926,16 +$E,3928,41 +$E,3960,9 +$E,3983,39 +$E,3991,19 +$E,4248,281 +$E,4251,15 +$E,4253,11 +$E,4254,24 +$E,4255,12 +$E,4255,33 +$E,4256,56 +$E,4257,26 +$E,4271,5 +$E,4287,69 +$E,4311,472 +$E,4315,16 +$E,4318,33 +$E,4319,664 +$E,4322,57 +$E,4323,28 +$E,4323,60 +$E,4324,31 +$E,4325,51 +$E,4326,58 +$E,4327,124 +$E,4328,79 +$E,4328,15 +$E,4329,11 +$E,4330,4 +$E,4334,207 +$E,4337,15 +$E,4339,31 +$E,4339,28 +$E,4341,15 +$E,4341,15 +$E,4343,51 +$E,4344,11 +$E,4591,6 +$E,4858,263 +$E,4862,15 +$E,4862,15 +$E,4863,19 +$E,4866,48 +$E,4866,56 +$E,4867,23 +$E,5513,8 +$E,5526,11 +$E,5537,64 +$E,5562,19 +$E,5574,7 +$E,5599,8 +$E,5629,12 +$E,5690,15 +$E,5702,15 +$E,5730,12 +$E,5734,12 +$E,5738,19 +$E,5742,21 +$E,5801,6 +$E,5811,297 +$E,5814,49 +$E,5817,28 +$E,5817,11 +$E,5818,7 +$E,5819,71 +$E,5820,28 +$E,5826,12 +$E,5839,15 +$E,5873,7 +$E,5922,12 +$E,5947,6 +$E,5991,9 +$E,5995,15 +$E,6019,4 +$E,6022,24 +$E,6027,14 +$E,6031,7 +$E,6072,4 +$E,6085,8 +$E,6103,11 +$E,6218,7 +$E,6223,5 +$E,6272,15 +$E,6353,28 +$E,7045,569 +$E,7046,76 +$E,7048,7 +$E,7049,25 +$E,7049,6 +$E,7050,12 +$E,7050,4 +$E,7051,15 +$E,7052,33 +$E,7053,128 +$E,7055,7 +$E,8037,95 +$E,9354,22 +$E,9357,7 +$E,9406,6 +$E,9858,526 +$E,9858,64 +$E,9861,16 +$E,9861,35 +$E,9862,28 +$E,9863,7 +$E,9864,14 +$E,9865,30 +$E,9866,124 +$E,9867,61 +$E,9867,8 +$E,9884,5 +$E,9907,6 +$E,9953,15 +$E,10116,9 +$E,10170,515 +$E,10171,67 +$E,10175,15 +$E,10175,7 +$E,10176,18 +$E,10176,13 +$E,10177,12 +$E,10177,12 +$E,10178,112 +$E,10795,23 +$E,10800,15 +$E,10882,15 +$E,10995,15 +$E,11020,25 +$E,11860,7 +$E,11880,24 +$E,11903,19 +$E,11988,12 +$E,12833,11 +$E,13037,95 +$E,13295,31 +$E,13298,7 +$E,13608,24 +$E,13611,4 +$E,13670,36 +$E,13675,7 +$E,14287,97 +$E,14903,15 +$E,14995,12 +$E,15044,7 +$E,15285,7 +$E,15304,23 +$E,15324,24 +$E,15483,79 +$E,15485,8 +$E,15487,14 +$E,15489,8 +$E,15492,7 +$E,15537,172 +$E,15545,460 +$E,15548,15 +$E,15549,15 +$E,15549,35 +$E,15551,30 +$E,15551,108 +$E,15553,115 +$E,15555,17 +$E,15748,16 +$E,15752,6 +$E,15754,4 +$E,15915,7 +$E,15919,7 +$E,15924,7 +$E,15934,6 +$E,15939,13 +$E,16057,7 +$E,16108,400 +$E,16108,31 +$E,16111,56 +$E,16111,63 +$E,16112,30 +$E,16113,62 +$E,16114,30 +$E,16116,96 +$E,16117,17 +$E,16133,4 +$E,16170,371 +$E,16173,79 +$E,16173,83 +$E,16174,6 +$E,16175,32 +$E,16177,62 +$E,16178,124 +$E,16179,19 +$E,16180,28 +$E,16223,12 +$E,16420,414 +$E,16422,60 +$E,16423,15 +$E,16424,33 +$E,16425,48 +$E,16425,25 +$E,16426,94 +$E,16427,7 +$E,16428,97 +$E,16430,17 +$E,16474,7 +$E,16483,547 +$E,16486,30 +$E,16486,27 +$E,16486,35 +$E,16487,24 +$E,16488,46 +$E,16488,41 +$E,16489,83 +$E,16490,817 +$E,16493,17 +$E,16493,22 +$E,16494,44 +$E,16495,55 +$E,16497,92 +$E,16497,55 +$E,16498,31 +$E,16499,71 +$E,16499,28 +$E,16500,44 +$E,16501,16 +$E,16501,14 +$E,16501,70 +$E,16502,99 +$E,16502,44 +$E,16504,51 +$E,16505,19 +$E,16505,19 +$E,16506,952 +$STOP,201,35113952.33,33024,833,15952,51,7,68 +$START,202,36390 +$E,703,17 +$E,1204,7 +$E,1223,19 +$E,3023,15 +$E,3045,11 +$E,3064,24 +$E,3203,26 +$E,3369,7 +$E,3882,8 +$E,3925,19 +$E,3949,12 +$E,3969,7 +$E,5703,7 +$E,7373,7 +$E,8203,23 +$E,8325,14 +$E,8527,14 +$E,8546,14 +$E,8586,8 +$E,8605,7 +$E,8702,7 +$E,8737,9 +$E,10703,7 +$E,10882,14 +$E,10990,6 +$E,11112,6 +$E,12981,7 +$E,13990,14 +$E,14014,15 +$E,14156,7 +$E,14175,29 +$E,14571,13 +$E,15703,15 +$E,15930,6 +$E,16183,12 +$E,16969,12 +$E,18203,14 +$E,18574,12 +$E,18738,7 +$E,19869,14 +$E,19890,7 +$E,19910,28 +$E,20141,28 +$E,20703,16 +$E,23203,11 +$E,24028,15 +$E,24047,14 +$E,24069,19 +$E,24360,7 +$E,24375,6 +$E,24649,4 +$E,24671,19 +$E,24980,7 +$E,25161,11 +$E,25674,24 +$E,25693,12 +$E,25703,41 +$E,25769,25 +$E,25963,15 +$E,26580,12 +$E,27380,15 +$E,28169,6 +$E,28203,35 +$E,29160,28 +$E,29180,25 +$E,29734,124 +$E,29780,11 +$E,30213,24 +$E,30236,15 +$E,30257,15 +$E,30490,14 +$E,30510,8 +$E,30530,8 +$E,30569,31 +$E,30585,6 +$E,30663,15 +$E,30682,20 +$E,30703,48 +$E,31350,18 +$E,31369,36 +$E,31386,23 +$E,32061,19 +$E,32081,24 +$E,32100,19 +$E,33203,44 +$E,33974,17 +$E,33994,24 +$E,34016,19 +$E,34416,16 +$E,34455,19 +$E,34569,4 +$E,35451,14 +$E,35703,22 +$E,36169,12 +$E,36969,12 +$E,37086,12 +$E,37108,7 +$E,37127,24 +$E,37769,24 +$E,38203,31 +$E,40271,198 +$E,40702,31 +$E,41789,6 +$E,41987,7 +$E,42026,7 +$E,42569,12 +$E,43202,47 +$E,44553,9 +$E,45702,46 +$E,45782,7 +$E,46984,12 +$E,47210,15 +$E,48179,7 +$E,48202,64 +$E,50702,56 +$E,51942,7 +$E,51962,15 +$E,51982,24 +$E,52978,6 +$E,53202,89 +$E,54567,4 +$E,55702,96 +$E,56167,7 +$E,56983,11 +$E,57428,15 +$E,57448,24 +$E,57468,19 +$E,57782,9 +$E,58202,144 +$E,58567,14 +$E,59668,11 +$E,59687,12 +$E,60167,12 +$E,60702,156 +$E,63202,127 +$E,64910,14 +$E,64930,7 +$E,65702,147 +$E,66895,15 +$E,66915,28 +$E,67121,6 +$E,67230,17 +$E,67499,8 +$E,67521,16 +$E,67541,25 +$E,67637,12 +$E,67912,14 +$E,68202,158 +$E,68769,23 +$E,70567,14 +$E,70702,67 +$E,71765,15 +$E,72467,6 +$E,72606,7 +$E,72637,7 +$E,72656,16 +$E,72676,24 +$E,72971,14 +$E,73201,116 +$E,74567,12 +$E,75383,6 +$E,75433,12 +$E,75452,24 +$E,75472,22 +$E,75626,23 +$E,75649,12 +$E,75668,23 +$E,75701,84 +$E,76000,14 +$E,76020,23 +$E,76967,7 +$E,77242,7 +$E,77779,8 +$E,77897,9 +$E,78023,24 +$STOP,202,35113964.15,53252,175,17418,20,4,22 +$START,203,55386 +$E,526,12 +$E,1170,71 +$E,2072,9 +$E,3647,6 +$E,3670,71 +$E,3808,11 +$E,3828,31 +$E,5247,6 +$E,5870,11 +$E,5889,14 +$E,6170,88 +$E,6331,8 +$E,6836,14 +$E,7439,15 +$E,7459,20 +$E,7478,24 +$E,8118,7 +$E,8137,25 +$E,8157,15 +$E,8244,6 +$E,8670,71 +$E,8697,7 +$E,8741,22 +$E,10671,12 +$E,11170,76 +$E,11581,14 +$E,11647,8 +$E,11697,11 +$E,11718,15 +$E,11737,7 +$E,12936,11 +$E,13670,83 +$E,14841,7 +$E,16141,6 +$E,16170,79 +$E,16436,15 +$E,17006,7 +$E,17027,9 +$E,17046,24 +$E,17206,7 +$E,17687,6 +$E,18625,12 +$E,18645,6 +$E,18670,88 +$E,19613,7 +$E,19636,9 +$E,19729,19 +$E,19749,31 +$E,19768,24 +$E,20304,9 +$E,21153,12 +$E,21170,88 +$E,21173,15 +$E,21236,16 +$E,22036,11 +$E,22216,8 +$E,23246,19 +$E,23636,8 +$E,23670,71 +$E,24957,17 +$E,25856,15 +$E,26047,8 +$E,26170,83 +$E,26553,20 +$E,26572,19 +$E,26836,5 +$E,27132,7 +$E,27152,13 +$E,27514,19 +$E,27533,14 +$E,27553,9 +$E,27636,7 +$E,27706,7 +$E,27913,7 +$E,28670,76 +$E,28742,7 +$E,29594,7 +$E,29606,64 +$E,29614,10 +$E,30049,4 +$E,30836,9 +$E,30971,8 +$E,31170,54 +$E,31640,14 +$E,31968,7 +$E,32335,12 +$E,32355,19 +$E,32374,17 +$E,32436,4 +$E,32656,7 +$E,32676,23 +$E,32695,31 +$E,32761,18 +$E,32820,22 +$E,33670,78 +$E,34839,15 +$E,35463,15 +$E,35482,24 +$E,35636,12 +$E,36170,97 +$E,36597,9 +$E,38670,78 +$E,40495,4 +$E,41452,7 +$E,41471,15 +$E,41491,7 +$E,41513,15 +$E,41562,5 +$E,42131,14 +$E,43000,5 +$E,43136,16 +$E,43156,12 +$E,43666,15 +$E,43686,23 +$E,43732,88 +$E,43741,6 +$E,43802,207 +$E,43808,4 +$E,43810,35 +$E,43824,28 +$E,43844,30 +$E,43873,15 +$E,43878,12 +$E,43890,4 +$E,43935,71 +$E,43936,5 +$E,43937,12 +$E,43938,24 +$E,43939,18 +$E,43941,15 +$E,43941,4 +$E,44068,14 +$E,44088,17 +$E,44128,15 +$E,44404,79 +$E,44406,19 +$E,44406,7 +$E,44407,4 +$E,44408,16 +$E,44408,15 +$E,44411,17 +$E,44413,12 +$E,44747,152 +$E,45843,14 +$E,45997,134 +$E,45998,7 +$E,46322,7 +$E,46577,14 +$E,46597,12 +$E,46616,15 +$E,46685,11 +$E,47198,10 +$E,47646,6 +$E,48497,152 +$E,48499,6 +$E,50023,9 +$E,50997,170 +$E,51029,4 +$E,51225,4 +$E,52449,5 +$E,53246,7 +$E,53324,13 +$E,53344,12 +$E,53497,116 +$E,54184,7 +$E,54204,12 +$E,54223,15 +$E,54346,11 +$E,54365,8 +$E,54838,12 +$E,54917,12 +$E,54955,20 +$E,54975,16 +$E,55075,8 +$E,55608,9 +$E,55997,112 +$E,57620,7 +$E,58497,120 +$E,58533,12 +$E,58785,9 +$E,58844,15 +$E,59018,8 +$E,59038,19 +$E,59155,15 +$E,59175,24 +$E,60329,7 +$E,60348,24 +$E,60367,16 +$E,60997,112 +$E,61234,7 +$E,61737,9 +$E,61757,24 +$E,61776,31 +$E,61877,22 +$E,62043,15 +$E,62558,15 +$E,63142,7 +$E,63497,156 +$E,64263,7 +$E,64449,10 +$E,65003,7 +$E,65023,24 +$E,65082,8 +$E,65997,159 +$E,66034,7 +$E,66932,6 +$E,66951,14 +$E,66971,15 +$E,67635,6 +$E,67681,19 +$E,68497,104 +$E,70618,7 +$E,70637,30 +$E,70838,19 +$E,70997,146 +$E,70998,4 +$E,71634,14 +$E,72302,19 +$E,73081,6 +$E,73125,7 +$E,73497,176 +$E,73498,6 +$E,73858,12 +$E,74034,9 +$E,75622,9 +$E,75657,14 +$E,75997,124 +$E,76029,28 +$E,76048,8 +$E,76279,54 +$E,76281,28 +$E,76286,8 +$E,76287,7 +$E,76327,4 +$E,76341,20 +$E,76343,6 +$E,76346,7 +$E,76347,8 +$E,76348,12 +$E,77234,6 +$E,77529,70 +$E,77531,23 +$STOP,203,35113974.97,10192,242,17754,18,2,45 +$START,204,13326 +$E,227,6 +$E,1039,12 +$E,1432,6 +$E,1800,25 +$E,1986,142 +$E,1994,6 +$E,2015,16 +$E,2017,8 +$E,2018,19 +$E,2021,12 +$E,2036,8 +$E,2296,24 +$E,2315,20 +$E,2335,31 +$E,2462,7 +$E,2623,7 +$E,3192,14 +$E,3211,24 +$E,3230,24 +$E,3446,15 +$E,3692,16 +$E,3711,31 +$E,3888,23 +$E,3914,7 +$E,3934,19 +$E,4191,12 +$E,4230,24 +$E,4486,175 +$E,6986,184 +$E,6987,9 +$E,7278,11 +$E,7447,7 +$E,7580,67 +$E,7582,6 +$E,7583,24 +$E,7583,7 +$E,7584,6 +$E,7586,7 +$E,7587,28 +$E,7705,7 +$E,7768,7 +$E,8018,11 +$E,8236,334 +$E,8237,7 +$E,8238,6 +$E,8330,22 +$E,9089,19 +$E,9400,12 +$E,9455,131 +$E,9455,7 +$E,9457,46 +$E,9458,19 +$E,9458,12 +$E,9460,13 +$E,9461,7 +$E,9461,15 +$E,9462,63 +$E,9463,15 +$E,9464,15 +$E,9486,286 +$E,9487,7 +$E,9518,12 +$E,9545,15 +$E,9565,8 +$E,9580,15 +$E,9585,15 +$E,9893,23 +$E,10205,12 +$E,10678,38 +$E,11616,17 +$E,11798,15 +$E,11818,24 +$E,11986,288 +$E,12080,15 +$E,12213,24 +$E,12233,23 +$E,13028,12 +$E,13823,12 +$E,14486,313 +$E,14487,4 +$E,14488,7 +$E,16328,238 +$E,16986,199 +$E,17033,19 +$E,17040,4 +$E,17835,7 +$E,19435,9 +$E,19486,271 +$E,19487,7 +$E,19580,7 +$E,21986,399 +$E,21987,11 +$E,21987,29 +$E,22017,8 +$E,22080,16 +$E,22392,33 +$E,22705,15 +$E,23153,12 +$E,23173,15 +$E,23442,11 +$E,24235,12 +$E,24486,287 +$E,24487,16 +$E,24517,28 +$E,24518,25 +$E,24521,7 +$E,24580,41 +$E,25528,7 +$E,25682,11 +$E,25702,4 +$E,25827,8 +$E,26012,28 +$E,26032,16 +$E,26051,25 +$E,26357,18 +$E,26635,9 +$E,26986,379 +$E,26987,15 +$E,27080,28 +$E,27899,7 +$E,27958,15 +$E,27978,15 +$E,27997,24 +$E,28072,19 +$E,28091,33 +$E,28223,24 +$E,28974,7 +$E,29060,11 +$E,29485,280 +$E,29580,24 +$E,30585,6 +$E,30605,24 +$E,30624,20 +$E,30661,19 +$E,31423,22 +$E,31584,24 +$E,31840,11 +$E,31861,27 +$E,31985,348 +$E,31987,17 +$E,32017,30 +$E,32022,22 +$E,32080,6 +$E,33771,24 +$E,35025,22 +$E,35080,129 +$E,35082,9 +$E,35083,6 +$E,35084,31 +$E,35085,39 +$E,35086,6 +$E,35087,63 +$E,35088,24 +$E,35142,28 +$E,35205,28 +$E,35338,32 +$E,35392,161 +$E,35393,31 +$E,35394,39 +$E,35395,14 +$E,35395,51 +$E,35395,24 +$E,35396,25 +$E,35396,33 +$E,35397,28 +$E,35397,15 +$E,35398,4 +$E,35398,62 +$E,35399,39 +$E,35401,24 +$E,35401,15 +$E,35423,15 +$E,35517,24 +$E,35705,15 +$E,35735,393 +$E,35737,22 +$E,35830,24 +$E,36142,15 +$E,36328,6 +$E,36455,17 +$E,36985,460 +$E,36987,22 +$E,36987,24 +$E,36988,7 +$E,37576,7 +$E,37823,14 +$E,38326,19 +$E,38376,16 +$E,38461,6 +$E,38878,9 +$E,38898,8 +$E,39484,924 +$E,39486,72 +$E,39487,17 +$E,39516,112 +$E,39517,50 +$E,39522,6 +$E,39523,31 +$E,39524,19 +$E,39525,15 +$E,39579,71 +$E,39580,6 +$E,39587,7 +$E,41821,8 +$E,41984,990 +$E,41986,71 +$E,41986,57 +$E,41987,12 +$E,42079,45 +$E,42183,15 +$E,42621,7 +$E,43489,9 +$E,43509,19 +$E,43651,23 +$E,43671,7 +$E,43691,19 +$E,44221,15 +$E,44484,568 +$E,44486,37 +$E,44486,23 +$E,44579,64 +$E,44586,6 +$E,44722,7 +$E,44742,14 +$E,45678,19 +$E,46984,583 +$E,46986,39 +$E,46987,12 +$E,47016,48 +$E,47019,20 +$E,47020,28 +$E,47022,4 +$E,47023,11 +$E,47025,14 +$E,47079,27 +$E,47430,7 +$E,49484,552 +$E,49486,39 +$E,49579,24 +$E,50621,14 +$E,51865,7 +$E,51984,382 +$E,51986,24 +$E,51986,12 +$E,52008,12 +$E,52079,28 +$E,52226,8 +$E,52391,33 +$E,52704,28 +$E,53114,12 +$E,54137,14 +$E,54176,9 +$E,54196,9 +$E,54235,17 +$E,54484,783 +$E,54486,56 +$E,54487,7 +$E,54579,46 +$E,54583,7 +$E,54641,140 +$E,54644,73 +$E,54645,9 +$E,54645,16 +$E,54647,4 +$E,54648,14 +$E,54648,9 +$E,54648,8 +$E,54650,17 +$E,55385,7 +$E,55415,12 +$E,55434,12 +$E,55450,19 +$E,55549,11 +$E,55843,6 +$E,55863,9 +$E,55882,24 +$E,56626,28 +$E,56984,792 +$E,56986,51 +$E,56988,6 +$E,57079,49 +$E,57821,15 +$E,58396,19 +$E,58774,26 +$E,58829,271 +$E,58829,140 +$E,58831,49 +$E,58831,108 +$E,58831,96 +$E,58832,32 +$E,58833,184 +$E,58833,24 +$E,58834,94 +$E,58835,20 +$E,58835,167 +$E,58836,104 +$E,58837,60 +$E,58891,30 +$E,58954,20 +$STOP,204,35113986.36,37632,401,17651,28,2,39 +$START,205,41131 +$E,1144,459 +$E,1145,19 +$E,1146,14 +$E,1176,51 +$E,1176,38 +$E,1179,16 +$E,1181,7 +$E,1281,6 +$E,2081,14 +$E,2614,19 +$E,2634,16 +$E,2654,12 +$E,3644,323 +$E,3646,22 +$E,3646,7 +$E,4541,12 +$E,5268,214 +$E,5357,14 +$E,5376,4 +$E,5395,15 +$E,5596,11 +$E,6144,530 +$E,6145,38 +$E,6146,25 +$E,6238,8 +$E,6797,15 +$E,6935,7 +$E,6955,9 +$E,8644,735 +$E,8645,56 +$E,8646,15 +$E,8691,103 +$E,8694,7 +$E,8695,12 +$E,8696,12 +$E,8698,28 +$E,8698,12 +$E,8699,19 +$E,8700,12 +$E,8738,7 +$E,9313,7 +$E,10572,14 +$E,10592,32 +$E,10613,15 +$E,11144,553 +$E,11145,40 +$E,11146,12 +$E,11238,7 +$E,11681,12 +$E,13644,697 +$E,13645,39 +$E,13646,35 +$E,14159,14 +$E,14178,8 +$E,14554,8 +$E,14574,28 +$E,14881,17 +$E,15681,17 +$E,16144,408 +$E,16145,31 +$E,16146,13 +$E,16176,72 +$E,16179,12 +$E,16180,23 +$E,16182,19 +$E,17281,7 +$E,17442,14 +$E,17463,15 +$E,18081,12 +$E,18144,7 +$E,18320,11 +$E,18339,28 +$E,18644,524 +$E,18645,24 +$E,18646,7 +$E,19681,14 +$E,19709,9 +$E,19846,11 +$E,19884,17 +$E,21144,589 +$E,21145,44 +$E,21146,16 +$E,21168,11 +$E,21202,11 +$E,21238,8 +$E,21288,15 +$E,21371,7 +$E,21426,208 +$E,21427,30 +$E,21428,67 +$E,21428,89 +$E,21429,12 +$E,21430,67 +$E,21430,16 +$E,21431,6 +$E,21431,55 +$E,21432,47 +$E,21432,36 +$E,21434,35 +$E,21435,12 +$E,21488,287 +$E,21488,44 +$E,21490,48 +$E,21491,67 +$E,21491,184 +$E,21492,49 +$E,21492,79 +$E,21493,62 +$E,21494,37 +$E,21495,88 +$E,21495,39 +$E,21495,56 +$E,21497,46 +$E,21497,35 +$E,21498,15 +$E,21512,24 +$E,21679,6 +$E,21712,15 +$E,21738,499 +$E,21739,51 +$E,21741,84 +$E,21741,156 +$E,21742,28 +$E,21742,275 +$E,21743,110 +$E,21744,6 +$E,21745,126 +$E,21745,84 +$E,21746,96 +$E,21747,115 +$E,21748,51 +$E,21748,19 +$E,21801,519 +$E,21801,8 +$E,21803,79 +$E,21804,123 +$E,21805,92 +$E,21806,96 +$E,21807,95 +$E,21807,38 +$E,21808,48 +$E,21808,51 +$E,21809,96 +$E,21810,25 +$E,21811,6 +$E,21957,9 +$E,22051,480 +$E,22052,32 +$E,22053,15 +$E,22053,168 +$E,22054,100 +$E,22054,63 +$E,22055,50 +$E,22055,149 +$E,22056,11 +$E,22056,19 +$E,22057,15 +$E,22057,68 +$E,22058,63 +$E,22059,108 +$E,22176,16 +$E,22191,46 +$E,22347,19 +$E,22394,439 +$E,22395,21 +$E,22396,7 +$E,22488,44 +$E,22801,25 +$E,23263,7 +$E,23283,12 +$E,23644,385 +$E,23645,19 +$E,23646,16 +$E,23738,49 +$E,23801,75 +$E,23803,12 +$E,23807,19 +$E,23808,15 +$E,23918,9 +$E,24764,7 +$E,25281,7 +$E,26080,8 +$E,26144,463 +$E,26145,22 +$E,26146,25 +$E,26146,15 +$E,26238,49 +$E,26881,9 +$E,28644,686 +$E,28645,47 +$E,28646,7 +$E,28647,11 +$E,28738,52 +$E,29094,15 +$E,29326,12 +$E,29345,32 +$E,29365,34 +$E,30080,17 +$E,30504,22 +$E,30524,12 +$E,31144,499 +$E,31145,31 +$E,31146,10 +$E,31238,56 +$E,31242,7 +$E,31242,8 +$E,31245,7 +$E,31414,20 +$E,31434,14 +$E,33161,1324 +$E,33625,7 +$E,33644,583 +$E,33645,31 +$E,33675,64 +$E,33684,11 +$E,33738,35 +$E,36144,503 +$E,36145,35 +$E,36146,17 +$E,36238,16 +$E,38082,5 +$E,38644,383 +$E,38645,23 +$E,38646,8 +$E,38675,67 +$E,38684,19 +$E,38738,96 +$E,38742,7 +$E,38746,12 +$E,39050,92 +$E,39054,12 +$E,39057,6 +$E,39058,14 +$E,39059,12 +$E,39362,134 +$E,39367,22 +$E,39370,15 +$E,39424,70 +$E,39425,15 +$E,39427,7 +$E,39428,35 +$E,39430,10 +$E,39433,15 +$E,39478,67 +$E,41143,706 +$E,41144,49 +$E,41145,24 +$E,41237,188 +$E,41238,7 +$E,41239,15 +$E,41241,28 +$E,41241,4 +$E,41242,15 +$E,41242,12 +$E,41243,9 +$E,41244,8 +$E,41244,28 +$E,41245,39 +$E,41246,6 +$E,42088,6 +$E,43503,6 +$E,43643,1039 +$E,43644,74 +$E,43645,52 +$E,43680,7 +$E,43737,207 +$E,43738,14 +$E,43739,19 +$E,43740,12 +$E,43741,7 +$E,43741,38 +$E,43742,15 +$E,43742,19 +$E,43743,4 +$E,43744,5 +$E,43744,23 +$E,43745,47 +$E,43746,15 +$E,44043,14 +$E,44072,7 +$E,45284,12 +$E,46143,817 +$E,46144,56 +$E,46145,9 +$E,46237,254 +$E,46238,24 +$E,46239,23 +$E,46240,12 +$E,46241,16 +$E,46241,7 +$E,46242,30 +$E,46242,35 +$E,46243,15 +$E,46243,8 +$E,46244,7 +$E,46244,4 +$E,46245,31 +$E,46246,26 +$E,46246,5 +$STOP,205,35113998.31,180,1025,18058,49,12,86 +$START,206,3846 +$E,2356,791 +$E,2358,52 +$E,2358,56 +$E,2359,22 +$E,2450,55 +$E,2455,6 +$E,2789,6 +$E,2830,12 +$E,3510,15 +$E,4856,1096 +$E,4858,89 +$E,4859,22 +$E,4859,7 +$E,4950,55 +$E,4958,4 +$E,5093,7 +$E,5337,19 +$E,6693,9 +$E,7062,7 +$E,7356,1174 +$E,7358,96 +$E,7361,12 +$E,7380,12 +$E,7388,124 +$E,7388,112 +$E,7390,24 +$E,7390,8 +$E,7391,24 +$E,7392,19 +$E,7392,9 +$E,7394,19 +$E,7394,12 +$E,7395,7 +$E,7395,6 +$E,7396,23 +$E,7397,13 +$E,7450,79 +$E,7455,6 +$E,7583,56 +$E,7638,639 +$E,7639,24 +$E,7640,110 +$E,7640,92 +$E,7641,22 +$E,7641,56 +$E,7642,153 +$E,7643,54 +$E,7643,65 +$E,7643,81 +$E,7644,122 +$E,7644,250 +$E,7645,38 +$E,7645,77 +$E,7646,111 +$E,7647,51 +$E,7648,6 +$E,7700,44 +$E,7716,38 +$E,7763,50 +$E,7768,7 +$E,7778,14 +$E,7896,35 +$E,7950,471 +$E,7951,106 +$E,7953,20 +$E,7953,88 +$E,7954,227 +$E,7955,60 +$E,7955,99 +$E,7956,146 +$E,7957,28 +$E,7957,8 +$E,7958,112 +$E,7959,137 +$E,7960,22 +$E,7989,12 +$E,8075,56 +$E,8080,6 +$E,8302,12 +$E,8323,7 +$E,8343,15 +$E,8388,45 +$E,8606,820 +$E,8608,64 +$E,8609,7 +$E,8614,15 +$E,8700,44 +$E,8888,377 +$E,8888,56 +$E,8889,33 +$E,8890,120 +$E,8890,91 +$E,8891,92 +$E,8891,20 +$E,8892,32 +$E,8892,140 +$E,8893,33 +$E,8893,17 +$E,8894,16 +$E,8894,63 +$E,8895,7 +$E,8895,15 +$E,8895,47 +$E,8896,92 +$E,8898,16 +$E,9013,49 +$E,9325,52 +$E,9331,7 +$E,9638,46 +$E,9641,4 +$E,9856,679 +$E,9858,49 +$E,9858,19 +$E,9859,7 +$E,9950,44 +$E,10693,7 +$E,12292,8 +$E,12356,880 +$E,12358,67 +$E,12358,30 +$E,12513,127 +$E,12514,31 +$E,12516,24 +$E,12517,19 +$E,12517,28 +$E,12518,9 +$E,12518,22 +$E,12521,16 +$E,12522,16 +$E,13971,6 +$E,14856,915 +$E,14857,70 +$E,14858,38 +$E,14859,4 +$E,14950,38 +$E,15500,15 +$E,15661,121 +$E,16936,7 +$E,16975,12 +$E,17356,697 +$E,17358,48 +$E,17358,22 +$E,17434,19 +$E,17450,19 +$E,17454,11 +$E,17763,24 +$E,18075,7 +$E,18692,14 +$E,19856,668 +$E,19858,44 +$E,19858,19 +$E,19950,16 +$E,20292,8 +$E,21892,14 +$E,22356,573 +$E,22357,30 +$E,22358,19 +$E,22358,15 +$E,22374,15 +$E,22388,35 +$E,22391,15 +$E,22392,4 +$E,22393,23 +$E,22395,6 +$E,22396,6 +$E,22580,14 +$E,22600,22 +$E,24856,528 +$E,24857,28 +$E,24858,15 +$E,24858,7 +$E,26314,4 +$E,26762,6 +$E,26858,14 +$E,27256,12 +$E,27276,7 +$E,27358,28 +$E,27358,15 +$E,27659,22 +$E,27920,7 +$E,28048,8 +$E,28070,6 +$E,29856,510 +$E,29857,35 +$E,29888,48 +$E,29888,15 +$E,29891,6 +$E,29892,12 +$E,29892,7 +$E,30999,9 +$E,31019,7 +$E,31119,15 +$E,31251,14 +$E,32356,448 +$E,32357,24 +$E,32438,7 +$E,32959,11 +$E,33985,22 +$E,34856,439 +$E,34857,17 +$E,34859,12 +$E,35013,48 +$E,35016,5 +$E,35017,15 +$E,35018,12 +$E,35019,6 +$E,35756,7 +$E,35794,6 +$E,35948,15 +$E,35968,17 +$E,36292,12 +$E,37319,7 +$E,37356,392 +$E,37357,24 +$E,37358,11 +$E,37968,19 +$E,38501,11 +$E,38521,23 +$E,38540,29 +$E,38693,15 +$E,39855,368 +$E,39856,24 +$E,40294,17 +$E,40584,15 +$E,40605,15 +$E,40914,14 +$E,42355,555 +$E,42356,36 +$E,42357,17 +$E,42387,79 +$E,42390,6 +$E,42392,7 +$E,42394,5 +$E,42395,12 +$E,43160,12 +$E,43416,14 +$E,43436,12 +$E,43991,12 +$E,44010,12 +$E,44030,24 +$E,44291,15 +$E,44855,830 +$E,44856,51 +$E,44857,14 +$E,44949,4 +$E,44965,108 +$E,44966,15 +$E,44968,44 +$E,44968,9 +$E,44969,17 +$E,44971,17 +$E,44974,7 +$E,45084,9 +$E,45103,6 +$E,45551,24 +$E,45594,28 +$E,46705,12 +$E,47355,572 +$E,47356,31 +$E,47357,15 +$E,47951,7 +$E,48051,15 +$E,48490,9 +$E,48510,13 +$E,48529,24 +$E,49855,760 +$E,49856,49 +$E,49857,14 +$E,49903,6 +$E,50082,7 +$E,50102,16 +$E,50121,25 +$E,50366,15 +$E,50385,7 +$E,50614,4 +$E,50653,12 +$E,51714,6 +$E,52291,7 +$E,52355,457 +$E,52356,24 +$E,52357,15 +$E,52460,7 +$E,52576,5 +$E,52616,15 +$E,52842,15 +$E,53118,6 +$E,53891,6 +$E,54855,225 +$E,55012,12 +$E,55018,5 +$E,55136,70 +$E,55138,7 +$E,55140,7 +$E,55141,6 +$E,55141,12 +$E,55144,14 +$E,55565,4 +$E,55762,15 +$E,55762,6 +$STOP,206,35114010.32,27904,360,18022,28,2,42 +$START,207,31374 +$E,28,15 +$E,788,21 +$E,808,28 +$E,855,14 +$E,871,22 +$E,1791,265 +$E,1793,9 +$E,1839,21 +$E,1839,7 +$E,1886,56 +$E,2005,7 +$E,2008,7 +$E,2013,7 +$E,2041,23 +$E,2044,7 +$E,2801,16 +$E,2821,28 +$E,3510,12 +$E,3552,15 +$E,4291,206 +$E,4293,7 +$E,4386,46 +$E,6791,253 +$E,6815,42 +$E,6886,40 +$E,7198,43 +$E,7228,8 +$E,7511,39 +$E,8605,7 +$E,8628,9 +$E,8647,7 +$E,9020,12 +$E,9039,25 +$E,9059,15 +$E,9291,216 +$E,9323,7 +$E,9323,12 +$E,9386,24 +$E,9627,7 +$E,10442,14 +$E,11227,7 +$E,11791,136 +$E,11886,11 +$E,12842,12 +$E,14291,193 +$E,14386,40 +$E,15242,18 +$E,15525,6 +$E,15544,22 +$E,16791,219 +$E,16839,19 +$E,16843,7 +$E,16886,39 +$E,16941,7 +$E,16961,15 +$E,16981,15 +$E,19291,191 +$E,19293,7 +$E,19385,78 +$E,19393,6 +$E,19394,15 +$E,19884,15 +$E,19904,8 +$E,19924,14 +$E,20582,24 +$E,20601,16 +$E,20621,20 +$E,20641,17 +$E,20805,60 +$E,20941,9 +$E,21176,15 +$E,21196,11 +$E,21643,19 +$E,21659,7 +$E,21791,310 +$E,21793,8 +$E,21823,56 +$E,21885,60 +$E,21891,11 +$E,21893,6 +$E,22198,71 +$E,22202,15 +$E,22510,78 +$E,22519,7 +$E,24291,319 +$E,24293,20 +$E,24293,4 +$E,24385,76 +$E,24448,32 +$E,25313,15 +$E,25454,4 +$E,25473,24 +$E,25495,15 +$E,26791,223 +$E,26885,48 +$E,26889,5 +$E,28832,9 +$E,29291,259 +$E,29293,8 +$E,29293,4 +$E,29385,30 +$E,29629,10 +$E,30427,7 +$E,31791,209 +$E,31885,39 +$E,32027,8 +$E,34108,6 +$E,34257,6 +$E,34291,154 +$E,34323,12 +$E,34385,87 +$E,34391,4 +$E,34392,4 +$E,34442,12 +$E,36568,7 +$E,36588,20 +$E,36729,7 +$E,36774,16 +$E,36791,318 +$E,36792,7 +$E,36793,15 +$E,36885,71 +$E,36890,10 +$E,39290,355 +$E,39292,7 +$E,39384,60 +$E,39392,12 +$E,41306,11 +$E,41641,12 +$E,41790,152 +$E,41822,15 +$E,41884,27 +$E,42147,19 +$E,42442,15 +$E,42912,6 +$E,43262,16 +$E,44290,198 +$E,44292,5 +$E,44384,35 +$E,45927,12 +$E,45947,12 +$E,45967,12 +$E,46790,207 +$E,46884,31 +$E,47241,17 +$E,47276,4 +$E,47295,20 +$E,47315,7 +$E,47971,15 +$E,49074,8 +$E,49093,15 +$E,49290,156 +$E,49384,32 +$E,49641,9 +$E,50092,16 +$E,51241,7 +$E,51790,198 +$E,52304,14 +$E,54290,135 +$E,55929,6 +$E,55949,9 +$E,56009,14 +$E,56029,30 +$E,56045,28 +$E,56790,127 +$E,56884,15 +$E,57540,11 +$E,57560,19 +$E,57582,20 +$E,57768,15 +$E,58791,8 +$E,59226,7 +$E,59290,100 +$E,60031,17 +$E,60843,6 +$E,61626,20 +$E,61790,104 +$E,69801,7 +$E,69950,9 +$E,69981,7 +$E,70001,5 +$E,70441,15 +$E,71370,12 +$E,72343,6 +$E,72363,17 +$E,72786,12 +$E,73839,15 +$E,73841,12 +$E,74407,119 +$E,74414,7 +$E,74415,6 +$E,74416,12 +$E,74478,695 +$E,74485,11 +$E,74486,174 +$E,74488,30 +$E,74488,17 +$E,74767,780 +$E,74771,7 +$E,74772,7 +$E,74773,26 +$E,74775,166 +$E,74776,63 +$E,75008,15 +$E,75027,12 +$E,75047,20 +$E,76041,9 +$E,77274,256 +$E,77276,12 +$E,77423,15 +$E,77443,7 +$STOP,207,35114022.23,50327,211,17804,28,7,30 +$START,208,52824 +$E,289,299 +$E,290,15 +$E,291,14 +$E,470,6 +$E,489,12 +$E,509,16 +$E,550,21 +$E,1072,15 +$E,2789,353 +$E,2790,9 +$E,2791,12 +$E,4256,12 +$E,5040,9 +$E,5289,327 +$E,5704,44 +$E,5847,4 +$E,7789,348 +$E,7790,15 +$E,7897,4 +$E,9419,19 +$E,9441,7 +$E,10289,246 +$E,10291,12 +$E,10494,7 +$E,10698,6 +$E,10705,14 +$E,11690,6 +$E,12718,6 +$E,12738,14 +$E,12760,6 +$E,12789,270 +$E,13056,12 +$E,14640,9 +$E,14854,19 +$E,14875,23 +$E,15289,286 +$E,15290,12 +$E,15313,19 +$E,15318,9 +$E,15440,4 +$E,17789,217 +$E,19898,9 +$E,20289,255 +$E,20291,8 +$E,20395,19 +$E,21052,12 +$E,21180,6 +$E,21200,12 +$E,21219,15 +$E,21389,24 +$E,21409,16 +$E,22789,344 +$E,22790,15 +$E,22791,6 +$E,22813,32 +$E,22820,17 +$E,23440,14 +$E,24568,7 +$E,24588,8 +$E,24633,7 +$E,24643,20 +$E,25289,323 +$E,25290,17 +$E,27305,9 +$E,27455,9 +$E,27472,7 +$E,27789,382 +$E,27790,24 +$E,28880,7 +$E,29707,56 +$E,30289,419 +$E,30290,15 +$E,30291,6 +$E,30313,46 +$E,30315,15 +$E,30318,7 +$E,30321,14 +$E,30655,19 +$E,30946,23 +$E,30965,15 +$E,31455,7 +$E,31624,14 +$E,32063,10 +$E,32178,16 +$E,32197,23 +$E,32217,9 +$E,32240,14 +$E,32421,14 +$E,32441,24 +$E,32463,16 +$E,32483,15 +$E,32503,9 +$E,32789,317 +$E,32790,4 +$E,32853,7 +$E,33046,6 +$E,33840,12 +$E,35086,6 +$E,35289,371 +$E,35290,15 +$E,36932,15 +$E,36952,24 +$E,37241,4 +$E,37789,393 +$E,37790,24 +$E,37813,28 +$E,37820,15 +$E,38057,6 +$E,38076,7 +$E,38094,263 +$E,38094,24 +$E,38097,64 +$E,38097,14 +$E,38098,26 +$E,38099,31 +$E,38099,12 +$E,38100,39 +$E,38101,48 +$E,38102,51 +$E,38103,24 +$E,38192,7 +$E,38406,249 +$E,38407,47 +$E,38408,46 +$E,38409,16 +$E,38409,9 +$E,38410,7 +$E,38410,46 +$E,38411,55 +$E,38412,105 +$E,38412,34 +$E,38414,48 +$E,38415,15 +$E,38469,143 +$E,38470,48 +$E,38471,11 +$E,38472,4 +$E,38473,48 +$E,38474,22 +$E,38475,124 +$E,38477,18 +$E,38477,17 +$E,38608,6 +$E,38719,307 +$E,38719,158 +$E,38722,141 +$E,38723,119 +$E,38724,12 +$E,38725,35 +$E,38727,65 +$E,38728,25 +$E,38813,7 +$E,38886,10 +$E,39031,301 +$E,39032,30 +$E,39035,88 +$E,39035,15 +$E,39036,47 +$E,39036,81 +$E,39037,56 +$E,39038,67 +$E,39038,81 +$E,39039,47 +$E,39040,73 +$E,39093,446 +$E,39094,79 +$E,39096,56 +$E,39096,8 +$E,39097,126 +$E,39097,75 +$E,39098,67 +$E,39099,24 +$E,39099,15 +$E,39100,79 +$E,39101,119 +$E,39102,12 +$E,39124,15 +$E,39179,7 +$E,39191,4 +$E,39325,12 +$E,39357,15 +$E,39445,20 +$E,39463,10 +$E,39618,15 +$E,39655,777 +$E,39658,20 +$E,39658,25 +$E,39659,29 +$E,39659,137 +$E,39660,172 +$E,39661,31 +$E,39661,39 +$E,39662,204 +$E,39662,112 +$E,39663,195 +$E,39664,89 +$E,39664,79 +$E,39665,17 +$E,39665,16 +$E,39666,4 +$E,39666,14 +$E,39711,4 +$E,39713,8 +$E,39715,7 +$E,39718,691 +$E,39719,36 +$E,39720,45 +$E,39721,81 +$E,39722,107 +$E,39722,115 +$E,39722,100 +$E,39723,151 +$E,39724,124 +$E,39724,88 +$E,39724,96 +$E,39725,92 +$E,39726,184 +$E,39727,54 +$E,39728,15 +$E,39968,799 +$E,39971,38 +$E,39972,49 +$E,39972,64 +$E,39973,8 +$E,39973,14 +$E,39974,55 +$E,39975,8 +$E,39976,199 +$E,40254,16 +$E,40288,432 +$E,40289,25 +$E,40290,16 +$E,40296,179 +$E,40296,46 +$E,40297,9 +$E,40298,23 +$E,40299,38 +$E,40299,12 +$E,40300,23 +$E,40302,39 +$E,40302,60 +$E,40303,33 +$E,40304,28 +$E,40688,9 +$E,40821,7 +$E,40905,172 +$E,40906,70 +$E,40907,30 +$E,40907,14 +$E,40907,31 +$E,40908,27 +$E,40908,64 +$E,40909,9 +$E,40909,14 +$E,40911,7 +$E,40911,35 +$E,40913,6 +$E,40914,18 +$E,40968,745 +$E,40971,51 +$E,40972,19 +$E,40972,49 +$E,40973,145 +$E,40973,31 +$E,40974,12 +$E,40975,62 +$E,40975,38 +$E,40976,200 +$E,40977,31 +$E,40996,7 +$E,41054,12 +$E,41218,844 +$E,41222,31 +$E,41222,73 +$E,41223,15 +$E,41223,30 +$E,41224,31 +$E,41225,35 +$E,41226,204 +$E,41228,30 +$E,41359,8 +$E,41371,7 +$E,41530,44 +$E,41535,31 +$E,41538,231 +$E,41539,20 +$E,41593,31 +$E,41595,7 +$E,41597,15 +$E,41600,24 +$E,41658,6 +$E,41660,17 +$E,41662,12 +$E,41662,16 +$E,41664,15 +$E,41666,12 +$E,41839,7 +$E,41843,72 +$E,41843,33 +$STOP,208,35114033.36,12297,555,17522,56,6,49 +$START,209,16076 +$E,315,19 +$E,964,426 +$E,966,19 +$E,966,7 +$E,1738,4 +$E,3464,335 +$E,3466,19 +$E,3466,11 +$E,3586,17 +$E,4265,9 +$E,4285,9 +$E,4306,15 +$E,4340,12 +$E,4363,9 +$E,5115,11 +$E,5408,17 +$E,5964,380 +$E,5966,24 +$E,5986,6 +$E,5988,16 +$E,6731,6 +$E,8464,401 +$E,8465,17 +$E,8466,24 +$E,8725,4 +$E,8817,15 +$E,8856,23 +$E,9115,15 +$E,9931,7 +$E,10731,19 +$E,10964,319 +$E,10966,14 +$E,10966,14 +$E,10995,12 +$E,11015,18 +$E,11034,17 +$E,12402,6 +$E,12422,19 +$E,12452,17 +$E,13393,15 +$E,13414,6 +$E,13433,14 +$E,13464,465 +$E,13465,12 +$E,13466,11 +$E,13466,7 +$E,13488,40 +$E,13494,8 +$E,13603,15 +$E,14715,9 +$E,15964,401 +$E,15965,15 +$E,15966,15 +$E,16334,16 +$E,17134,6 +$E,17915,15 +$E,18464,383 +$E,18466,24 +$E,18731,14 +$E,19282,9 +$E,19301,31 +$E,19531,7 +$E,19968,7 +$E,19971,7 +$E,19974,15 +$E,19977,7 +$E,19980,7 +$E,19984,19 +$E,19994,7 +$E,19997,10 +$E,20002,7 +$E,20020,7 +$E,20023,12 +$E,20033,8 +$E,20036,6 +$E,20039,4 +$E,20054,14 +$E,20067,24 +$E,20332,172 +$E,20332,6 +$E,20333,14 +$E,20334,31 +$E,20335,40 +$E,20336,9 +$E,20338,28 +$E,20340,24 +$E,20754,15 +$E,20757,15 +$E,20785,27 +$E,20964,236 +$E,21050,22 +$E,21115,4 +$E,21175,35 +$E,21363,38 +$E,21675,49 +$E,22213,7 +$E,22224,15 +$E,22464,39 +$E,22519,111 +$E,22522,12 +$E,22522,12 +$E,22523,12 +$E,22524,33 +$E,22525,17 +$E,22526,12 +$E,22526,19 +$E,22528,15 +$E,22605,39 +$E,22613,22 +$E,22620,12 +$E,22638,19 +$E,22644,28 +$E,22651,14 +$E,22683,24 +$E,22698,8 +$E,22751,12 +$E,22763,6 +$E,22777,46 +$E,22832,84 +$E,22835,7 +$E,22835,30 +$E,22836,4 +$E,22838,12 +$E,22838,35 +$E,22839,6 +$E,22875,4 +$E,22894,101 +$E,22894,14 +$E,22897,20 +$E,22897,6 +$E,22901,11 +$E,22903,18 +$E,22925,44 +$E,22933,7 +$E,22965,19 +$E,22966,19 +$E,22980,27 +$E,23003,14 +$E,23022,30 +$E,23058,16 +$E,23075,17 +$E,23089,11 +$E,23089,14 +$E,23105,19 +$E,23126,7 +$E,23144,98 +$E,23149,17 +$E,23207,767 +$E,23210,24 +$E,23211,39 +$E,23212,28 +$E,23213,43 +$E,23214,40 +$E,23215,191 +$E,23216,49 +$E,23230,7 +$E,23236,28 +$E,23269,780 +$E,23272,7 +$E,23272,32 +$E,23273,28 +$E,23273,56 +$E,23274,48 +$E,23276,60 +$E,23276,56 +$E,23277,198 +$E,23285,14 +$E,23332,8 +$E,23355,8 +$E,23457,790 +$E,23459,17 +$E,23460,64 +$E,23460,6 +$E,23461,7 +$E,23462,28 +$E,23462,24 +$E,23463,70 +$E,23464,67 +$E,23465,153 +$E,23467,17 +$E,23519,911 +$E,23521,78 +$E,23522,112 +$E,23523,12 +$E,23523,97 +$E,23524,20 +$E,23525,57 +$E,23525,56 +$E,23527,243 +$E,23550,7 +$E,23577,5 +$E,23626,6 +$E,23734,12 +$E,23753,24 +$E,23769,792 +$E,23772,35 +$E,23773,57 +$E,23773,15 +$E,23773,9 +$E,23774,15 +$E,23774,60 +$E,23775,12 +$E,23775,9 +$E,23776,41 +$E,23776,54 +$E,23777,191 +$E,23779,25 +$E,23780,8 +$E,23866,7 +$E,23874,6 +$E,23895,5 +$E,23932,11 +$E,24082,891 +$E,24084,31 +$E,24085,62 +$E,24085,24 +$E,24086,70 +$E,24086,71 +$E,24087,12 +$E,24087,56 +$E,24088,91 +$E,24089,51 +$E,24090,220 +$E,24092,19 +$E,24372,6 +$E,24411,30 +$E,24470,9 +$E,24490,14 +$E,24509,13 +$E,24714,115 +$E,24722,52 +$E,24726,22 +$E,24726,7 +$E,25022,6 +$E,25131,31 +$E,25964,143 +$E,26269,103 +$E,26273,14 +$E,26273,8 +$E,26276,15 +$E,26277,7 +$E,26894,88 +$E,26896,6 +$E,26898,7 +$E,26899,6 +$E,26901,6 +$E,26901,12 +$E,27214,191 +$E,27519,60 +$E,27520,7 +$E,27521,12 +$E,27523,14 +$E,27524,15 +$E,27526,12 +$E,28144,51 +$E,28148,14 +$E,28464,114 +$E,29736,7 +$E,29755,17 +$E,29797,12 +$E,29937,14 +$E,30302,7 +$E,30536,24 +$E,30735,20 +$E,30964,87 +$E,31009,14 +$E,31342,7 +$E,31531,10 +$E,31551,14 +$E,31570,28 +$E,31875,24 +$E,32378,6 +$E,32418,6 +$E,32435,17 +$E,32449,5 +$E,32474,7 +$E,32832,12 +$E,32883,14 +$E,32894,7 +$E,32922,15 +$E,32941,25 +$E,33427,12 +$E,33439,12 +$E,33456,9 +$E,33457,24 +$E,33525,27 +$E,33605,12 +$E,33700,7 +$E,33726,15 +$E,33757,15 +$E,33798,7 +$E,33906,12 +$E,34004,7 +$E,34024,15 +$E,34065,9 +$E,34394,14 +$E,34400,6 +$E,34714,24 +$E,34731,24 +$STOP,209,35114045.44,40202,394,17876,38,8,52 +$ENV,209,35114047.36,23.8,56.3,23.9,54.3,23.64,971.17 +$START,210,44321 +$E,1525,7 +$E,1750,19 +$E,2182,89 +$E,2550,15 +$E,4133,7 +$E,4225,164 +$E,4342,14 +$E,4362,19 +$E,4382,12 +$E,4497,15 +$E,4516,30 +$E,4537,18 +$E,4680,7 +$E,4682,63 +$E,5344,8 +$E,6841,8 +$E,7182,43 +$E,8867,6 +$E,9591,6 +$E,9682,8 +$E,10443,8 +$E,16463,9 +$E,16472,15 +$E,19312,6 +$E,19732,12 +$E,21297,7 +$E,23522,4 +$E,23543,8 +$E,24682,7 +$E,27182,7 +$E,28142,6 +$E,31289,8 +$E,32182,12 +$E,34682,15 +$E,39783,30 +$E,39846,555 +$E,39850,14 +$E,39853,15 +$E,39854,142 +$E,39855,30 +$E,40127,600 +$E,40131,26 +$E,40133,7 +$E,40135,156 +$E,40136,52 +$E,40137,12 +$E,40837,44 +$E,42087,89 +$E,44587,40 +$E,45072,8 +$E,47087,70 +$E,48298,7 +$E,49587,128 +$E,50460,6 +$E,52087,76 +$E,54587,109 +$E,56144,11 +$E,57087,115 +$E,59587,44 +$E,61284,39 +$E,62087,65 +$E,63351,7 +$E,64131,5 +$E,64432,10 +$E,64587,80 +$E,67087,30 +$E,69173,7 +$E,69587,62 +$E,72087,72 +$E,72322,30 +$E,72327,9 +$E,72329,16 +$E,72634,48 +$E,72697,76 +$E,72799,6 +$E,72818,8 +$E,72947,129 +$E,72949,7 +$E,72950,17 +$E,72950,7 +$E,72951,6 +$E,72952,12 +$E,72953,8 +$E,72953,36 +$E,72954,24 +$E,72955,15 +$E,72956,23 +$E,73229,12 +$E,73259,126 +$E,73263,7 +$E,73263,6 +$E,73266,17 +$E,73267,9 +$E,73268,23 +$E,73269,7 +$E,73322,120 +$E,73325,14 +$E,73328,15 +$E,73329,24 +$E,73330,24 +$E,73337,56 +$E,73572,63 +$E,73572,17 +$E,73577,15 +$E,74587,31 +$E,77087,63 +$STOP,210,35114057.44,58780,106,16854,15,3,25 +$START,211,60347 +$E,526,22 +$E,3026,39 +$E,5526,49 +$E,8026,30 +$E,8058,63 +$E,8060,6 +$E,8063,8 +$E,8064,8 +$E,8066,8 +$E,10003,4 +$E,10526,62 +$E,13026,65 +$E,15526,24 +$E,17516,7 +$E,18026,33 +$E,18495,7 +$E,18514,7 +$E,18572,6 +$E,20526,72 +$E,23026,31 +$E,23071,12 +$E,25526,40 +$E,27247,7 +$E,28026,79 +$E,30526,45 +$E,33026,78 +$E,35526,48 +$E,38026,76 +$E,40525,97 +$E,43024,52 +$E,45524,71 +$E,48024,67 +$E,50524,30 +$E,53024,62 +$E,55524,103 +$E,57768,8 +$E,58024,62 +$E,58643,4 +$E,60524,65 +$E,61146,7 +$E,61165,12 +$E,62385,10 +$E,63024,76 +$E,65524,33 +$E,70681,24 +$E,70751,407 +$E,70755,6 +$E,70758,7 +$E,70759,88 +$E,70760,28 +$E,70978,88 +$E,70978,60 +$E,70978,34 +$E,70983,12 +$E,70984,31 +$E,70985,28 +$E,71227,102 +$E,71603,124 +$E,71603,51 +$E,71606,6 +$E,71606,4 +$E,71607,22 +$E,71609,58 +$E,71610,68 +$E,71612,28 +$E,71665,158 +$E,71669,19 +$E,71669,6 +$E,71670,31 +$E,71671,9 +$E,71672,15 +$E,71674,39 +$E,71674,28 +$E,71675,8 +$E,71728,152 +$E,71730,28 +$E,71731,15 +$E,71733,38 +$E,71735,67 +$E,71735,7 +$E,71736,16 +$E,71737,17 +$E,73810,6 +$E,74532,7 +$E,74855,4 +$E,76262,4 +$STOP,211,35114067.88,8739,86,17442,17,4,18 +$START,212,9997 +$E,2595,11 +$E,5135,6 +$E,5681,7 +$E,12343,12 +$E,17749,20 +$E,18006,40 +$E,18583,4 +$E,19256,14 +$E,20506,79 +$E,21219,7 +$E,21756,62 +$E,24256,69 +$E,24595,6 +$E,26756,36 +$E,28006,88 +$E,28116,14 +$E,28272,19 +$E,28275,12 +$E,29256,105 +$E,30195,7 +$E,34256,91 +$E,36756,97 +$E,39255,62 +$E,41755,96 +$E,44255,73 +$E,44300,7 +$E,46755,35 +$E,49255,70 +$E,51755,76 +$E,51956,7 +$E,52734,163 +$E,54177,8 +$E,54255,58 +$E,54587,149 +$E,56755,88 +$E,59255,102 +$E,60266,7 +$E,61755,67 +$E,64255,116 +$E,66198,25 +$E,66755,163 +$E,68524,5 +$E,69045,12 +$E,69255,95 +$E,71755,123 +$E,74255,123 +$E,76755,71 +$STOP,212,35114078.21,23179,47,17199,17,4,13 +$START,213,24084 +$E,2133,112 +$E,4279,4 +$E,4299,4 +$E,4633,60 +$E,4903,12 +$E,7133,88 +$E,7233,7 +$E,8623,4 +$E,9633,99 +$E,12133,59 +$E,14632,65 +$E,17132,62 +$E,17375,105 +$E,17383,17 +$E,17438,102 +$E,17446,14 +$E,25970,5 +$E,26492,112 +$E,51023,4 +$E,53816,5 +$E,54788,336 +$E,60465,8 +$E,74030,4 +$E,77361,7 +$STOP,213,35114088.40,36913,24,17173,16,4,11 +$START,214,37531 +$E,2048,31 +$E,2368,42 +$E,2665,15 +$E,2978,32 +$E,2980,8 +$E,2983,12 +$E,3618,112 +$E,4868,172 +$E,5478,67 +$E,5481,14 +$E,5484,10 +$E,5486,6 +$E,5540,76 +$E,5544,7 +$E,5547,31 +$E,5790,51 +$E,5793,4 +$E,5795,7 +$E,5796,6 +$E,5797,12 +$E,6118,174 +$E,6119,7 +$E,7368,120 +$E,9868,129 +$E,10556,17 +$E,12368,188 +$E,12665,51 +$E,12667,12 +$E,12668,14 +$E,12670,10 +$E,12670,12 +$E,12672,7 +$E,12672,15 +$E,12727,73 +$E,12729,6 +$E,12733,13 +$E,12790,64 +$E,12795,5 +$E,12795,7 +$E,12796,6 +$E,12797,6 +$E,12798,10 +$E,12799,4 +$E,12853,10 +$E,12923,15 +$E,12977,28 +$E,12978,16 +$E,13009,21 +$E,13040,58 +$E,13235,50 +$E,13290,71 +$E,13292,14 +$E,13293,27 +$E,13294,15 +$E,13295,31 +$E,13295,6 +$E,13296,9 +$E,13321,48 +$E,13325,8 +$E,13352,135 +$E,13353,14 +$E,13357,12 +$E,13359,7 +$E,13360,10 +$E,13361,9 +$E,13618,191 +$E,13634,103 +$E,13638,40 +$E,13638,17 +$E,13639,11 +$E,13640,19 +$E,13641,17 +$E,13642,24 +$E,13946,113 +$E,13949,7 +$E,13950,44 +$E,13950,30 +$E,13951,12 +$E,13952,24 +$E,13953,15 +$E,13954,15 +$E,13955,27 +$E,14868,160 +$E,14884,103 +$E,14888,62 +$E,14889,12 +$E,14889,11 +$E,14890,12 +$E,14891,15 +$E,14892,22 +$E,14893,31 +$E,16031,6 +$E,17368,227 +$E,17384,148 +$E,17386,12 +$E,17388,66 +$E,17388,42 +$E,17388,6 +$E,17389,20 +$E,17389,12 +$E,17390,32 +$E,17390,29 +$E,17391,12 +$E,17391,26 +$E,17392,19 +$E,17393,11 +$E,17393,14 +$E,18439,6 +$E,19867,329 +$E,19869,5 +$E,19870,8 +$E,19884,152 +$E,19886,15 +$E,19887,6 +$E,19888,78 +$E,19889,9 +$E,19890,6 +$E,19890,24 +$E,19891,14 +$E,19891,38 +$E,19891,5 +$E,19892,24 +$E,19893,14 +$E,19893,7 +$E,19899,37 +$E,22367,210 +$E,22384,140 +$E,22386,6 +$E,22386,11 +$E,22388,76 +$E,22389,16 +$E,22389,4 +$E,22390,15 +$E,22390,30 +$E,22391,7 +$E,22392,33 +$E,22393,7 +$E,24867,255 +$E,24869,7 +$E,24884,184 +$E,24886,7 +$E,24886,11 +$E,24887,27 +$E,24888,96 +$E,24888,50 +$E,24888,12 +$E,24889,22 +$E,24889,30 +$E,24890,51 +$E,24890,17 +$E,24890,31 +$E,24891,16 +$E,24891,38 +$E,24891,4 +$E,24892,44 +$E,24893,14 +$E,24894,12 +$E,24899,289 +$E,24899,59 +$E,24901,12 +$E,24902,28 +$E,24903,12 +$E,24904,46 +$E,24904,47 +$E,24905,32 +$E,24905,39 +$E,24906,25 +$E,24908,41 +$E,24909,9 +$E,25196,280 +$E,25197,6 +$E,25198,23 +$E,25199,24 +$E,25199,5 +$E,25200,135 +$E,25200,87 +$E,25201,24 +$E,25201,36 +$E,25202,44 +$E,25202,15 +$E,25202,24 +$E,25203,56 +$E,25203,30 +$E,25203,54 +$E,25204,16 +$E,25205,70 +$E,25205,51 +$E,25206,28 +$E,25509,257 +$E,25510,14 +$E,25511,30 +$E,25512,11 +$E,25513,129 +$E,25513,83 +$E,25513,30 +$E,25514,28 +$E,25514,38 +$E,25515,24 +$E,25515,27 +$E,25515,49 +$E,25516,30 +$E,25516,57 +$E,25516,11 +$E,25517,76 +$E,25518,15 +$E,27239,6 +$E,27367,335 +$E,27369,30 +$E,27384,259 +$E,27385,14 +$E,27386,31 +$E,27388,145 +$E,27388,79 +$E,27388,15 +$E,27389,35 +$E,27389,48 +$E,27390,8 +$E,27390,24 +$E,27390,56 +$E,27391,30 +$E,27391,59 +$E,27391,11 +$E,27392,67 +$E,27393,30 +$E,27399,23 +$E,29867,195 +$E,29884,253 +$E,29885,8 +$E,29886,17 +$E,29886,15 +$E,29888,128 +$E,29889,39 +$E,29889,54 +$E,29890,71 +$E,29890,28 +$E,29890,60 +$E,29891,39 +$E,29891,51 +$E,29891,12 +$E,29892,60 +$E,29893,16 +$E,29894,5 +$E,32367,331 +$E,32384,244 +$E,32385,7 +$E,32385,6 +$E,32386,4 +$E,32386,19 +$E,32387,7 +$E,32388,135 +$E,32389,34 +$E,32389,35 +$E,32390,14 +$E,32390,12 +$E,32390,53 +$E,32391,28 +$E,32391,18 +$E,32392,67 +$E,32393,39 +$E,32393,15 +$E,34867,198 +$E,34869,8 +$E,34884,248 +$E,34885,8 +$E,34886,6 +$E,34886,24 +$E,34887,6 +$E,34888,140 +$E,34889,38 +$E,34889,36 +$E,34890,21 +$E,34890,19 +$E,34890,51 +$E,34891,28 +$E,34891,55 +$E,34891,15 +$E,34892,64 +$E,34893,35 +$E,34893,7 +$E,34899,12 +$E,37367,243 +$E,37384,250 +$E,37386,6 +$E,37386,16 +$E,37387,49 +$E,37387,124 +$E,37388,84 +$E,37388,23 +$E,37389,39 +$E,37389,45 +$E,37390,19 +$E,37390,15 +$E,37390,56 +$E,37391,22 +$E,37391,57 +$E,37391,15 +$E,37392,76 +$E,37393,14 +$E,39866,329 +$STOP,214,35114098.52,62004,655,17421,36,14,46 +$START,215,65496 +$E,15,39 +$E,46,51 +$E,53,15 +$E,70,48 +$E,85,44 +$E,101,33 +$E,105,8 +$E,202,25 +$E,257,35 +$E,263,7 +$E,320,12 +$E,351,7 +$E,382,15 +$E,421,12 +$E,484,12 +$E,499,25 +$E,694,24 +$E,698,9 +$E,827,31 +$E,890,15 +$E,898,28 +$E,1007,14 +$E,1053,28 +$E,1296,15 +$E,1320,16 +$E,1359,39 +$E,1632,7 +$E,1944,7 +$E,2437,16 +$E,2560,7 +$E,2577,7 +$E,2596,8 +$E,2616,28 +$E,3553,49 +$E,4137,7 +$E,6007,44 +$E,6011,12 +$E,6013,6 +$E,6053,163 +$E,6055,12 +$E,8507,76 +$E,8507,6 +$E,8511,30 +$E,8513,8 +$E,8515,15 +$E,8516,7 +$E,8553,150 +$E,11007,90 +$E,11007,7 +$E,11010,7 +$E,11011,62 +$E,11011,8 +$E,11012,8 +$E,11013,20 +$E,11014,13 +$E,11016,28 +$E,11016,12 +$E,11053,184 +$E,13507,101 +$E,13507,10 +$E,13510,6 +$E,13511,79 +$E,13511,15 +$E,13512,7 +$E,13513,22 +$E,13516,30 +$E,13516,9 +$E,13546,17 +$E,13553,174 +$E,13555,12 +$E,13819,96 +$E,13820,11 +$E,13823,7 +$E,13823,88 +$E,13824,8 +$E,13825,7 +$E,13826,39 +$E,13826,8 +$E,13827,15 +$E,13828,16 +$E,13829,4 +$E,14132,47 +$E,14135,7 +$E,14135,12 +$E,14136,86 +$E,14137,7 +$E,14138,45 +$E,14139,13 +$E,14139,6 +$E,14140,39 +$E,14765,4 +$E,16007,142 +$E,16009,4 +$E,16011,24 +$E,16011,24 +$E,16012,22 +$E,16013,24 +$E,16014,7 +$E,16015,35 +$E,16016,6 +$E,16053,268 +$E,18507,146 +$E,18507,15 +$E,18509,6 +$E,18510,12 +$E,18510,7 +$E,18511,12 +$E,18511,15 +$E,18512,16 +$E,18513,38 +$E,18514,12 +$E,18515,24 +$E,18516,15 +$E,18553,304 +$E,18555,12 +$E,21007,92 +$E,21007,14 +$E,21010,11 +$E,21011,105 +$E,21012,9 +$E,21012,7 +$E,21013,31 +$E,21014,16 +$E,21014,20 +$E,21015,32 +$E,21016,19 +$E,21046,49 +$E,21049,13 +$E,21053,222 +$E,21055,25 +$E,21056,7 +$E,23507,100 +$E,23510,8 +$E,23511,120 +$E,23512,17 +$E,23513,47 +$E,23514,12 +$E,23514,24 +$E,23515,45 +$E,23516,11 +$E,23553,327 +$E,23555,15 +$E,23671,5 +$E,26007,159 +$E,26007,19 +$E,26009,7 +$E,26010,14 +$E,26010,7 +$E,26011,19 +$E,26011,16 +$E,26012,6 +$E,26013,24 +$E,26014,7 +$E,26014,12 +$E,26015,11 +$E,26016,23 +$E,26016,7 +$E,26053,361 +$E,26055,12 +$E,26108,214 +$E,26111,28 +$E,26112,8 +$E,26112,7 +$E,26113,15 +$E,26113,7 +$E,26114,24 +$E,26114,5 +$E,26115,12 +$E,26115,10 +$E,26116,7 +$E,26319,110 +$E,26320,6 +$E,26322,7 +$E,26323,14 +$E,26323,120 +$E,26324,7 +$E,26324,7 +$E,26325,34 +$E,26326,7 +$E,26327,24 +$E,26328,35 +$E,26329,9 +$E,26632,103 +$E,26635,7 +$E,26636,134 +$E,26636,11 +$E,26637,7 +$E,26638,49 +$E,26639,15 +$E,26639,23 +$E,26640,21 +$E,26641,31 +$E,27382,6 +$E,28507,96 +$E,28507,12 +$E,28511,135 +$E,28511,15 +$E,28513,56 +$E,28514,9 +$E,28514,25 +$E,28515,41 +$E,28546,38 +$E,28553,224 +$E,28555,30 +$E,30187,6 +$E,30515,151 +$E,30517,17 +$E,30517,12 +$E,30518,12 +$E,30518,8 +$E,30519,30 +$E,30520,20 +$E,30521,27 +$E,30522,8 +$E,30523,19 +$E,30577,136 +$E,30578,30 +$E,30579,24 +$E,30580,43 +$E,30580,8 +$E,30581,25 +$E,30583,12 +$E,30583,7 +$E,30583,24 +$E,30584,14 +$E,30586,24 +$E,30586,8 +$E,30640,115 +$E,30645,6 +$E,30648,8 +$E,30663,39 +$E,30663,7 +$E,30667,9 +$E,30670,7 +$E,30671,8 +$E,30677,7 +$E,30694,81 +$E,30698,35 +$E,30699,14 +$E,30700,22 +$E,30703,15 +$E,30733,129 +$E,30734,71 +$E,30736,46 +$E,30737,12 +$E,30738,70 +$E,30738,7 +$E,30739,27 +$E,30739,31 +$E,30740,19 +$E,30741,16 +$E,30742,7 +$E,31007,65 +$E,31011,28 +$E,31013,15 +$E,31014,15 +$E,31016,7 +$E,31053,303 +$E,31055,12 +$E,31296,88 +$E,31298,5 +$E,31302,11 +$E,31304,7 +$E,31319,96 +$E,31323,9 +$E,31323,10 +$E,31324,6 +$E,31324,6 +$E,31325,24 +$E,31326,8 +$E,31327,7 +$E,31328,15 +$E,31374,197 +$E,31374,196 +$E,31376,23 +$E,31377,56 +$E,31378,39 +$E,31378,15 +$E,31379,71 +$E,31380,19 +$E,31380,9 +$E,31380,30 +$E,31381,48 +$E,31382,41 +$E,31383,20 +$E,31437,50 +$E,31444,14 +$E,31452,76 +$E,31456,12 +$E,31458,6 +$E,31460,44 +$E,31460,41 +$E,31465,12 +$E,31476,7 +$E,31515,300 +$E,31515,28 +$E,31516,8 +$E,31517,100 +$E,31518,30 +$STOP,215,35114110.48,24043,662,17644,52,8,75 +$START,216,27746 +$E,2731,534 +$E,2732,35 +$E,2733,7 +$E,5223,49 +$E,5227,12 +$E,5229,14 +$E,5231,423 +$E,5232,54 +$E,5233,28 +$E,7730,367 +$E,7732,22 +$E,7733,7 +$E,10230,423 +$E,10232,31 +$E,10233,4 +$E,10379,159 +$E,10380,35 +$E,10381,17 +$E,10383,63 +$E,10384,65 +$E,10384,36 +$E,10385,28 +$E,10386,56 +$E,10387,30 +$E,10388,23 +$E,12723,24 +$E,12728,7 +$E,12730,371 +$E,12732,35 +$E,12732,28 +$E,15230,505 +$E,15232,32 +$E,15233,8 +$E,17684,12 +$E,17730,591 +$E,17732,39 +$E,17732,25 +$E,17733,5 +$E,17879,254 +$E,17880,43 +$E,17882,58 +$E,17883,38 +$E,17883,62 +$E,17884,62 +$E,17884,30 +$E,17885,40 +$E,17886,39 +$E,17887,47 +$E,17888,18 +$E,18817,268 +$E,18817,126 +$E,18819,27 +$E,18819,25 +$E,18820,96 +$E,18820,33 +$E,18821,63 +$E,18822,35 +$E,18822,63 +$E,18823,71 +$E,18823,20 +$E,18824,44 +$E,18825,48 +$E,18826,9 +$E,18934,7 +$E,18980,558 +$E,18982,31 +$E,18983,6 +$E,19286,279 +$E,19286,52 +$E,19287,67 +$E,19288,18 +$E,19289,83 +$E,19289,22 +$E,19290,97 +$E,19291,76 +$E,19291,67 +$E,19292,38 +$E,19293,72 +$E,19294,57 +$E,19294,40 +$E,19295,16 +$E,19629,84 +$E,19630,6 +$E,19638,12 +$E,19754,324 +$E,19755,96 +$E,19756,49 +$E,19758,30 +$E,19759,137 +$E,19759,51 +$E,19760,76 +$E,19760,44 +$E,19761,102 +$E,19761,79 +$E,19763,63 +$E,19763,54 +$E,19764,8 +$E,20230,504 +$E,20232,19 +$E,20233,7 +$E,22730,287 +$E,22732,12 +$E,22732,7 +$E,22895,166 +$E,22895,38 +$E,22897,35 +$E,22897,15 +$E,22898,22 +$E,22899,14 +$E,22899,46 +$E,22900,47 +$E,22900,49 +$E,22901,41 +$E,22901,30 +$E,22903,40 +$E,22903,33 +$E,23980,396 +$E,23982,15 +$E,24129,142 +$E,24130,124 +$E,24130,24 +$E,24131,24 +$E,24132,28 +$E,24133,9 +$E,24134,52 +$E,24134,15 +$E,24135,6 +$E,24136,22 +$E,24137,24 +$E,24138,31 +$E,24138,7 +$E,24442,153 +$E,24442,119 +$E,24444,28 +$E,24445,54 +$E,24446,67 +$E,24447,48 +$E,24447,9 +$E,24448,12 +$E,24448,48 +$E,24449,47 +$E,24450,30 +$E,24451,6 +$E,25230,270 +$E,25232,15 +$E,27723,24 +$E,27730,290 +$E,27732,20 +$E,27732,7 +$E,27879,136 +$E,27880,16 +$E,27881,31 +$E,27882,33 +$E,27882,22 +$E,27883,15 +$E,27884,12 +$E,27885,24 +$E,27886,35 +$E,27887,15 +$E,27888,11 +$E,30379,143 +$E,30382,10 +$E,30382,40 +$E,30384,56 +$E,30385,28 +$E,30385,27 +$E,30386,28 +$E,30386,16 +$E,30387,23 +$E,30442,151 +$E,30442,47 +$E,30444,15 +$E,30446,6 +$E,30447,31 +$E,30448,31 +$E,30448,7 +$E,30450,22 +$E,30450,7 +$E,32730,275 +$E,32732,7 +$E,35230,323 +$E,35232,22 +$E,37730,240 +$E,40229,366 +$E,40231,28 +$E,40238,59 +$E,40239,14 +$E,40243,15 +$E,40378,195 +$E,40379,72 +$E,40380,9 +$E,40380,15 +$E,40381,26 +$E,40381,6 +$E,40382,96 +$E,40383,6 +$E,40383,42 +$E,40384,12 +$E,40384,48 +$E,40385,23 +$E,40385,35 +$E,40386,30 +$E,40387,15 +$E,40387,6 +$E,41472,161 +$E,41473,26 +$E,41474,24 +$E,41475,25 +$E,41475,92 +$E,41476,7 +$E,41476,28 +$E,41477,31 +$E,41478,76 +$E,41478,12 +$E,41479,24 +$E,41480,43 +$E,41480,31 +$E,41481,9 +$E,41534,904 +$E,41537,102 +$E,41537,80 +$E,41537,56 +$E,41538,83 +$E,41539,208 +$E,41539,14 +$E,41540,12 +$E,41541,84 +$E,41541,204 +$E,41542,210 +$E,41544,9 +$E,42097,1311 +$E,42100,166 +$E,42100,115 +$E,42101,83 +$E,42101,88 +$E,42102,179 +$E,42102,12 +$E,42103,7 +$E,42103,121 +$E,42104,41 +$E,42104,14 +$E,42105,259 +$E,42108,7 +$E,42159,1440 +$E,42162,124 +$E,42163,93 +$E,42163,111 +$E,42164,71 +$E,42165,216 +$E,42165,47 +$E,42166,112 +$E,42166,121 +$E,42168,288 +$E,42170,20 +$E,42222,1187 +$E,42222,113 +$E,42224,70 +$E,42225,204 +$E,42226,99 +$E,42226,88 +$E,42227,252 +$E,42227,177 +$E,42228,108 +$E,42228,24 +$E,42228,272 +$E,42230,301 +$E,42232,57 +$E,42419,6 +$E,42729,560 +$E,42731,41 +$E,42732,12 +$E,45229,415 +$E,45231,23 +$E,47729,488 +$E,47731,35 +$E,47732,9 +$E,50229,564 +$E,50231,38 +$E,50231,19 +$E,52729,422 +$E,52731,28 +$E,52731,12 +$E,52753,31 +$E,52757,6 +$E,53027,1222 +$E,53027,92 +$E,53028,12 +$E,53029,124 +$E,53030,14 +$E,53031,55 +$E,53031,167 +$E,53032,103 +$E,53033,56 +$E,53034,179 +$E,53035,291 +$E,53037,19 +$E,53339,1220 +$E,53340,130 +$E,53342,195 +$STOP,216,35114122.43,53976,457,17349,24,4,32 +$START,217,57669 +$E,231,6 +$E,251,8 +$E,506,4 +$E,1070,7 +$E,1394,4 +$E,1702,7 +$E,1754,6 +$E,2263,67 +$E,2267,24 +$E,2268,19 +$E,2268,28 +$E,2269,15 +$E,2271,504 +$E,2272,51 +$E,2272,48 +$E,2279,6 +$E,2366,4 +$E,2426,8 +$E,2512,7 +$E,2519,6 +$E,2537,19 +$E,2773,11 +$E,2849,20 +$E,2853,7 +$E,2855,6 +$E,2859,6 +$E,2904,9 +$E,2929,7 +$E,3005,7 +$E,3028,6 +$E,3046,9 +$E,3368,5 +$E,3507,7 +$E,3511,7 +$E,3604,6 +$E,3633,7 +$E,3674,6 +$E,3678,4 +$E,4246,7 +$E,4398,7 +$E,4729,4 +$E,4738,15 +$E,4771,658 +$E,4772,56 +$E,4773,19 +$E,4773,8 +$E,4825,9 +$E,5033,6 +$E,5401,6 +$E,5557,7 +$E,5603,7 +$E,6091,8 +$E,6177,4 +$E,6345,4 +$E,6588,6 +$E,6661,7 +$E,6888,7 +$E,6926,7 +$E,6930,4 +$E,7068,6 +$E,7136,4 +$E,7170,6 +$E,7224,9 +$E,7271,496 +$E,7272,24 +$E,7273,15 +$E,7321,6 +$E,7374,8 +$E,7492,12 +$E,7624,7 +$E,7946,4 +$E,8032,6 +$E,8117,7 +$E,8150,6 +$E,8245,7 +$E,8400,7 +$E,8653,7 +$E,8726,6 +$E,8730,7 +$E,8824,7 +$E,9247,4 +$E,9346,9 +$E,9511,7 +$E,9637,4 +$E,9724,25 +$E,9763,127 +$E,9764,28 +$E,9766,36 +$E,9766,6 +$E,9767,60 +$E,9767,60 +$E,9767,30 +$E,9769,9 +$E,9770,24 +$E,9770,7 +$E,9771,511 +$E,9772,67 +$E,9773,48 +$E,9773,14 +$E,9775,7 +$E,9787,9 +$E,9940,7 +$E,10096,6 +$E,10116,7 +$E,10149,6 +$E,10330,6 +$E,10683,4 +$E,11328,7 +$E,11346,9 +$E,11386,4 +$E,11555,4 +$E,11658,4 +$E,11819,7 +$E,11836,7 +$E,12155,4 +$E,12196,10 +$E,12224,24 +$E,12228,8 +$E,12233,9 +$E,12249,6 +$E,12271,996 +$E,12272,73 +$E,12273,33 +$E,12355,6 +$E,12842,7 +$E,13294,4 +$E,13596,12 +$E,13967,7 +$E,13975,4 +$E,14289,20 +$E,14359,9 +$E,14527,6 +$E,14680,7 +$E,14692,6 +$E,14724,44 +$E,14730,14 +$E,14733,7 +$E,14751,10 +$E,14771,737 +$E,14772,43 +$E,14773,38 +$E,15266,9 +$E,15286,6 +$E,15294,6 +$E,15453,11 +$E,16474,14 +$E,16478,7 +$E,16486,7 +$E,16548,7 +$E,16598,6 +$E,16835,4 +$E,17000,9 +$E,17224,64 +$E,17228,12 +$E,17229,7 +$E,17230,8 +$E,17232,6 +$E,17233,8 +$E,17263,152 +$E,17264,33 +$E,17265,7 +$E,17265,17 +$E,17267,48 +$E,17267,31 +$E,17268,44 +$E,17269,31 +$E,17269,7 +$E,17271,895 +$E,17272,108 +$E,17273,11 +$E,17292,7 +$E,17331,14 +$E,17340,4 +$E,17482,7 +$E,17490,6 +$E,17510,7 +$E,17513,64 +$E,17537,31 +$E,17537,23 +$E,17541,30 +$E,17542,6 +$E,17543,7 +$E,17545,7 +$E,17546,15 +$E,17576,487 +$E,17577,24 +$E,17577,24 +$E,17578,159 +$E,17579,71 +$E,17580,56 +$E,17581,57 +$E,17581,72 +$E,17582,9 +$E,17582,271 +$E,17583,78 +$E,17584,91 +$E,17586,15 +$E,17638,424 +$E,17639,22 +$E,17640,60 +$E,17640,48 +$E,17641,15 +$E,17642,86 +$E,17644,131 +$E,17644,115 +$E,17645,44 +$E,17645,7 +$E,17645,62 +$E,17647,54 +$E,17647,31 +$E,17648,16 +$E,17662,39 +$E,17665,20 +$E,17666,28 +$E,17670,6 +$E,17701,49 +$E,17739,6 +$E,17786,9 +$E,17802,6 +$E,17826,56 +$E,17849,56 +$E,17850,6 +$E,17853,4 +$E,17854,5 +$E,17855,12 +$E,17888,532 +$E,17889,6 +$E,17891,48 +$E,17892,15 +$E,17892,64 +$E,17892,168 +$E,17893,25 +$E,17893,22 +$E,17894,28 +$E,17895,38 +$E,17896,112 +$E,17897,51 +$E,17911,7 +$E,17985,12 +$E,18020,7 +$E,18097,7 +$E,18154,5 +$E,18162,60 +$E,18162,12 +$E,18166,23 +$E,18168,4 +$E,18170,7 +$E,18304,6 +$E,18338,6 +$E,18374,6 +$E,18394,8 +$E,18409,4 +$E,18474,59 +$E,18478,22 +$E,18485,16 +$E,18492,7 +$E,18521,660 +$E,18522,41 +$E,18523,24 +$E,18524,7 +$E,18561,6 +$E,18584,5 +$E,18755,7 +$E,19120,6 +$E,19473,6 +$E,19674,7 +$E,19692,6 +$E,19724,44 +$E,19728,10 +$E,19733,30 +$E,19755,35 +$E,19759,14 +$E,19769,12 +$E,19771,816 +$E,19772,64 +$E,19773,31 +$E,19774,8 +$E,19797,7 +$E,19885,8 +$E,19902,7 +$E,20013,50 +$E,20037,24 +$E,20045,15 +$E,20076,513 +$E,20077,23 +$E,20078,40 +$E,20079,187 +$E,20079,16 +$E,20080,81 +$E,20080,96 +$E,20081,24 +$E,20081,68 +$E,20082,131 +$E,20084,110 +$E,20084,79 +$E,20119,7 +$E,20123,7 +$E,20197,6 +$E,20205,5 +$STOP,217,35114134.65,15700,627,14515,181,29,192 +$START,218,19079 +$E,2288,495 +$E,2289,16 +$E,2290,20 +$E,2785,4 +$E,4781,48 +$E,4783,6 +$E,4785,15 +$E,4785,12 +$E,4788,283 +$E,4789,31 +$E,4790,8 +$E,5093,223 +$E,5096,67 +$E,5096,13 +$E,5097,17 +$E,5098,35 +$E,5099,39 +$E,5101,44 +$E,5102,22 +$E,7288,242 +$E,9788,280 +$E,9789,14 +$E,9790,12 +$E,10202,51 +$E,10205,8 +$E,10209,4 +$E,10210,6 +$E,12288,335 +$E,12291,6 +$E,14788,398 +$E,14789,24 +$E,17288,214 +$E,17289,8 +$E,17290,7 +$E,19781,15 +$E,19788,176 +$E,19789,15 +$E,19790,7 +$E,20718,209 +$E,20719,14 +$E,20719,7 +$E,20721,7 +$E,20721,12 +$E,20722,12 +$E,20722,12 +$E,20723,12 +$E,20723,24 +$E,20724,39 +$E,20726,32 +$E,20727,4 +$E,21030,216 +$E,21033,7 +$E,21033,60 +$E,21034,14 +$E,21034,24 +$E,21036,6 +$E,21037,22 +$E,21038,70 +$E,21039,31 +$E,21040,15 +$E,22288,334 +$E,22289,14 +$E,22290,12 +$E,24424,6 +$E,24788,187 +$E,27288,184 +$E,27289,7 +$E,29806,6 +$E,30093,184 +$E,30096,60 +$E,30097,33 +$E,30098,6 +$E,30099,30 +$E,30101,28 +$E,30102,7 +$E,30155,151 +$E,30156,20 +$E,30158,41 +$E,30160,75 +$E,30162,25 +$E,30162,24 +$E,30163,15 +$E,30164,15 +$E,30718,270 +$E,30721,31 +$E,30721,39 +$E,30723,7 +$E,30723,24 +$E,30724,24 +$E,30725,36 +$E,30725,62 +$E,30726,46 +$E,30727,36 +$E,30780,284 +$E,30781,24 +$E,30783,31 +$E,30784,72 +$E,30785,64 +$E,30786,12 +$E,30786,8 +$E,30787,44 +$E,30788,56 +$E,30789,39 +$E,31038,284 +$E,31040,9 +$E,32288,279 +$E,32289,17 +$E,34780,36 +$E,34784,7 +$E,34788,291 +$E,34789,24 +$E,34789,15 +$E,34790,9 +$E,37288,391 +$E,37289,12 +$E,37290,11 +$E,39787,286 +$E,39788,4 +$E,40309,96 +$E,42279,49 +$E,42283,41 +$E,42285,39 +$E,42287,295 +$E,42288,25 +$E,42288,24 +$E,44787,392 +$E,44788,24 +$E,44788,12 +$E,47592,275 +$E,47593,24 +$E,47595,63 +$E,47595,31 +$E,47596,78 +$E,47597,81 +$E,47598,71 +$E,47600,49 +$E,49779,28 +$E,49786,307 +$E,49788,15 +$E,49788,24 +$E,52279,191 +$E,52282,56 +$E,52283,11 +$E,52283,45 +$E,52285,47 +$E,52286,87 +$E,52288,41 +$E,52289,16 +$E,52289,8 +$E,54786,289 +$E,54788,12 +$E,57286,289 +$E,57288,9 +$E,57288,15 +$E,59786,225 +$E,59788,8 +$E,62286,259 +$E,62288,7 +$E,64786,399 +$E,64788,28 +$E,64788,13 +$E,67279,41 +$E,67283,5 +$E,67286,227 +$E,67288,22 +$E,69786,355 +$E,69788,15 +$E,71895,5 +$E,72286,499 +$E,72288,24 +$E,72288,24 +$E,72418,6 +$E,74779,28 +$E,74782,7 +$E,74786,248 +$E,74788,8 +$E,74788,12 +$E,77286,346 +$E,77288,7 +$STOP,218,35114146.49,36732,179,16129,11,1,25 +$START,219,38968 +$E,1862,515 +$E,1864,28 +$E,1864,22 +$E,4355,38 +$E,4362,248 +$E,4364,19 +$E,5003,7 +$E,6862,350 +$E,6864,15 +$E,6864,14 +$E,9355,257 +$E,9356,7 +$E,9357,7 +$E,9358,25 +$E,9359,17 +$E,9360,49 +$E,9360,15 +$E,9361,76 +$E,9362,112 +$E,9363,48 +$E,9364,39 +$E,9365,7 +$E,10818,6 +$E,11855,28 +$E,11860,8 +$E,11862,256 +$E,11863,7 +$E,11864,14 +$E,12167,309 +$E,12168,15 +$E,12170,12 +$E,12170,94 +$E,12171,37 +$E,12171,28 +$E,12171,38 +$E,12172,39 +$E,12174,73 +$E,12175,48 +$E,12177,6 +$E,14362,216 +$E,16862,312 +$E,16864,12 +$E,19355,31 +$E,19357,7 +$E,19362,252 +$E,19364,19 +$E,19364,7 +$E,21862,342 +$E,21864,22 +$E,24362,399 +$E,24364,28 +$E,26862,302 +$E,26863,14 +$E,26870,61 +$E,26872,12 +$E,26876,12 +$E,26876,6 +$E,29362,216 +$E,29363,15 +$E,31862,312 +$E,31863,6 +$E,34362,153 +$E,34364,4 +$E,36862,344 +$E,36863,17 +$E,36864,7 +$E,39361,399 +$E,39362,24 +$E,39363,15 +$E,41861,294 +$E,41862,8 +$E,41963,88 +$E,41966,7 +$E,41968,15 +$E,41972,7 +$E,42558,49 +$E,43473,4 +$E,44361,447 +$E,44362,31 +$E,46861,508 +$E,46862,28 +$E,46863,7 +$E,49361,499 +$E,49362,31 +$E,51853,63 +$E,51854,7 +$E,51857,12 +$E,51861,444 +$E,51862,48 +$E,51863,22 +$E,54361,286 +$E,56861,331 +$E,56862,12 +$E,56863,4 +$E,59354,24 +$E,59357,4 +$E,59361,355 +$E,59362,24 +$E,59363,19 +$E,61861,283 +$E,61862,19 +$E,64361,349 +$E,64362,11 +$E,66853,50 +$E,66856,4 +$E,66857,11 +$E,66861,337 +$E,66862,26 +$E,66863,7 +$E,69361,300 +$E,69362,12 +$E,71861,352 +$E,71862,12 +$E,74353,22 +$E,74361,280 +$E,74362,31 +$E,74362,12 +$E,76861,207 +$E,76862,14 +$STOP,219,35114157.42,54159,119,16748,19,2,12 +$START,220,55876 +$E,1255,7 +$E,9496,256 +$E,9499,6 +$E,9505,48 +$E,9730,175 +$E,9731,35 +$E,9732,20 +$E,9734,23 +$E,9735,9 +$E,9736,38 +$E,9739,49 +$E,9740,18 +$E,19574,198 +$E,19579,12 +$E,19580,27 +$E,19581,12 +$E,19583,40 +$E,19583,14 +$E,19793,28 +$E,19794,25 +$E,19795,9 +$E,19796,31 +$E,19797,15 +$E,19798,17 +$E,19800,30 +$E,20027,79 +$E,20027,70 +$E,20029,24 +$E,20030,32 +$E,20030,54 +$E,20032,8 +$E,20032,46 +$E,20033,17 +$E,20034,12 +$E,20034,46 +$E,20035,30 +$E,20036,15 +$E,20207,52 +$E,20209,7 +$E,20211,28 +$E,20212,9 +$E,20213,20 +$E,20213,7 +$E,20214,19 +$E,20277,323 +$E,20278,13 +$E,20293,30 +$E,20297,18 +$E,20375,14 +$E,20433,19 +$E,20436,14 +$E,20437,7 +$E,20438,12 +$E,21527,268 +$E,21528,9 +$E,22090,103 +$E,22092,14 +$E,22095,28 +$E,22095,7 +$E,22096,7 +$E,22097,19 +$E,22238,72 +$E,22238,12 +$E,22239,15 +$E,22240,24 +$E,22243,9 +$E,22245,7 +$E,22246,14 +$E,22777,217 +$E,22779,4 +$E,24027,312 +$E,24028,16 +$E,24029,9 +$E,24074,22 +$E,24076,6 +$E,26527,244 +$E,26528,10 +$E,26621,74 +$E,26621,12 +$E,26623,15 +$E,26624,12 +$E,26625,39 +$E,26625,7 +$E,26626,15 +$E,26627,12 +$E,26628,49 +$E,26628,30 +$E,26629,12 +$E,26652,31 +$E,26657,4 +$E,29027,271 +$E,29137,39 +$E,29137,12 +$E,29139,18 +$E,29139,24 +$E,29139,6 +$E,29140,24 +$E,29141,9 +$E,29141,19 +$E,29143,41 +$E,30371,122 +$E,30371,23 +$E,30372,15 +$E,30375,12 +$E,30376,30 +$E,30377,6 +$E,30378,15 +$E,30378,41 +$E,30379,9 +$E,30390,6 +$E,30519,77 +$E,30521,24 +$E,30523,48 +$E,30525,20 +$E,30526,23 +$E,30527,14 +$E,30621,7 +$E,30676,112 +$E,30678,9 +$E,30679,9 +$E,30680,14 +$E,30681,30 +$E,30683,14 +$E,30684,14 +$E,30738,8 +$E,30941,18 +$E,30945,8 +$E,30950,6 +$E,30996,115 +$E,30996,7 +$E,30997,16 +$E,30998,24 +$E,31000,9 +$E,31002,34 +$E,31003,28 +$E,31003,46 +$E,31254,24 +$E,31258,7 +$E,31262,4 +$E,31527,499 +$E,31528,47 +$E,31529,24 +$E,31566,31 +$E,31570,19 +$E,31777,145 +$E,31778,16 +$E,31779,35 +$E,31780,14 +$E,31780,12 +$E,31781,12 +$E,31781,38 +$E,31781,39 +$E,31784,47 +$E,31784,31 +$E,31786,17 +$E,31840,152 +$E,31840,21 +$E,31842,56 +$E,31843,64 +$E,31844,59 +$E,31845,44 +$E,31846,47 +$E,31846,41 +$E,31847,17 +$E,31848,34 +$E,31879,40 +$E,31879,8 +$E,31883,7 +$E,32191,45 +$E,32192,7 +$E,32195,10 +$E,32197,7 +$E,32199,7 +$E,32200,11 +$E,32504,48 +$E,32504,19 +$E,32507,8 +$E,32508,31 +$E,32510,24 +$E,32511,19 +$E,32512,8 +$E,34027,417 +$E,34028,30 +$E,34066,39 +$E,34066,13 +$E,34070,13 +$E,34070,12 +$E,34072,8 +$E,34073,15 +$E,34074,15 +$E,34075,14 +$E,34075,7 +$E,36527,443 +$E,36528,19 +$E,36529,7 +$E,36558,152 +$E,36561,7 +$E,36563,19 +$E,36563,5 +$E,36564,7 +$E,36564,12 +$E,36564,11 +$E,36566,39 +$E,36567,6 +$E,36569,5 +$E,36569,12 +$E,36570,14 +$E,36571,15 +$E,36572,7 +$E,36573,7 +$E,36574,6 +$E,36575,12 +$E,36575,38 +$E,36576,19 +$E,36576,15 +$E,36577,6 +$E,36578,14 +$E,36578,24 +$E,36579,21 +$E,36579,24 +$E,36581,30 +$E,36582,5 +$E,36879,96 +$E,36879,28 +$E,36883,12 +$E,36884,11 +$E,36884,14 +$E,36885,11 +$E,36886,17 +$E,36887,24 +$E,37191,99 +$E,37191,31 +$E,37194,15 +$E,37195,14 +$E,37195,15 +$E,37196,16 +$E,37197,18 +$E,37198,12 +$E,37200,19 +$E,37201,9 +$E,39027,551 +$E,39028,24 +$E,39029,7 +$E,39065,143 +$E,39065,57 +$E,39068,9 +$E,39068,24 +$E,39069,7 +$E,39070,7 +$E,39070,19 +$E,39071,12 +$E,39071,15 +$E,39072,15 +$E,39072,19 +$E,39074,31 +$E,39075,4 +$E,41525,489 +$E,41527,24 +$E,41565,105 +$E,41565,41 +$E,41568,4 +$E,41568,15 +$E,41569,27 +$E,41570,9 +$E,41571,9 +$E,41571,12 +$E,41573,24 +$E,41574,25 +$E,41574,4 +$E,44025,430 +$E,44027,15 +$E,44028,12 +$E,44065,55 +$E,44065,28 +$E,44068,6 +$E,44069,27 +$E,44071,7 +$E,44073,14 +$E,44074,23 +$E,44075,12 +$E,44075,4 +$E,44078,4 +$E,44080,7 +$E,45174,4 +$E,46525,395 +$E,46527,15 +$E,46565,27 +$E,46569,8 +$E,49025,249 +$E,49027,6 +$E,49065,31 +$E,49065,15 +$E,49069,6 +$E,51525,306 +$E,51527,19 +$E,51557,155 +$E,51560,7 +$E,51560,6 +$E,51562,18 +$STOP,220,35114167.97,14611,954,16161,42,6,50 +$START,221,18405 +$E,425,662 +$E,426,30 +$E,427,48 +$E,427,12 +$E,428,12 +$E,449,152 +$E,452,12 +$E,454,35 +$E,455,12 +$E,457,204 +$E,457,56 +$E,457,9 +$E,459,8 +$E,459,16 +$E,460,14 +$E,461,23 +$E,462,9 +$E,463,26 +$E,464,17 +$E,465,14 +$E,466,10 +$E,467,7 +$E,468,27 +$E,468,12 +$E,469,22 +$E,470,28 +$E,470,19 +$E,471,15 +$E,472,24 +$E,473,19 +$E,474,28 +$E,519,233 +$E,520,40 +$E,521,32 +$E,521,39 +$E,522,23 +$E,523,67 +$E,524,14 +$E,524,60 +$E,525,39 +$E,525,11 +$E,526,115 +$E,528,35 +$E,529,14 +$E,777,152 +$E,777,56 +$E,780,6 +$E,780,22 +$E,781,27 +$E,782,14 +$E,782,27 +$E,783,19 +$E,783,15 +$E,784,23 +$E,786,19 +$E,1090,153 +$E,1090,57 +$E,1092,11 +$E,1093,23 +$E,1094,28 +$E,1094,7 +$E,1095,23 +$E,1095,32 +$E,1096,19 +$E,1097,14 +$E,1098,38 +$E,1099,7 +$E,2925,796 +$E,2926,48 +$E,2927,22 +$E,2965,124 +$E,2965,44 +$E,2967,12 +$E,2968,7 +$E,2969,15 +$E,2970,14 +$E,2970,22 +$E,2971,15 +$E,2972,8 +$E,2973,15 +$E,2974,8 +$E,4288,7 +$E,5425,655 +$E,5426,47 +$E,5427,15 +$E,5465,161 +$E,5465,51 +$E,5467,7 +$E,5468,23 +$E,5468,6 +$E,5469,22 +$E,5469,10 +$E,5470,15 +$E,5470,19 +$E,5471,31 +$E,5472,12 +$E,5473,11 +$E,5474,72 +$E,5474,48 +$E,5475,56 +$E,5475,31 +$E,5476,25 +$E,5477,39 +$E,5477,59 +$E,5478,56 +$E,5478,12 +$E,5479,63 +$E,5481,12 +$E,5481,16 +$E,6747,12 +$E,6993,7 +$E,7205,6 +$E,7925,807 +$E,7926,56 +$E,7927,35 +$E,7965,199 +$E,7965,92 +$E,7967,7 +$E,7968,38 +$E,7968,29 +$E,7969,30 +$E,7969,15 +$E,7970,31 +$E,7970,31 +$E,7971,32 +$E,7972,35 +$E,7973,56 +$E,7974,23 +$E,10425,1144 +$E,10427,92 +$E,10427,31 +$E,10465,263 +$E,10465,112 +$E,10467,12 +$E,10467,7 +$E,10468,40 +$E,10468,24 +$E,10469,48 +$E,10469,39 +$E,10470,35 +$E,10470,46 +$E,10471,48 +$E,10471,74 +$E,10471,31 +$E,10472,33 +$E,10473,63 +$E,11248,6 +$E,11546,8 +$E,12925,739 +$E,12927,60 +$E,12964,190 +$E,12965,79 +$E,12967,17 +$E,12968,33 +$E,12968,20 +$E,12968,41 +$E,12969,48 +$E,12970,35 +$E,12970,33 +$E,12971,24 +$E,12971,43 +$E,12971,9 +$E,12972,30 +$E,12972,38 +$E,12973,28 +$E,12973,79 +$E,12974,56 +$E,12974,56 +$E,12976,24 +$E,12977,48 +$E,12977,48 +$E,12977,46 +$E,12978,19 +$E,12979,44 +$E,12981,24 +$E,15425,975 +$E,15426,71 +$E,15427,19 +$E,15428,6 +$E,15457,195 +$E,15459,7 +$E,15459,9 +$E,15460,12 +$E,15461,24 +$E,15462,15 +$E,15462,14 +$E,15463,12 +$E,15463,49 +$E,15464,12 +$E,15464,16 +$E,15464,9 +$E,15465,73 +$E,15465,12 +$E,15465,31 +$E,15466,7 +$E,15467,18 +$E,15467,12 +$E,15467,39 +$E,15468,24 +$E,15468,39 +$E,15469,24 +$E,15470,39 +$E,15470,31 +$E,15471,24 +$E,15472,35 +$E,15473,55 +$E,15777,204 +$E,15777,79 +$E,15779,7 +$E,15780,31 +$E,15780,12 +$E,15781,38 +$E,15781,52 +$E,15782,15 +$E,15782,28 +$E,15783,19 +$E,15783,28 +$E,15783,51 +$E,15784,12 +$E,15784,16 +$E,15786,46 +$E,15786,12 +$E,16089,207 +$E,16090,79 +$E,16092,10 +$E,16092,35 +$E,16093,7 +$E,16093,31 +$E,16094,51 +$E,16094,22 +$E,16095,24 +$E,16095,31 +$E,16096,31 +$E,16096,11 +$E,16097,31 +$E,16098,47 +$E,16099,23 +$E,17925,1144 +$E,17927,96 +$E,17927,28 +$E,17928,12 +$E,17964,286 +$E,17965,112 +$E,17967,8 +$E,17967,7 +$E,17967,60 +$E,17968,32 +$E,17968,44 +$E,17969,35 +$E,17970,39 +$E,17970,49 +$E,17971,49 +$E,17971,12 +$E,17972,54 +$E,17973,76 +$E,17974,22 +$E,17975,9 +$E,20425,1120 +$E,20426,87 +$E,20428,15 +$E,20464,263 +$E,20465,97 +$E,20467,25 +$E,20467,59 +$E,20468,23 +$E,20468,60 +$E,20469,59 +$E,20469,15 +$E,20470,43 +$E,20470,39 +$E,20471,35 +$E,20471,20 +$E,20472,38 +$E,20473,24 +$E,20473,40 +$E,20473,96 +$E,20474,67 +$E,20474,63 +$E,20475,7 +$E,20475,38 +$E,20476,11 +$E,20477,56 +$E,20477,52 +$E,20477,63 +$E,20478,17 +$E,20479,82 +$E,20481,35 +$E,20481,15 +$E,22925,1031 +$E,22926,80 +$E,22927,63 +$E,22928,15 +$E,22965,184 +$E,22967,19 +$E,22967,35 +$E,22968,20 +$E,22968,38 +$E,22969,17 +$E,22970,19 +$STOP,221,35114179.95,41948,862,16779,43,3,60 +$START,222,45366 +$E,427,744 +$E,429,55 +$E,430,16 +$E,467,68 +$E,467,31 +$E,471,35 +$E,473,14 +$E,474,9 +$E,474,18 +$E,475,14 +$E,2357,4 +$E,2927,956 +$E,2929,71 +$E,2929,31 +$E,2951,120 +$E,2954,7 +$E,2956,28 +$E,2958,4 +$E,2959,159 +$E,2959,32 +$E,2960,7 +$E,2963,14 +$E,2964,14 +$E,2965,7 +$E,2965,6 +$E,2968,6 +$E,2970,15 +$E,2971,52 +$E,2971,31 +$E,2972,7 +$E,2973,17 +$E,2973,6 +$E,2974,7 +$E,2975,16 +$E,2976,7 +$E,3021,271 +$E,3022,135 +$E,3023,93 +$E,3024,35 +$E,3024,63 +$E,3024,26 +$E,3025,88 +$E,3026,71 +$E,3026,166 +$E,3028,67 +$E,3028,92 +$E,3029,152 +$E,3030,64 +$E,3031,39 +$E,3279,76 +$E,3282,6 +$E,3283,51 +$E,3286,12 +$E,3287,9 +$E,3287,24 +$E,3288,17 +$E,3350,94 +$E,3352,7 +$E,3354,12 +$E,3356,5 +$E,3592,56 +$E,3595,5 +$E,3596,28 +$E,3597,7 +$E,3598,4 +$E,3599,14 +$E,3601,15 +$E,3740,59 +$E,3904,39 +$E,3905,19 +$E,3908,14 +$E,3911,9 +$E,3912,15 +$E,3913,9 +$E,4177,819 +$E,4179,59 +$E,4180,15 +$E,4217,48 +$E,4217,6 +$E,4221,27 +$E,4223,7 +$E,4224,15 +$E,4225,14 +$E,5427,1115 +$E,5429,83 +$E,5430,15 +$E,5467,48 +$E,5467,12 +$E,5471,30 +$E,5473,6 +$E,5474,12 +$E,5475,46 +$E,5476,57 +$E,5476,33 +$E,5477,56 +$E,5479,31 +$E,5479,43 +$E,5479,67 +$E,5480,68 +$E,5480,14 +$E,5482,64 +$E,5483,30 +$E,7927,703 +$E,7929,60 +$E,7929,35 +$E,7967,31 +$E,7967,9 +$E,7971,18 +$E,7974,15 +$E,10427,500 +$E,10429,30 +$E,10429,6 +$E,10467,6 +$E,12927,558 +$E,12929,43 +$E,12929,20 +$E,12959,23 +$E,12975,12 +$E,12976,14 +$E,12976,7 +$E,12979,14 +$E,12979,19 +$E,12980,14 +$E,12980,6 +$E,12981,28 +$E,12983,6 +$E,13279,6 +$E,13592,24 +$E,15427,609 +$E,15429,51 +$E,15429,15 +$E,15467,30 +$E,15470,7 +$E,15471,7 +$E,15474,7 +$E,17927,504 +$E,17929,31 +$E,17929,9 +$E,17967,23 +$E,18805,7 +$E,20427,457 +$E,20428,18 +$E,20429,33 +$E,20467,7 +$E,20475,14 +$E,20476,11 +$E,20477,12 +$E,20479,12 +$E,20479,15 +$E,20480,17 +$E,20481,29 +$E,22927,398 +$E,22929,14 +$E,22967,11 +$E,25427,454 +$E,25428,15 +$E,25429,30 +$E,25467,15 +$E,27927,287 +$E,27929,15 +$E,28053,36 +$E,28054,7 +$E,28057,7 +$E,28057,4 +$E,28058,12 +$E,28059,15 +$E,28833,6 +$E,30427,243 +$E,30521,99 +$E,30526,17 +$E,30527,15 +$E,30529,19 +$E,30530,6 +$E,32927,359 +$E,32928,11 +$E,32929,7 +$E,35427,359 +$E,35428,9 +$E,37927,396 +$E,37928,24 +$E,37929,9 +$E,37975,33 +$E,37975,6 +$E,37976,18 +$E,37977,8 +$E,37979,7 +$E,37979,16 +$E,37979,15 +$E,37981,19 +$E,38021,160 +$E,38022,44 +$E,38023,25 +$E,38024,78 +$E,38024,24 +$E,38025,17 +$E,38025,46 +$E,38026,91 +$E,38027,7 +$E,38027,13 +$E,38028,48 +$E,38028,22 +$E,38030,31 +$E,38592,7 +$E,40426,576 +$E,40427,41 +$E,40428,17 +$E,41090,6 +$E,42926,624 +$E,42927,32 +$E,42928,12 +$E,42965,4 +$E,45426,763 +$E,45427,48 +$E,45429,12 +$E,45469,7 +$E,45473,108 +$E,45474,54 +$E,45475,31 +$E,45475,42 +$E,45476,19 +$E,45477,11 +$E,45478,41 +$E,45478,54 +$E,45478,59 +$E,45479,31 +$E,45480,71 +$E,45482,16 +$E,45482,9 +$E,47926,750 +$E,47927,60 +$E,47928,35 +$E,47965,7 +$E,50426,627 +$E,50427,44 +$E,50428,13 +$E,52926,668 +$E,52927,41 +$E,52928,36 +$E,52965,12 +$E,52973,75 +$E,52974,19 +$E,52975,6 +$E,52975,15 +$E,52976,31 +$E,52977,4 +$E,52977,33 +$E,52978,41 +$E,52978,49 +$E,52979,18 +$E,52980,44 +$E,52982,7 +$E,52982,7 +$E,55426,736 +$E,55427,48 +$E,55428,10 +$E,57926,476 +$E,57927,30 +$E,57928,25 +$E,60426,657 +$E,60427,48 +$E,60428,28 +$E,60473,79 +$E,60474,21 +$E,60475,14 +$E,60475,24 +$E,60477,4 +$E,60477,17 +$E,60478,48 +$E,60478,33 +$E,60480,33 +$E,60482,12 +$E,62926,748 +$E,62927,47 +$E,62928,24 +$E,64280,365 +$E,65426,465 +$E,65427,26 +$E,65428,15 +$E,67926,504 +$E,67927,24 +$E,67928,7 +$E,67973,33 +$E,67974,11 +$E,67977,7 +$E,67977,7 +$E,67978,11 +$E,67978,14 +$E,67980,24 +$E,70426,360 +$E,70427,19 +$E,70428,15 +$E,72926,358 +$E,72927,12 +$E,75426,307 +$E,75427,6 +$E,75428,12 +$E,75473,35 +$E,75477,4 +$E,75478,7 +$STOP,222,35114191.79,4118,305,17274,37,3,35 +$START,223,7613 +$E,236,56 +$E,2107,291 +$E,2109,15 +$E,4607,396 +$E,4609,30 +$E,4609,12 +$E,7107,459 +$E,7109,24 +$E,7109,12 +$E,7155,56 +$E,7159,14 +$E,7162,12 +$E,7865,4 +$E,9607,391 +$E,9609,19 +$E,9610,6 +$E,12107,750 +$E,12109,60 +$E,12109,30 +$E,12110,7 +$E,14607,624 +$E,14609,46 +$E,14610,24 +$E,14655,88 +$E,14656,19 +$E,14656,6 +$E,14657,24 +$E,14659,15 +$E,14659,20 +$E,14659,30 +$E,14660,40 +$E,14660,12 +$E,14662,44 +$E,14663,4 +$E,17107,660 +$E,17109,36 +$E,17110,14 +$E,29725,615 +$E,29728,23 +$E,29729,11 +$E,29730,39 +$E,29731,8 +$E,29731,28 +$E,29732,7 +$E,29733,146 +$E,29959,465 +$E,29961,76 +$E,29962,12 +$E,29963,30 +$E,29963,23 +$E,29964,19 +$E,29965,49 +$E,29966,56 +$E,29966,7 +$E,29967,111 +$E,29969,16 +$E,32004,7 +$E,40193,368 +$E,40194,8 +$E,40195,7 +$E,40196,28 +$E,40197,6 +$E,40198,49 +$E,40199,30 +$E,40201,79 +$E,40201,31 +$E,40372,256 +$E,40373,79 +$E,40373,19 +$E,40374,7 +$E,40374,14 +$E,40374,76 +$E,40375,14 +$E,40375,39 +$E,40376,59 +$E,40377,30 +$E,40378,92 +$E,40379,124 +$E,40380,88 +$E,40381,46 +$E,40381,12 +$E,40693,348 +$E,40693,153 +$E,40693,120 +$E,40695,56 +$E,40695,94 +$E,40696,11 +$E,40696,12 +$E,40697,15 +$E,40697,12 +$E,40698,30 +$E,40698,39 +$E,40699,38 +$E,40699,19 +$E,40701,60 +$E,40997,289 +$E,40998,30 +$E,40999,32 +$E,40999,28 +$E,41000,19 +$E,41001,7 +$E,41001,5 +$E,41001,142 +$E,41002,53 +$E,41003,46 +$E,41003,7 +$E,41004,112 +$E,41005,128 +$E,41006,36 +$E,41006,25 +$E,41130,102 +$E,41130,48 +$E,41132,12 +$E,41134,48 +$E,41135,15 +$E,41136,9 +$E,41137,19 +$E,41138,14 +$E,41153,12 +$E,41255,7 +$E,41318,544 +$E,41318,135 +$E,41318,27 +$E,41320,231 +$E,41321,83 +$E,41322,63 +$E,41322,24 +$E,41323,88 +$E,41324,126 +$E,41324,144 +$E,41325,67 +$E,41326,100 +$E,41327,19 +$E,41943,6 +$E,42184,711 +$E,42186,56 +$E,42186,19 +$E,42187,6 +$E,42255,12 +$E,42818,11 +$E,42880,476 +$E,42880,166 +$E,42881,200 +$E,42882,56 +$E,42883,132 +$E,42883,24 +$E,42884,71 +$E,42884,99 +$E,42884,46 +$E,42885,48 +$E,42886,81 +$E,42886,76 +$E,42887,14 +$E,42888,96 +$E,42889,28 +$E,42943,42 +$E,42947,11 +$E,43130,60 +$E,43154,71 +$E,43160,6 +$E,43161,11 +$E,43185,444 +$E,43185,188 +$E,43187,112 +$E,43187,40 +$E,43188,17 +$E,43189,67 +$E,43189,14 +$E,43190,159 +$E,43191,175 +$E,43191,51 +$E,43192,172 +$E,43193,44 +$E,43193,56 +$E,43194,30 +$E,43194,41 +$E,43194,27 +$E,43195,19 +$E,43197,22 +$E,43198,15 +$E,43199,4 +$E,43201,25 +$E,43247,451 +$E,43248,67 +$E,43249,159 +$E,43250,64 +$E,43250,71 +$E,43252,231 +$E,43252,62 +$E,43253,143 +$E,43254,133 +$E,43254,39 +$E,43256,79 +$E,43256,53 +$E,43302,76 +$E,43306,18 +$E,43308,6 +$E,43310,103 +$E,43316,20 +$E,43318,15 +$E,43434,1208 +$E,43436,105 +$E,43436,52 +$E,43437,27 +$E,43443,112 +$E,43446,8 +$E,43451,7 +$E,43497,611 +$E,43498,43 +$E,43499,151 +$E,43499,147 +$E,43500,34 +$E,43501,86 +$E,43501,184 +$E,43502,104 +$E,43502,88 +$E,43503,153 +$E,43503,51 +$E,43504,280 +$E,43504,23 +$E,43505,64 +$E,43506,83 +$E,43506,56 +$E,43506,67 +$E,43507,41 +$E,43507,17 +$E,43508,10 +$E,43509,47 +$E,43510,7 +$E,43510,8 +$E,43511,12 +$E,43512,7 +$E,43514,19 +$E,43817,116 +$E,43818,15 +$E,43820,6 +$E,43822,11 +$E,43823,27 +$E,43824,24 +$E,43824,7 +$E,43825,6 +$E,43826,15 +$E,44130,135 +$E,44130,15 +$E,44132,7 +$E,44133,15 +$E,44134,15 +$E,44134,10 +$E,44135,6 +$E,44136,19 +$E,44137,6 +$E,44138,6 +$E,44684,1743 +$E,44686,151 +$E,44687,33 +$E,47184,2028 +$E,47186,177 +$E,47187,14 +$E,47208,251 +$E,47209,25 +$E,47209,287 +$E,47210,24 +$E,47211,164 +$E,47211,143 +$E,47212,7 +$E,47213,183 +$E,47214,273 +$E,47214,205 +$E,47215,35 +$E,47216,64 +$E,47217,32 +$E,47224,263 +$E,47224,123 +$E,47225,7 +$E,47226,51 +$E,47227,5 +$E,47227,27 +$E,47228,88 +$E,47228,63 +$E,47229,12 +$E,47229,51 +$E,47230,108 +$E,47231,62 +$E,47232,66 +$E,47233,7 +$E,47255,99 +$E,47255,41 +$E,47258,14 +$E,47259,24 +$E,47260,6 +$E,47260,11 +$E,47261,24 +$E,47262,14 +$E,47262,14 +$E,47264,23 +$E,47265,7 +$E,47271,379 +$E,47271,138 +$E,47271,136 +$STOP,223,35114203.74,33449,718,17007,43,8,43 +$START,224,36948 +$E,2314,3062 +$E,2315,279 +$E,2385,60 +$E,2385,10 +$E,2387,6 +$E,2389,19 +$E,2390,4 +$E,2391,8 +$E,2393,12 +$E,4814,2184 +$E,4815,191 +$E,4817,31 +$E,4817,17 +$E,4885,71 +$E,4885,12 +$E,4889,24 +$E,4890,17 +$E,4891,7 +$E,4893,14 +$E,4894,6 +$E,7314,1983 +$E,7315,175 +$E,7317,19 +$E,7338,316 +$E,7340,4 +$E,7340,83 +$E,7340,71 +$E,7341,15 +$E,7341,42 +$E,7342,44 +$E,7343,19 +$E,7343,7 +$E,7343,43 +$E,7344,6 +$E,7345,48 +$E,7346,48 +$E,7384,49 +$E,7389,7 +$E,7389,7 +$E,9814,1871 +$E,9815,159 +$E,9817,24 +$E,9884,31 +$E,9889,14 +$E,9893,4 +$E,10808,6 +$E,12314,1126 +$E,12315,83 +$E,12316,19 +$E,12384,39 +$E,12391,7 +$E,14814,1337 +$E,14815,103 +$E,14817,12 +$E,14838,184 +$E,14840,39 +$E,14840,19 +$E,14841,15 +$E,14841,19 +$E,14842,30 +$E,14843,5 +$E,14843,9 +$E,14845,19 +$E,14846,30 +$E,14846,9 +$E,14884,31 +$E,17314,1255 +$E,17315,103 +$E,17316,24 +$E,21820,4 +$E,24931,502 +$E,24934,46 +$E,24935,32 +$E,24936,11 +$E,24936,34 +$E,24937,20 +$E,24937,23 +$E,24938,12 +$E,24939,125 +$E,24941,15 +$E,25166,417 +$E,25169,6 +$E,25170,16 +$E,25170,40 +$E,25171,31 +$E,25172,48 +$E,25174,96 +$E,25174,56 +$E,33131,105 +$E,47698,24 +$E,48525,9 +$E,48668,7 +$E,50766,4 +$E,55694,7 +$E,56416,7 +$E,60808,4 +$STOP,224,35114215.88,51196,96,16816,9,7,15 +$START,225,52570 +$E,921,6 +$E,13048,419 +$E,13059,75 +$E,13060,28 +$E,17887,56 +$E,28694,398 +$E,28705,58 +$E,28706,17 +$E,36170,4 +$E,37508,6 +$E,39612,7 +$E,43456,96 +$E,43972,6 +$E,44341,431 +$E,44352,76 +$E,44358,419 +$E,44365,10 +$E,44369,79 +$E,44370,7 +$E,45334,7 +$E,60005,167 +$E,60016,28 +$E,68418,7 +$E,72762,6 +$E,75652,423 +$E,75661,4 +$E,75663,78 +$E,75664,24 +$E,75666,38 +$STOP,225,35114226.27,65465,29,17541,18,3,11 +$START,226,876 +$E,2468,6 +$E,11934,27 +$E,18146,6 +$E,26517,7 +$E,27575,424 +$E,27586,76 +$E,27587,35 +$E,27587,12 +$E,30770,5 +$E,63966,31 +$E,67550,4 +$STOP,226,35114236.43,13571,11,17104,15,2,8 +$START,227,14073 +$E,9023,76 +$E,15934,7 +$E,16012,732 +$E,16013,39 +$E,16014,55 +$E,16015,16 +$E,16016,24 +$E,16016,19 +$E,16017,38 +$E,16017,119 +$E,16018,43 +$E,16019,82 +$E,16019,32 +$E,16020,161 +$E,16022,31 +$E,16022,11 +$E,16465,256 +$E,16465,207 +$E,16467,161 +$E,16467,39 +$E,16468,224 +$E,16469,64 +$E,16469,92 +$E,16470,108 +$E,16470,39 +$E,16470,60 +$E,16471,78 +$E,16472,28 +$E,16472,88 +$E,16474,79 +$E,16474,37 +$E,16534,208 +$E,16778,184 +$E,16778,168 +$E,16778,38 +$E,16780,39 +$E,16780,12 +$E,16780,134 +$E,16782,62 +$E,16782,71 +$E,16782,99 +$E,16783,79 +$E,16784,70 +$E,16784,172 +$E,16785,75 +$E,16786,46 +$E,17027,950 +$E,17028,67 +$E,17029,53 +$E,17090,120 +$E,17090,143 +$E,17092,94 +$E,17092,48 +$E,17093,75 +$E,17094,71 +$E,17095,23 +$E,17095,69 +$E,17095,56 +$E,17096,88 +$E,17097,41 +$E,17099,39 +$E,17099,19 +$E,17099,8 +$E,17160,140 +$E,17162,23 +$E,17163,15 +$E,17163,4 +$E,17165,23 +$E,17166,23 +$E,17166,30 +$E,17167,7 +$E,17168,31 +$E,17410,127 +$E,17411,30 +$E,17412,28 +$E,17412,6 +$E,17413,16 +$E,17414,30 +$E,17414,35 +$E,17416,31 +$E,17418,12 +$E,17419,6 +$E,19527,428 +$E,19529,31 +$E,19598,113 +$E,19600,15 +$E,19600,4 +$E,19602,63 +$E,19603,10 +$E,19604,39 +$E,19606,12 +$E,19902,39 +$E,19903,75 +$E,19908,15 +$E,19908,31 +$E,19909,12 +$E,19909,12 +$E,19910,14 +$E,19911,16 +$E,22027,271 +$E,24527,318 +$E,24528,6 +$E,24529,7 +$E,26232,7 +$E,27027,326 +$E,27029,12 +$E,27051,37 +$E,27057,8 +$E,27723,67 +$E,27723,17 +$E,27728,24 +$E,27729,15 +$E,27731,8 +$E,28277,316 +$E,29527,275 +$E,29528,15 +$E,29598,81 +$E,29600,7 +$E,29601,24 +$E,29601,8 +$E,29602,19 +$E,29603,38 +$E,29605,17 +$E,29902,49 +$E,29903,24 +$E,29903,35 +$E,29904,10 +$E,29904,12 +$E,29905,14 +$E,29906,14 +$E,29907,14 +$E,29908,14 +$E,29908,19 +$E,29910,24 +$E,29911,14 +$E,30215,18 +$E,30215,33 +$E,30217,22 +$E,30218,52 +$E,30219,28 +$E,30220,16 +$E,30220,12 +$E,30221,28 +$E,30221,19 +$E,30222,17 +$E,30224,8 +$E,30777,224 +$E,30778,6 +$E,32027,319 +$E,32028,8 +$E,32723,63 +$E,32725,12 +$E,32727,28 +$E,32731,11 +$E,32731,11 +$E,32785,33 +$E,33277,295 +$E,33279,15 +$E,34527,209 +$E,37027,211 +$E,37028,12 +$E,37029,7 +$E,39526,246 +$E,42026,268 +$E,42027,7 +$E,42050,24 +$E,42050,6 +$E,44526,270 +$E,44527,6 +$E,47026,413 +$E,47027,8 +$E,49526,332 +$E,49527,15 +$E,49528,7 +$E,49550,31 +$E,52026,355 +$E,52027,12 +$E,52027,7 +$E,54526,414 +$E,54527,24 +$E,56392,4 +$E,57026,254 +$E,57027,12 +$E,57049,4 +$E,59526,220 +$E,62025,407 +$E,62027,24 +$E,62112,31 +$E,63080,417 +$E,64525,254 +$E,64527,4 +$E,64528,6 +$E,65519,6 +$E,66050,227 +$E,67025,276 +$E,67027,8 +$E,67027,9 +$E,69525,409 +$E,69527,24 +$E,69527,20 +$E,72025,332 +$E,72027,14 +$E,72049,56 +$E,72056,7 +$E,74525,406 +$E,74527,35 +$E,74820,51 +$E,77025,252 +$E,77027,11 +$STOP,227,35114246.51,33594,209,17511,17,7,27 +$START,228,36367 +$E,1696,259 +$E,1698,17 +$E,3750,6 +$E,4196,195 +$E,6696,218 +$E,6720,35 +$E,9196,327 +$E,9198,9 +$E,11696,247 +$E,11698,9 +$E,13649,4 +$E,14196,279 +$E,14198,8 +$E,14220,41 +$E,17993,32 +$E,25562,6 +$E,31814,354 +$E,31818,6 +$E,31820,8 +$E,31821,12 +$E,31821,7 +$E,31822,71 +$E,32048,300 +$E,32050,5 +$E,32054,22 +$E,32055,31 +$E,32056,56 +$E,32057,25 +$E,32716,5 +$E,41162,8 +$E,43947,4 +$E,52343,15 +$E,58346,7 +$E,60797,7 +$STOP,228,35114257.75,49319,34,17335,13,5,11 +$START,229,50068 +$E,2447,7 +$E,13630,4 +$E,14056,4 +$E,18432,4 +$E,27613,7 +$E,42377,4 +$E,47000,5 +$E,70789,6 +$E,71643,7 +$STOP,229,35114267.89,62745,9,17024,15,4,8 +$START,230,63260 +$E,111,8 +$E,2181,7 +$E,2423,4 +$E,9936,4 +$E,18389,7 +$E,28746,4 +$STOP,230,35114277.97,10377,6,16962,15,5,14 +$START,231,10829 +$E,19420,7 +$E,22226,4 +$E,24058,7 +$E,24409,7 +$E,28290,4 +$E,32029,4 +$E,32866,7 +$E,45911,7 +$E,47494,7 +$E,52351,6 +$E,61065,4 +$E,63724,4 +$E,64705,4 +$E,70336,271 +$E,74753,4 +$E,74792,8 +$STOP,231,35114288.3,23563,16,16444,14,1,9 +$START,232,24146 +$E,359,7 +$E,2747,99 +$E,10720,7 +$E,15880,15 +$E,21500,6 +$E,24971,6 +$E,28687,4 +$E,32505,15 +$E,49649,4 +$E,66752,6 +$E,66791,4 +$E,77078,7 +$STOP,232,35114298.13,36846,12,16509,16,7,12 +$START,233,37355 +$E,1144,7 +$E,7820,6 +$E,16170,5 +$E,20013,4 +$E,38051,6 +$E,67420,195 +$E,73417,304 +$STOP,233,35114308.20,50013,7,17082,19,3,19 +$START,234,50477 +$E,3683,79 +$E,4378,7 +$E,11443,6 +$E,12361,7 +$STOP,234,35114318.27,63118,4,16830,15,1,10 +$START,235,63555 +$E,8146,7 +$E,31346,12 +$E,32830,6 +$E,39527,6 +$E,46820,5 +$E,75465,7 +$STOP,235,35114328.34,10674,6,16721,18,3,12 +$START,236,11165 +$E,20073,56 +$E,27063,7 +$E,42063,6 +$E,68016,219 +$E,68025,38 +$E,68025,31 +$E,68297,88 +$E,68299,17 +$E,68300,21 +$E,68302,103 +$E,68304,8 +$E,68304,15 +$E,68306,22 +$E,68307,6 +$E,68610,94 +$E,68610,19 +$E,68612,15 +$E,68613,15 +$E,68614,28 +$E,68615,15 +$E,68615,16 +$E,68616,4 +$E,68616,24 +$E,68617,8 +$E,68617,14 +$E,68619,4 +$E,68930,93 +$E,68931,28 +$E,68931,11 +$E,68932,6 +$E,68934,7 +$E,68934,19 +$E,68935,8 +$E,68936,24 +$E,68937,32 +$E,68937,67 +$E,68938,9 +$E,69039,6 +$E,69118,9 +$E,69243,39 +$E,69246,4 +$E,69249,7 +$E,69305,21 +$E,69306,24 +$E,69307,6 +$E,69359,188 +$E,69361,11 +$E,69430,14 +$E,69743,10 +$E,70493,88 +$E,70496,6 +$E,70496,48 +$E,70499,19 +$E,70500,28 +$E,70501,8 +$E,70555,44 +$E,70609,208 +$E,70680,67 +$E,70743,40 +$E,70797,49 +$E,70799,28 +$E,70800,16 +$E,70801,9 +$E,70802,15 +$E,70803,40 +$E,70804,15 +$E,70860,87 +$E,70862,19 +$E,70863,17 +$E,70864,7 +$E,70865,30 +$E,70866,19 +$E,70867,7 +$E,70867,24 +$E,70869,12 +$E,70915,108 +$E,70918,7 +$E,70920,7 +$E,70921,7 +$E,70922,89 +$E,70925,30 +$E,70926,24 +$E,70927,12 +$E,70929,6 +$E,70930,14 +$E,70931,24 +$E,70993,135 +$E,70993,8 +$E,70995,5 +$E,70996,12 +$E,70998,16 +$E,70999,9 +$E,71000,6 +$E,71001,4 +$E,71002,4 +$E,71055,96 +$E,71060,7 +$E,71061,7 +$E,71061,6 +$E,71062,7 +$E,71110,98 +$E,71110,39 +$E,71111,20 +$E,71112,14 +$E,71114,7 +$E,71115,23 +$E,71116,15 +$E,71118,7 +$E,71119,12 +$E,71305,191 +$E,71305,14 +$E,71308,12 +$E,71309,22 +$E,71310,14 +$E,71310,35 +$E,71311,12 +$E,71311,6 +$E,71312,19 +$E,71313,20 +$E,71314,28 +$E,71618,190 +$E,71618,28 +$E,71619,4 +$E,71620,15 +$E,71621,28 +$E,71622,7 +$E,71622,4 +$E,71623,24 +$E,71624,7 +$E,71624,15 +$E,71625,16 +$E,71626,25 +$E,71627,25 +$E,71859,391 +$E,71861,23 +$E,71930,195 +$E,71930,8 +$E,71933,11 +$E,71934,24 +$E,71935,7 +$E,71935,24 +$E,71936,7 +$E,71936,17 +$E,71937,26 +$E,71937,7 +$E,71939,32 +$E,74359,598 +$E,74361,44 +$E,74362,11 +$E,74383,108 +$E,74385,6 +$E,74386,35 +$E,74386,49 +$E,74386,46 +$E,74388,48 +$E,74388,30 +$E,74390,60 +$E,74430,246 +$E,74430,24 +$E,74432,7 +$E,74433,12 +$E,74434,7 +$E,74434,24 +$E,74434,6 +$E,74435,11 +$E,74435,30 +$E,74436,7 +$E,74436,16 +$E,74436,11 +$E,74437,46 +$E,74438,12 +$E,74439,40 +$E,74439,35 +$E,74446,72 +$E,74446,40 +$E,74449,48 +$E,74450,56 +$E,74451,24 +$E,74452,12 +$E,74454,6 +$E,74743,259 +$E,74743,35 +$E,74744,7 +$E,74744,7 +$E,74745,14 +$E,74745,28 +$E,74746,6 +$E,74747,7 +$E,74747,4 +$E,74748,44 +$E,74748,17 +$E,74749,30 +$E,74749,38 +$E,74750,24 +$E,74750,28 +$E,74751,44 +$E,74752,35 +$E,75055,271 +$E,75055,28 +$E,75057,5 +$E,75057,7 +$E,75058,19 +$E,75058,7 +$E,75059,12 +$E,75059,11 +$E,75059,15 +$E,75060,25 +$E,75061,10 +$E,75061,17 +$E,75061,4 +$E,75062,36 +$E,75063,31 +$E,75064,28 +$E,75064,19 +$E,76859,508 +$E,76861,30 +$E,76861,22 +$E,76883,63 +$E,76886,7 +$E,76890,7 +$E,76891,247 +$E,76891,31 +$E,76893,14 +$E,76894,7 +$E,76895,21 +$E,76895,7 +$E,76896,14 +$E,76896,31 +$E,76898,33 +$E,76898,38 +$E,76900,35 +$E,76900,19 +$E,76930,335 +$E,76930,39 +$E,76932,14 +$E,76932,9 +$E,76932,24 +$E,76933,8 +$E,76933,19 +$E,76934,24 +$E,76934,22 +$E,76934,15 +$E,76935,46 +$E,76936,22 +$E,76936,48 +$E,76936,24 +$E,76937,50 +$E,76937,30 +$E,76938,24 +$E,76939,60 +$E,76940,24 +$E,76993,248 +$E,76995,16 +$E,76995,17 +$E,76996,8 +$E,76997,8 +$E,76997,35 +$E,76997,6 +$E,76998,30 +$E,76998,24 +$E,76999,12 +$E,76999,6 +$E,77001,35 +$E,77001,27 +$E,77055,15 +$E,77057,39 +$E,77058,51 +$E,77058,7 +$E,77059,51 +$E,77060,48 +$E,77061,80 +$E,77061,43 +$E,77063,30 +$E,77064,7 +$E,77064,7 +$E,77118,197 +$E,77119,12 +$E,77120,8 +$E,77121,19 +$E,77121,7 +$E,77122,48 +$E,77123,11 +$E,77124,31 +$E,77124,7 +$E,77125,14 +$E,77126,35 +$E,77243,339 +$E,77243,30 +$E,77244,12 +$E,77244,12 +$E,77245,11 +$E,77245,6 +$E,77246,23 +$E,77246,24 +$E,77246,19 +$E,77247,21 +$E,77248,48 +$E,77248,4 +$E,77248,12 +$STOP,236,35114338.41,35197,345,16603,30,10,35 +$START,237,38725 +$E,1077,88 +$E,1264,447 +$E,1266,24 +$E,1266,7 +$E,1335,63 +$E,3764,683 +$E,3766,44 +$E,3767,15 +$E,3835,70 +$E,6264,504 +$E,6266,38 +$E,6335,60 +$E,6340,4 +$E,8764,451 +$E,8766,31 +$E,8766,7 +$E,8788,44 +$E,8792,31 +$E,8795,17 +$E,8835,36 +$E,11264,519 +$E,11265,27 +$E,11266,24 +$E,11335,48 +$E,13764,383 +$E,13765,14 +$E,13766,8 +$E,13835,39 +$E,14147,30 +$E,14460,39 +$E,16264,454 +$E,16265,24 +$E,16266,14 +$E,16266,15 +$E,16288,43 +$E,16335,44 +$E,17190,6 +$E,18764,671 +$E,18766,54 +$E,18766,28 +$E,18835,47 +$E,21264,368 +$E,21265,15 +$E,21266,20 +$E,21335,40 +$E,23764,355 +$E,23765,11 +$E,23766,14 +$E,23788,33 +$E,23792,7 +$E,23835,38 +$E,26264,412 +$E,26265,22 +$E,26266,16 +$E,26335,37 +$E,28764,380 +$E,28765,17 +$E,28835,50 +$E,31264,593 +$E,31265,40 +$E,31266,19 +$E,31288,65 +$E,31335,48 +$E,33764,675 +$E,33765,51 +$E,33766,12 +$E,33767,6 +$E,33778,7 +$E,33835,70 +$E,33838,7 +$E,36264,499 +$E,36265,44 +$E,36266,12 +$E,36335,65 +$E,38764,595 +$E,38765,44 +$E,38766,28 +$E,38788,67 +$E,38790,7 +$E,38791,12 +$E,38795,16 +$E,38796,15 +$E,38796,6 +$E,38835,73 +$E,41263,683 +$E,41264,33 +$E,41265,31 +$E,41265,4 +$E,41334,56 +$E,41337,8 +$E,41342,4 +$E,43763,575 +$E,43764,40 +$E,43834,81 +$E,43837,14 +$E,43839,16 +$E,43840,6 +$E,46263,595 +$E,46264,39 +$E,46265,20 +$E,46287,53 +$E,46294,8 +$E,46295,9 +$E,46334,47 +$E,48763,663 +$E,48764,48 +$E,51263,502 +$E,51264,39 +$E,51265,7 +$E,51334,48 +$E,53763,591 +$E,53764,48 +$E,53904,224 +$E,53909,4 +$E,53910,4 +$E,53912,46 +$E,53913,27 +$E,53966,1080 +$E,53970,12 +$E,53971,7 +$E,53971,34 +$E,53972,52 +$E,53973,19 +$E,53974,48 +$E,53975,261 +$E,53977,27 +$E,54029,1054 +$E,54033,6 +$E,54034,51 +$E,54036,31 +$E,54036,24 +$E,54038,262 +$E,54040,19 +$STOP,237,35114350.32,54300,133,16514,24,3,22 +$START,238,56178 +$E,1347,11 +$E,7753,4 +$E,20701,155 +$E,22605,7 +$E,36173,76 +$E,39382,82 +$E,53467,6 +$E,68353,65 +$E,71399,7 +$E,74987,4 +$E,78083,7 +$STOP,238,35114360.95,3336,11,16438,13,2,4 +$START,239,4073 +$E,5318,41 +$E,24349,4 +$E,26464,4 +$E,32008,6 +$E,42239,4 +$E,50354,96 +$E,60638,6 +$E,66407,5 +$STOP,239,35114371.5,16739,8,16594,11,1,8 +$ENV,239,35114371.13,23.8,56.3,24.0,54.4,23.70,971.21 +$START,240,17926 +$E,7729,7 +$E,25277,7 +$E,31545,4 +$E,67129,6 +$STOP,240,35114381.22,30567,4,16780,10,3,5 +$START,241,31004 +$E,17516,5 +$E,30461,4 +$E,59590,12 +$E,75714,5 +$STOP,241,35114391.28,43646,4,17154,10,4,13 +$START,242,44085 +$E,7945,6 +$E,8749,111 +$E,14297,14 +$E,24943,6 +$E,30339,5 +$E,30585,6 +$E,35385,4 +$E,42430,8 +$E,48646,7 +$E,49431,35 +$E,56529,785 +$E,75002,4 +$STOP,242,35114401.34,56790,12,16777,11,2,13 +$START,243,57301 +$E,754,4 +$E,4463,6 +$E,8960,6 +$E,12785,7 +$E,14428,7 +$E,21288,7 +$E,23765,6 +$E,36875,9 +$E,39166,6 +$E,50182,609 +$E,54246,7 +$E,73329,19 +$STOP,243,35114411.42,4466,12,16955,17,2,11 +$START,244,5009 +$E,40962,40 +$E,47517,7 +$E,47771,11 +$E,55775,6 +$E,56086,112 +$STOP,244,35114421.51,17653,5,16748,13,3,7 +$START,245,18099 +$E,10424,9 +$E,15366,7 +$E,33197,423 +$E,64961,64 +$E,73596,900 +$E,77673,4 +$STOP,245,35114431.57,30758,6,17816,7,1,7 +$START,246,31216 +$E,6823,65 +$E,8197,6 +$E,29284,4 +$E,41270,4 +$STOP,246,35114441.63,43857,4,17480,10,0,9 +$START,247,44329 +$E,27331,466 +$E,31594,350 +$E,52641,289 +$E,56924,295 +$STOP,247,35114451.70,56972,4,17855,9,0,4 +$START,248,57412 +$E,4055,5 +$E,19414,9 +$E,20171,4 +$E,29964,6 +$E,31337,4 +$E,48998,60 +$E,59834,14 +$E,64257,15 +$E,64507,30 +$E,64827,115 +$E,64830,7 +$E,64831,7 +$E,64832,13 +$E,64834,30 +$E,64835,22 +$E,65140,80 +$E,65143,17 +$E,65143,6 +$E,65144,9 +$E,65210,23 +$E,65215,7 +$E,65444,17 +$E,65445,19 +$E,65445,7 +$E,65446,7 +$E,65449,6 +$E,65451,33 +$E,66209,210 +$E,66211,8 +$E,67459,140 +$E,67944,25 +$E,67944,8 +$E,67950,7 +$E,68257,28 +$E,68258,7 +$E,68709,163 +$E,69959,289 +$E,69961,7 +$E,72459,344 +$E,74889,6 +$E,74959,353 +$E,74961,14 +$E,76069,56 +$E,76070,32 +$E,76071,31 +$E,76073,15 +$E,76074,7 +$E,76074,7 +$E,76075,23 +$E,76076,9 +$E,76076,24 +$E,76077,28 +$E,76078,8 +$E,76209,220 +$E,76211,6 +$E,76211,7 +$E,76694,28 +$E,76699,12 +$E,76701,19 +$E,77459,136 +$STOP,248,35114461.77,5237,60,17618,11,2,11 +$START,249,6217 +$E,83,233 +$E,85,10 +$E,2553,28 +$E,2583,328 +$E,2585,11 +$E,2585,14 +$E,3426,35 +$E,5083,307 +$E,5085,12 +$E,7513,19 +$E,7553,8 +$E,7583,496 +$E,7585,19 +$E,7585,21 +$E,7586,14 +$E,7826,8 +$E,10083,316 +$E,10085,11 +$E,10085,12 +$E,12583,355 +$E,12585,7 +$E,12585,22 +$E,14064,96 +$E,15013,7 +$E,15052,71 +$E,15060,14 +$E,15083,572 +$E,15085,38 +$E,15085,6 +$E,15326,9 +$E,15638,15 +$E,17513,23 +$E,17583,915 +$E,17585,73 +$E,17585,57 +$E,17586,16 +$E,20013,7 +$E,20083,447 +$E,20085,30 +$E,20085,19 +$E,22552,70 +$E,22555,7 +$E,22558,7 +$E,22560,9 +$E,22561,7 +$E,22583,480 +$E,22585,27 +$E,25083,335 +$E,25085,22 +$E,27583,251 +$E,27585,6 +$E,30052,38 +$E,30083,310 +$E,30085,12 +$E,32583,339 +$E,32585,12 +$E,35083,319 +$E,35085,24 +$E,37552,37 +$E,37558,7 +$E,37583,304 +$E,37585,11 +$E,40082,334 +$E,40083,6 +$E,40084,16 +$E,42582,322 +$E,42583,19 +$E,42584,7 +$E,45051,57 +$E,45054,5 +$E,45082,323 +$E,45084,11 +$E,47582,334 +$E,47583,19 +$E,50082,438 +$E,50083,24 +$E,50084,12 +$E,50084,4 +$E,52551,92 +$E,52553,8 +$E,52554,6 +$E,52556,4 +$E,52559,31 +$E,52560,12 +$E,52582,387 +$E,52583,22 +$E,52584,16 +$E,65160,98 +$E,65164,11 +$E,65395,99 +$E,65400,16 +$E,65400,7 +$E,65403,8 +$E,65404,10 +$STOP,249,35114471.99,20475,94,17430,15,2,13 +$START,250,21849 +$E,1073,4 +$E,64760,7 +$STOP,250,35114482.38,34477,2,17138,8,2,8 +$START,251,34896 +$E,8,156 +$E,14628,71 +$E,15066,57 +$E,15068,19 +$E,15070,28 +$E,15070,12 +$E,15071,12 +$E,15072,11 +$E,15072,17 +$E,15378,22 +$E,15379,9 +$E,15381,6 +$E,15383,9 +$E,15384,28 +$E,15386,24 +$E,15691,36 +$E,15695,6 +$E,15697,6 +$E,15698,4 +$E,15799,127 +$E,16011,33 +$E,16073,55 +$E,16078,4 +$E,16136,12 +$E,16138,7 +$E,16140,15 +$E,18299,126 +$E,18301,4 +$E,18511,57 +$E,18512,22 +$E,18516,7 +$E,18517,22 +$E,18574,71 +$E,18578,4 +$E,18578,15 +$E,18579,7 +$E,18816,97 +$E,18819,7 +$E,18820,17 +$E,18821,27 +$E,19549,143 +$E,20799,107 +$E,23299,120 +$E,23511,76 +$E,23512,20 +$E,23516,7 +$E,23519,12 +$E,23519,6 +$E,23573,99 +$E,23574,9 +$E,23575,5 +$E,23578,14 +$E,23580,12 +$E,23581,8 +$E,25799,103 +$E,26011,70 +$E,26015,6 +$E,26016,6 +$E,26016,7 +$E,26018,19 +$E,26019,6 +$E,26019,11 +$E,26073,82 +$E,26078,14 +$E,26078,7 +$E,26081,10 +$E,26136,71 +$E,26140,7 +$E,26144,7 +$E,26316,25 +$E,26378,14 +$E,26382,7 +$E,26383,7 +$E,26385,8 +$E,26385,6 +$E,26628,48 +$E,26634,8 +$E,26691,56 +$E,26693,6 +$E,26696,11 +$E,27049,219 +$E,27051,7 +$E,28299,228 +$E,28301,8 +$E,30799,278 +$E,30801,12 +$E,33299,231 +$E,33511,76 +$E,33514,17 +$E,33516,31 +$E,33516,23 +$E,33517,15 +$E,33519,17 +$E,35799,289 +$E,35801,20 +$E,38299,348 +$E,38301,14 +$E,40760,7 +$E,40763,5 +$E,40798,359 +$E,40800,19 +$E,43298,391 +$E,43300,13 +$E,45798,347 +$E,45800,9 +$E,45800,6 +$E,48260,30 +$E,48263,14 +$E,48298,278 +$E,48300,8 +$E,48301,7 +$E,50798,178 +$E,51010,51 +$E,51013,15 +$E,51016,7 +$E,51611,159 +$E,53298,159 +$E,55302,4 +$E,55314,159 +$E,55760,4 +$E,55798,130 +$E,56841,6 +$E,58298,135 +$E,60798,156 +$E,63298,127 +$E,65110,54 +$E,65798,128 +$E,68298,161 +$E,70798,121 +$E,73298,156 +$E,75798,129 +$STOP,251,35114492.44,50498,131,17247,12,2,29 +$START,252,52300 +$E,359,127 +$E,2859,183 +$E,5320,7 +$E,5359,207 +$E,7859,158 +$E,10359,184 +$E,10570,24 +$E,11609,95 +$E,12859,115 +$E,15359,103 +$E,17114,147 +$E,17859,135 +$E,20359,134 +$E,22859,123 +$E,25359,143 +$E,27859,167 +$E,30359,121 +$E,32859,105 +$E,35359,131 +$E,37859,39 +$E,38929,14 +$E,40358,43 +$E,42858,88 +$E,45358,96 +$E,47857,95 +$E,48163,7 +$E,50357,156 +$E,52857,128 +$E,55357,140 +$E,57857,153 +$E,60319,6 +$E,60357,101 +$E,62599,7 +$E,62857,68 +$E,65357,87 +$E,67857,60 +$E,70357,127 +$E,72857,168 +$E,75357,108 +$E,77857,94 +$STOP,252,35114503.5,65424,40,17967,15,2,8 +$START,253,754 +$E,832,71 +$E,3332,24 +$E,5832,39 +$E,6115,210 +$E,7082,12 +$E,8332,6 +$E,13332,15 +$E,15832,7 +$E,20832,14 +$E,22632,596 +$E,24071,5 +$E,28332,14 +$E,33332,7 +$E,35025,4 +$E,35832,19 +$E,40446,4 +$E,40831,6 +$E,42291,7 +$E,43331,35 +$E,45831,30 +$E,48331,22 +$E,50831,28 +$E,53331,39 +$E,54758,45 +$E,55831,33 +$E,58331,43 +$E,60831,48 +$E,63331,56 +$E,65831,60 +$E,68331,46 +$E,70831,60 +$E,72030,4 +$E,73331,41 +$E,75831,19 +$STOP,253,35114513.23,13687,34,17323,6,1,7 +$START,254,14553 +$E,1497,49 +$E,5574,6 +$E,9075,312 +$E,9078,17 +$E,9080,7 +$E,9084,62 +$E,9084,31 +$E,9309,213 +$E,9313,6 +$E,9314,14 +$E,9315,35 +$E,9316,31 +$E,9318,44 +$E,9319,9 +$E,25319,240 +$E,68503,7 +$E,78012,57 +$STOP,254,35114523.39,27300,17,17440,6,2,4 +$START,255,27962 +$E,3879,30 +$E,4325,27 +$E,4637,19 +$E,4950,7 +$E,5145,25 +$E,6395,21 +$E,7645,22 +$E,8895,16 +$E,11394,25 +$E,13894,31 +$E,15582,15 +$E,15587,4 +$E,15645,15 +$E,15887,31 +$E,15889,6 +$E,15891,7 +$E,15896,7 +$E,15950,33 +$E,16394,147 +$E,18894,186 +$E,18896,7 +$E,21394,193 +$E,21396,9 +$E,23894,103 +$E,23926,6 +$E,26394,229 +$E,26465,15 +$E,28894,267 +$E,28896,12 +$E,28965,12 +$E,29590,6 +$E,31394,112 +$E,31465,11 +$E,33894,135 +$E,36394,152 +$E,38894,79 +$E,41393,78 +$E,43893,96 +$E,46393,28 +$E,48893,76 +$E,51393,88 +$E,52148,97 +$E,53893,113 +$E,53895,6 +$E,56393,107 +$E,58893,149 +$E,61393,78 +$E,63893,135 +$E,66393,153 +$E,68893,147 +$E,68925,7 +$E,70904,224 +$E,71393,150 +$E,71464,7 +$E,73893,92 +$E,75265,7 +$E,76393,59 +$E,77709,203 +$STOP,255,35114533.49,41369,58,17202,15,2,18 +$START,256,42452 +$E,1368,30 +$E,4009,46 +$E,4018,6 +$E,4243,48 +$E,5215,6 +$E,23722,28 +$E,34734,248 +$E,45677,56 +$E,74509,140 +$E,75192,7 +$STOP,256,35114543.74,55141,10,17511,7,1,3 +$START,257,56135 +$E,36365,48 +$E,64632,292 +$E,64633,9 +$E,64635,32 +$E,64640,59 +$E,64641,23 +$E,64641,10 +$E,64835,321 +$E,64840,31 +$E,64842,19 +$E,64843,65 +$E,64844,51 +$E,64844,16 +$E,65147,497 +$E,65148,12 +$E,65149,153 +$E,65150,14 +$E,65150,156 +$E,65150,92 +$E,65151,51 +$E,65152,176 +$E,65152,15 +$E,65153,147 +$E,65154,40 +$E,65155,81 +$E,65156,113 +$E,65460,431 +$E,65462,120 +$E,65463,49 +$E,65463,43 +$E,65463,76 +$E,65464,31 +$E,65464,140 +$E,65465,19 +$E,65465,123 +$E,65465,35 +$E,65466,31 +$E,65467,67 +$E,65468,108 +$E,65506,824 +$E,65508,60 +$E,65508,24 +$E,65509,11 +$E,65522,174 +$E,65523,28 +$E,65525,11 +$E,65525,14 +$E,65526,14 +$E,65527,48 +$E,65527,6 +$E,65529,23 +$E,65531,24 +$E,65531,7 +$E,65772,625 +$E,65773,38 +$E,65774,54 +$E,65774,71 +$E,65774,27 +$E,65775,358 +$E,65776,143 +$E,65776,134 +$E,65777,135 +$E,65777,214 +$E,65778,137 +$E,65779,196 +$E,65779,300 +$E,65780,194 +$E,65781,120 +$E,66280,12 +$E,66756,984 +$E,66758,78 +$E,66759,6 +$E,67335,548 +$E,67336,163 +$E,67338,231 +$E,67338,80 +$E,67339,159 +$E,67340,63 +$E,67340,127 +$E,67341,184 +$E,67342,192 +$E,67342,144 +$E,67343,106 +$E,67345,19 +$E,67397,12 +$E,67530,15 +$E,67647,342 +$E,67648,31 +$E,67648,7 +$E,67649,56 +$E,67650,54 +$E,67650,80 +$E,67651,8 +$E,67651,24 +$E,67652,16 +$E,67652,101 +$E,67653,79 +$E,67653,35 +$E,67654,59 +$E,67654,47 +$E,67654,78 +$E,67655,31 +$E,67656,62 +$E,67710,28 +$E,67842,31 +$E,68006,780 +$E,68007,51 +$E,68008,38 +$E,68009,7 +$E,68155,44 +$E,69092,38 +$E,69256,831 +$E,69258,63 +$E,71756,527 +$E,71758,31 +$E,71758,14 +$E,74131,39 +$E,74136,15 +$E,74256,432 +$E,74257,22 +$E,74259,4 +$E,74405,17 +$E,74717,19 +$E,75460,48 +$E,75461,7 +$E,75462,12 +$E,75463,10 +$E,75464,35 +$E,75466,8 +$E,75467,19 +$E,75506,231 +$E,75507,9 +$E,75655,4 +$E,75772,37 +$E,75774,15 +$E,75777,16 +$E,75835,15 +$E,75967,33 +$E,76030,8 +$E,76085,39 +$E,76088,22 +$E,76089,17 +$E,76147,30 +$E,76280,44 +$E,76592,38 +$E,76756,158 +$STOP,257,35114553.88,6826,146,17231,19,1,13 +$START,258,8831 +$E,489,167 +$E,2825,42 +$E,2989,185 +$E,5325,49 +$E,5357,44 +$E,5364,12 +$E,5489,192 +$E,5490,8 +$E,5638,92 +$E,5643,14 +$E,5950,96 +$E,5953,8 +$E,5954,12 +$E,5956,4 +$E,5957,8 +$E,7825,112 +$E,7826,15 +$E,7829,8 +$E,7831,11 +$E,7832,15 +$E,7833,7 +$E,7834,14 +$E,7834,7 +$E,7989,216 +$E,7990,15 +$E,10325,127 +$E,10326,12 +$E,10328,11 +$E,10329,5 +$E,10330,12 +$E,10332,7 +$E,10332,12 +$E,10333,14 +$E,10334,12 +$E,10489,256 +$E,10490,7 +$E,12825,128 +$E,12832,15 +$E,12834,16 +$E,12989,335 +$E,12991,8 +$E,13005,40 +$E,15325,267 +$E,15325,41 +$E,15328,24 +$E,15328,30 +$E,15328,5 +$E,15328,12 +$E,15329,8 +$E,15329,28 +$E,15330,20 +$E,15330,48 +$E,15331,15 +$E,15331,30 +$E,15332,17 +$E,15332,46 +$E,15333,48 +$E,15334,48 +$E,15335,19 +$E,15489,380 +$E,15490,24 +$E,17825,449 +$E,17825,71 +$E,17827,4 +$E,17827,30 +$E,17828,38 +$E,17828,59 +$E,17828,27 +$E,17828,9 +$E,17829,19 +$E,17829,62 +$E,17829,30 +$E,17830,47 +$E,17830,24 +$E,17830,80 +$E,17831,39 +$E,17831,61 +$E,17832,39 +$E,17832,98 +$E,17833,71 +$E,17834,96 +$E,17835,19 +$E,17836,4 +$E,17989,545 +$E,17990,43 +$E,20325,334 +$E,20325,56 +$E,20327,15 +$E,20327,19 +$E,20328,38 +$E,20328,18 +$E,20328,20 +$E,20329,30 +$E,20329,32 +$E,20329,19 +$E,20330,24 +$E,20330,14 +$E,20330,54 +$E,20331,19 +$E,20331,39 +$E,20332,20 +$E,20332,67 +$E,20333,48 +$E,20334,56 +$E,20334,39 +$E,20364,248 +$E,20366,8 +$E,20367,19 +$E,20367,27 +$E,20367,7 +$E,20368,15 +$E,20368,31 +$E,20369,22 +$E,20369,35 +$E,20371,48 +$E,20371,31 +$E,20373,56 +$E,20373,24 +$E,20395,48 +$E,20400,14 +$E,20402,24 +$E,20403,8 +$E,20489,440 +$E,20490,16 +$E,20491,20 +$E,20638,287 +$E,20638,30 +$E,20640,19 +$E,20641,8 +$E,20641,12 +$E,20641,14 +$E,20642,5 +$E,20642,24 +$E,20642,7 +$E,20643,56 +$E,20643,15 +$E,20644,28 +$E,20644,7 +$E,20644,54 +$E,20645,39 +$E,20646,51 +$E,20950,278 +$E,20950,31 +$E,20952,7 +$E,20952,4 +$E,20952,6 +$E,20953,11 +$E,20954,11 +$E,20954,12 +$E,20955,19 +$E,20955,40 +$E,20956,9 +$E,20956,44 +$E,20957,8 +$E,20957,44 +$E,20958,31 +$E,20959,49 +$E,20959,28 +$E,21288,17 +$E,22825,286 +$E,22825,46 +$E,22827,11 +$E,22827,7 +$E,22828,6 +$E,22829,15 +$E,22829,15 +$E,22829,14 +$E,22830,13 +$E,22830,46 +$E,22831,15 +$E,22831,31 +$E,22832,14 +$E,22832,39 +$E,22833,33 +$E,22834,55 +$E,22834,19 +$E,22835,7 +$E,22989,387 +$E,22990,18 +$E,25325,352 +$E,25325,67 +$E,25327,12 +$E,25327,6 +$E,25327,24 +$E,25328,48 +$E,25328,8 +$E,25328,12 +$E,25329,22 +$E,25329,38 +$E,25329,14 +$E,25329,24 +$E,25330,19 +$E,25330,60 +$E,25331,20 +$E,25331,37 +$E,25331,15 +$E,25332,76 +$E,25333,48 +$E,25334,70 +$E,25335,16 +$E,25489,646 +$E,25490,48 +$E,27825,728 +$E,27825,144 +$E,27827,36 +$E,27827,32 +$E,27827,56 +$E,27828,97 +$E,27828,39 +$E,27828,54 +$E,27829,51 +$E,27829,129 +$E,27829,28 +$E,27829,76 +$E,27830,56 +$E,27830,134 +$E,27831,60 +$E,27831,62 +$E,27831,110 +$E,27831,63 +$E,27832,155 +$E,27832,113 +$E,27834,143 +$E,27835,33 +$E,27836,6 +$E,27989,856 +$E,27990,56 +$E,27991,47 +$E,27991,28 +$E,30325,834 +$E,30325,159 +$E,30326,47 +$E,30327,65 +$E,30327,88 +$E,30328,48 +$E,30328,70 +$E,30329,76 +$E,30329,80 +$E,30329,41 +$E,30329,95 +$E,30330,56 +$E,30330,155 +$E,30331,65 +$E,30331,86 +$E,30331,126 +$E,30331,71 +$E,30332,175 +$E,30332,143 +$E,30334,167 +$E,30335,15 +$E,30364,116 +$E,30368,7 +$E,30369,47 +$E,30370,15 +$E,30370,28 +$E,30371,12 +$E,30372,35 +$E,30373,15 +$E,30489,895 +$E,30490,64 +$E,30491,27 +$E,30491,19 +$E,31200,7 +$E,32825,888 +$E,32825,183 +$E,32826,49 +$E,32827,56 +$E,32827,86 +$E,32828,55 +$E,32828,78 +$E,32829,77 +$E,32829,72 +$E,32829,31 +$E,32829,108 +$E,32830,72 +$E,32830,166 +$E,32831,92 +$E,32831,96 +$E,32831,142 +$E,32831,74 +$E,32832,199 +$E,32832,156 +$E,32834,190 +$E,32835,25 +$E,32989,899 +$E,32990,68 +$E,32991,16 +$E,35325,927 +$E,35325,191 +$E,35326,60 +$E,35327,62 +$E,35327,88 +$E,35328,147 +$E,35328,64 +$E,35328,89 +$E,35329,75 +$E,35329,96 +$E,35329,47 +$E,35329,104 +$STOP,258,35114564.60,33998,689,16977,29,9,36 +$START,259,37512 +$E,256,6 +$E,865,159 +$E,889,296 +$E,889,11 +$E,891,7 +$E,891,22 +$E,892,35 +$E,892,19 +$E,893,19 +$E,893,14 +$E,893,24 +$E,894,28 +$E,894,41 +$E,895,42 +$E,895,15 +$E,896,19 +$E,896,30 +$E,897,48 +$E,898,25 +$E,3365,162 +$E,3389,372 +$E,3389,6 +$E,3391,19 +$E,3391,35 +$E,3392,38 +$E,3392,51 +$E,3392,30 +$E,3393,15 +$E,3393,33 +$E,3393,39 +$E,3394,35 +$E,3394,56 +$E,3395,44 +$E,3395,31 +$E,3396,39 +$E,3396,56 +$E,3397,65 +$E,3398,28 +$E,5865,129 +$E,5889,225 +$E,5891,19 +$E,5892,16 +$E,5892,28 +$E,5892,28 +$E,5893,7 +$E,5893,16 +$E,5894,15 +$E,5895,15 +$E,5895,27 +$E,5895,12 +$E,5896,25 +$E,5896,30 +$E,5897,31 +$E,5898,15 +$E,5932,6 +$E,8365,160 +$E,8389,231 +$E,8391,15 +$E,8392,19 +$E,8392,8 +$E,8393,6 +$E,8393,13 +$E,8393,19 +$E,8394,15 +$E,8394,24 +$E,8395,29 +$E,8395,12 +$E,8396,24 +$E,8396,22 +$E,8397,33 +$E,10865,167 +$E,10866,12 +$E,10889,300 +$E,10889,14 +$E,10891,8 +$E,10891,31 +$E,10892,35 +$E,10892,28 +$E,10893,7 +$E,10893,16 +$E,10893,21 +$E,10894,19 +$E,10894,28 +$E,10895,27 +$E,10895,22 +$E,10896,32 +$E,10896,38 +$E,10897,48 +$E,10898,28 +$E,13365,144 +$E,13389,167 +$E,13392,14 +$E,13392,15 +$E,13393,8 +$E,13394,51 +$E,13395,17 +$E,13396,12 +$E,13397,28 +$E,13397,14 +$E,13701,224 +$E,13703,7 +$E,13704,19 +$E,13705,7 +$E,13706,12 +$E,13706,7 +$E,13707,23 +$E,13707,24 +$E,13708,11 +$E,13708,28 +$E,13709,24 +$E,13710,25 +$E,13710,7 +$E,14014,224 +$E,14016,12 +$E,14017,19 +$E,14017,22 +$E,14018,7 +$E,14018,17 +$E,14019,25 +$E,14019,24 +$E,14020,31 +$E,14020,12 +$E,14021,13 +$E,14021,28 +$E,14022,31 +$E,14023,24 +$E,15409,7 +$E,15865,121 +$E,15889,310 +$E,15889,9 +$E,15891,27 +$E,15892,30 +$E,15892,30 +$E,15893,15 +$E,15893,15 +$E,15893,31 +$E,15894,34 +$E,15894,31 +$E,15895,42 +$E,15895,20 +$E,15896,23 +$E,15896,35 +$E,15897,56 +$E,18365,124 +$E,18389,227 +$E,18389,14 +$E,18391,6 +$E,18392,9 +$E,18392,14 +$E,18393,7 +$E,18393,12 +$E,18393,19 +$E,18394,14 +$E,18394,24 +$E,18395,28 +$E,18396,14 +$E,18396,30 +$E,18397,28 +$E,18398,24 +$E,20865,100 +$E,20889,231 +$E,20891,8 +$E,20891,15 +$E,20892,31 +$E,20892,7 +$E,20892,4 +$E,20893,6 +$E,20893,8 +$E,20893,19 +$E,20894,16 +$E,20894,21 +$E,20895,31 +$E,20895,6 +$E,20896,15 +$E,20896,27 +$E,20897,35 +$E,20898,12 +$E,23365,122 +$E,23389,232 +$E,23391,14 +$E,23391,15 +$E,23392,9 +$E,23393,15 +$E,23393,17 +$E,23394,11 +$E,23394,33 +$E,23395,26 +$E,23395,9 +$E,23396,25 +$E,23396,15 +$E,23397,16 +$E,23397,24 +$E,23398,31 +$E,23398,6 +$E,25865,86 +$E,25889,228 +$E,25889,11 +$E,25891,7 +$E,25891,16 +$E,25892,7 +$E,25893,16 +$E,25893,15 +$E,25894,15 +$E,25894,22 +$E,25895,28 +$E,25895,7 +$E,25896,12 +$E,25896,24 +$E,25897,39 +$E,25898,6 +$E,28365,71 +$E,28389,241 +$E,28391,15 +$E,28391,16 +$E,28392,24 +$E,28392,9 +$E,28392,11 +$E,28393,12 +$E,28393,20 +$E,28394,6 +$E,28394,15 +$E,28395,15 +$E,28395,12 +$E,28395,24 +$E,28396,24 +$E,28397,46 +$E,28398,9 +$E,28398,4 +$E,30865,80 +$E,30889,295 +$E,30889,12 +$E,30890,14 +$E,30891,19 +$E,30891,31 +$E,30892,23 +$E,30893,13 +$E,30893,31 +$E,30894,33 +$E,30894,35 +$E,30895,28 +$E,30895,6 +$E,30895,19 +$E,30895,31 +$E,30896,38 +$E,30897,47 +$E,30898,30 +$E,30898,4 +$E,33365,88 +$E,33366,4 +$E,33389,288 +$E,33389,15 +$E,33390,14 +$E,33391,15 +$E,33391,31 +$E,33392,16 +$E,33393,22 +$E,33393,35 +$E,33394,19 +$E,33394,30 +$E,33395,44 +$E,33395,14 +$E,33395,27 +$E,33396,24 +$E,33397,51 +$E,33398,19 +$E,35864,71 +$E,35889,305 +$E,35889,14 +$E,35890,12 +$E,35891,16 +$E,35891,32 +$E,35892,19 +$E,35893,8 +$E,35893,30 +$E,35894,22 +$E,35894,36 +$E,35895,49 +$E,35895,13 +$E,35895,19 +$E,35895,31 +$E,35896,40 +$E,35897,48 +$E,35898,24 +$E,38364,80 +$E,38388,295 +$E,38391,23 +$E,38391,25 +$E,38392,47 +$E,38392,24 +$E,38392,8 +$E,38393,16 +$E,38393,26 +$E,38394,30 +$E,38394,35 +$E,38395,35 +$E,38395,20 +$E,38395,31 +$E,38396,28 +$E,38397,33 +$STOP,259,35114576.66,61317,427,16967,20,3,20 +$START,260,64795 +$E,10253,48 +$E,11715,112 +$E,32137,271 +$E,33826,103 +$E,33832,7 +$E,33835,15 +$E,34147,156 +$E,34147,9 +$E,34147,20 +$E,34148,9 +$E,34150,19 +$E,34150,12 +$E,34151,8 +$E,34152,43 +$E,34153,6 +$E,34154,60 +$E,34155,22 +$E,34373,300 +$E,34374,12 +$E,34459,152 +$E,34460,46 +$E,34462,19 +$E,34463,53 +$E,34465,14 +$E,34467,20 +$E,34468,12 +$E,34772,62 +$E,34773,7 +$E,34775,9 +$E,34777,11 +$E,35092,26 +$E,35093,7 +$E,35099,15 +$E,35623,212 +$E,36342,48 +$E,36342,25 +$E,36343,31 +$E,36343,6 +$E,36344,8 +$E,36345,6 +$E,36345,4 +$E,36346,25 +$E,36347,28 +$E,36349,31 +$E,36351,6 +$E,36647,28 +$E,36647,6 +$E,36649,15 +$E,36649,17 +$E,36650,14 +$E,36651,6 +$E,36652,16 +$E,36654,28 +$E,36655,29 +$E,36655,21 +$E,36873,321 +$E,36874,6 +$E,38123,255 +$E,40622,307 +$E,40623,22 +$E,40624,8 +$E,43122,254 +$E,43123,8 +$E,43169,19 +$E,43170,6 +$E,44466,87 +$E,44468,24 +$E,44469,4 +$E,44470,24 +$E,44470,15 +$E,44471,12 +$E,44471,28 +$E,44472,17 +$E,44473,38 +$E,44475,15 +$E,44591,35 +$E,44591,56 +$E,44592,20 +$E,44594,48 +$E,44594,24 +$E,44595,34 +$E,44596,14 +$E,44596,33 +$E,44597,28 +$E,44598,19 +$E,44598,7 +$E,44771,204 +$E,44772,33 +$E,44773,17 +$E,44773,25 +$E,44774,25 +$E,44774,40 +$E,44775,31 +$E,44777,71 +$E,44777,24 +$E,44777,31 +$E,44778,31 +$E,44779,38 +$E,44779,11 +$E,44780,7 +$E,45083,302 +$E,45084,7 +$E,45085,48 +$E,45086,24 +$E,45086,67 +$E,45087,70 +$E,45088,92 +$E,45088,67 +$E,45089,91 +$E,45089,24 +$E,45090,94 +$E,45091,89 +$E,45092,49 +$E,45092,33 +$E,45622,585 +$E,45623,28 +$E,45624,28 +$E,45624,14 +$E,45930,4 +$E,48122,876 +$E,48123,73 +$E,48124,31 +$E,48124,9 +$E,50622,668 +$E,50623,44 +$E,50624,14 +$E,50669,111 +$E,50669,39 +$E,50670,52 +$E,50671,19 +$E,50672,25 +$E,50674,31 +$E,50676,34 +$E,50676,19 +$E,50678,6 +$E,53122,748 +$E,53123,56 +$E,53124,23 +$E,55622,867 +$E,55623,68 +$E,55624,31 +$E,58122,496 +$E,58123,39 +$E,58278,32 +$E,58279,7 +$E,58283,25 +$E,58283,19 +$E,58287,6 +$E,60622,508 +$E,60623,25 +$E,60624,17 +$E,61713,222 +$E,63122,576 +$E,63123,60 +$E,63124,14 +$E,65622,440 +$E,65623,17 +$E,65623,15 +$E,65624,4 +$E,66091,39 +$E,66091,7 +$E,66095,6 +$E,66097,14 +$E,66098,5 +$E,66098,9 +$E,68122,376 +$E,68123,16 +$E,68124,15 +$E,70621,344 +$E,70623,24 +$E,70623,13 +$E,73121,208 +$E,75621,240 +$E,75669,14 +$E,78121,213 +$STOP,260,35114588.54,16523,175,17533,18,1,23 +$START,261,18934 +$E,411,211 +$E,2911,156 +$E,2913,9 +$E,5411,179 +$E,5459,4 +$E,5466,7 +$E,7911,277 +$E,7913,7 +$E,10411,209 +$E,10413,6 +$E,12393,5 +$E,12911,236 +$E,12913,7 +$E,12959,11 +$E,15411,212 +$E,15413,12 +$E,15413,11 +$E,17911,158 +$E,17913,7 +$E,19408,7 +$E,20411,176 +$E,28029,22 +$E,28263,15 +$E,33807,4 +$E,36124,6 +$E,68807,7 +$STOP,261,35114599.44,31792,26,17516,9,2,7 +$START,262,32433 +$E,64879,4 +$STOP,262,35114609.56,45056,1,17329,8,0,6 +$START,263,45604 +$E,6621,91 +$E,36292,8 +$E,63512,60 +$STOP,263,35114619.63,58239,3,17280,8,0,3 +$START,264,58669 +$STOP,264,35114629.70,5747,0,17190,7,2,4 +$START,265,6158 +$E,21014,5 +$STOP,265,35114639.75,18780,1,16711,8,0,10 +$START,266,19195 +$E,5572,15 +$E,5885,7 +$E,6400,64 +$E,7650,51 +$E,8392,4 +$E,8697,24 +$E,8900,96 +$E,15150,120 +$E,16509,39 +$E,16516,11 +$E,16572,6 +$E,16650,12 +$E,16822,35 +$E,16825,7 +$E,16885,30 +$E,16963,18 +$E,17080,12 +$E,17134,48 +$E,17140,8 +$E,17141,7 +$E,17143,14 +$E,17197,63 +$E,17197,12 +$E,17203,9 +$E,17275,51 +$E,17279,9 +$E,17279,6 +$E,17281,7 +$E,17282,17 +$E,17282,7 +$E,17588,63 +$E,17591,13 +$E,17592,7 +$E,17594,14 +$E,17595,7 +$E,17596,7 +$E,17650,207 +$E,17904,9 +$E,17906,8 +$E,17907,22 +$E,20088,71 +$E,20091,6 +$E,20094,12 +$E,20095,9 +$E,20096,11 +$E,20097,9 +$E,20150,163 +$E,22588,44 +$E,22591,15 +$E,22592,7 +$E,22595,7 +$E,22619,23 +$E,22650,188 +$E,25088,52 +$E,25091,9 +$E,25094,7 +$E,25095,8 +$E,25096,4 +$E,25149,199 +$E,25151,4 +$E,27588,60 +$E,27591,15 +$E,27592,15 +$E,27595,9 +$E,27596,4 +$E,27649,169 +$E,27651,14 +$E,30087,71 +$E,30091,9 +$E,30094,15 +$E,30095,6 +$E,30096,8 +$E,30127,127 +$E,30128,9 +$E,30129,6 +$E,30131,8 +$E,30132,28 +$E,30133,6 +$E,30134,50 +$E,30137,6 +$E,30149,195 +$E,30400,110 +$E,30404,7 +$E,30406,22 +$E,30407,4 +$E,30408,14 +$E,30409,7 +$E,30712,132 +$E,30718,4 +$E,30719,7 +$E,30719,7 +$E,30720,26 +$E,30721,7 +$E,32587,64 +$E,32591,4 +$E,32591,14 +$E,32592,15 +$E,32594,9 +$E,32594,6 +$E,32595,16 +$E,32596,9 +$E,32634,46 +$E,32649,220 +$E,32651,6 +$E,35087,89 +$E,35091,31 +$E,35091,19 +$E,35094,12 +$E,35094,12 +$E,35095,24 +$E,35096,15 +$E,35097,7 +$E,35149,198 +$E,37587,76 +$E,37591,19 +$E,37591,28 +$E,37593,4 +$E,37594,6 +$E,37594,20 +$E,37595,28 +$E,37596,12 +$E,37597,7 +$E,37597,7 +$E,37619,23 +$E,37649,199 +$E,37651,11 +$E,40086,71 +$E,40090,35 +$E,40090,31 +$E,40093,19 +$E,40093,10 +$E,40094,35 +$E,40095,24 +$E,40096,9 +$E,40148,228 +$E,42586,76 +$E,42590,46 +$E,42590,39 +$E,42592,12 +$E,42593,19 +$E,42593,15 +$E,42594,33 +$E,42595,21 +$E,42595,15 +$E,42648,179 +$E,42650,7 +$E,45086,83 +$E,45090,44 +$E,45090,51 +$E,45093,15 +$E,45093,25 +$E,45094,30 +$E,45095,35 +$E,45095,14 +$E,45096,7 +$E,45125,126 +$E,45127,7 +$E,45128,15 +$E,45129,19 +$E,45130,14 +$E,45131,19 +$E,45132,6 +$E,45133,9 +$E,45148,211 +$E,45150,7 +$E,45383,23 +$E,45385,6 +$E,45399,123 +$E,45403,7 +$E,45404,7 +$E,45405,9 +$E,45405,17 +$E,45406,16 +$E,45406,17 +$E,45407,14 +$E,45711,122 +$E,45717,13 +$E,45717,4 +$E,45719,17 +$E,45720,11 +$E,45720,12 +$E,47586,122 +$E,47589,6 +$E,47590,17 +$E,47593,6 +$E,47593,12 +$E,47594,18 +$E,47595,8 +$E,47596,12 +$E,47648,256 +$E,50086,163 +$E,50089,15 +$E,50089,7 +$E,50090,7 +$E,50092,15 +$E,50093,20 +$E,50093,11 +$E,50093,31 +$E,50095,22 +$E,50148,340 +$E,50150,12 +$E,50151,7 +$E,52586,208 +$E,52589,14 +$E,52589,15 +$E,52590,12 +$E,52591,30 +$E,52592,12 +$E,52592,15 +$E,52592,20 +$E,52593,28 +$E,52593,43 +$E,52595,22 +$E,52595,19 +$E,52648,375 +$E,52650,16 +$E,55086,152 +$E,55090,9 +$E,55092,19 +$E,55092,7 +$E,55093,28 +$E,55093,7 +$E,55093,25 +$E,55095,24 +$E,55117,39 +$E,55122,17 +$E,55123,7 +$E,55148,243 +$E,55150,6 +$E,57586,161 +$E,57590,12 +$E,57592,14 +$E,57592,9 +$E,57593,19 +$E,57593,31 +$E,57595,19 +$E,57596,7 +$E,57648,278 +$E,57650,4 +$E,60086,159 +$E,60089,11 +$E,60089,7 +$E,60090,6 +$E,60092,7 +$E,60092,15 +$E,60093,22 +$E,60093,10 +$E,60093,23 +$E,60095,24 +$E,60148,300 +$E,62586,161 +$E,62590,15 +$E,62592,12 +$E,62593,23 +$E,62593,12 +$E,62593,27 +$E,62595,22 +$E,62595,10 +$E,62617,14 +$E,62622,6 +$E,62648,143 +$E,65086,113 +$E,65092,12 +$E,65092,7 +$E,65093,13 +$E,65093,15 +$E,65095,14 +$E,65095,4 +$E,65148,176 +$E,67586,120 +$E,67592,6 +$E,67593,19 +$E,67593,28 +$E,67595,12 +$E,67595,11 +$E,67648,176 +$E,68733,6 +$E,70086,112 +$E,70089,6 +$E,70092,7 +$E,70092,7 +$E,70093,5 +$E,70093,24 +$E,70095,17 +$E,70148,143 +$E,72586,76 +$E,72590,48 +$E,72590,51 +$E,72592,5 +$E,72592,15 +$E,72593,19 +$E,72593,33 +$E,72595,28 +$E,72595,6 +$E,72617,7 +$E,72648,132 +$E,74860,199 +$E,75086,78 +$E,75090,51 +$STOP,266,35114649.81,44008,320,16691,36,7,38 +$START,267,47564 +$E,35888,6 +$E,47081,172 +$E,54146,4 +$STOP,267,35114661.83,60201,3,17167,6,2,7 +$START,268,60632 +$E,4667,6 +$E,10675,17 +$E,78046,179 +$STOP,268,35114671.89,7728,3,17075,11,4,8 +$START,269,8157 +$E,6817,6 +$E,8390,7 +$E,27716,88 +$E,32147,7 +$E,60444,71 +$E,68214,104 +$STOP,269,35114681.95,20807,6,17467,10,1,6 +$ENV,269,35114682.2,23.8,56.2,24.1,54.3,23.65,971.21 +$START,270,21893 +$E,28377,199 +$E,31307,231 +$E,46217,14 +$E,46665,57 +$E,67339,32 +$STOP,270,35114692.10,34545,5,17656,6,2,1 +$START,271,35032 +$E,7817,4 +$E,33031,547 +$E,52026,76 +$STOP,271,35114702.17,47669,3,18127,8,3,9 +$START,272,48100 +$E,27653,28 +$E,27658,6 +$E,27660,12 +$E,27965,57 +$E,27970,31 +$E,28278,25 +$E,28281,8 +$E,28281,21 +$E,28282,9 +$E,28283,6 +$E,28284,15 +$E,28340,88 +$E,28341,15 +$E,28343,11 +$E,28344,4 +$E,28346,15 +$E,28346,15 +$E,28411,26 +$E,28416,6 +$E,28598,140 +$E,28600,46 +$E,28601,15 +$E,28601,7 +$E,28602,38 +$E,28602,24 +$E,28603,28 +$E,28603,24 +$E,28604,12 +$E,28607,27 +$E,28607,22 +$E,30613,331 +$E,30615,6 +$E,30615,9 +$E,31411,156 +$E,31411,28 +$E,31413,39 +$E,31414,34 +$E,31414,6 +$E,31415,6 +$E,31416,41 +$E,31419,12 +$E,31420,18 +$E,31715,72 +$E,31716,65 +$E,31717,9 +$E,31718,24 +$E,31720,21 +$E,31721,33 +$E,31721,35 +$E,31722,35 +$E,31724,13 +$E,31863,419 +$E,31865,24 +$E,33113,371 +$E,33115,12 +$E,33115,12 +$E,35613,433 +$E,35615,28 +$E,35615,14 +$E,38113,368 +$E,38115,31 +$E,38145,44 +$E,38150,35 +$E,38152,4 +$E,38911,135 +$E,38913,19 +$E,38914,19 +$E,38914,15 +$E,38915,35 +$E,38916,63 +$E,38917,33 +$E,38917,15 +$E,38918,15 +$E,38918,12 +$E,38919,15 +$E,38919,14 +$E,39362,419 +$E,39364,19 +$E,40612,366 +$E,40614,22 +$E,40615,7 +$E,40724,4 +$E,40785,141 +$E,40786,12 +$E,40786,15 +$E,40787,10 +$E,40787,24 +$E,40788,30 +$E,40788,34 +$E,40789,35 +$E,40790,67 +$E,40791,16 +$E,40791,9 +$E,40792,12 +$E,40792,19 +$E,40793,14 +$E,41089,87 +$E,41090,55 +$E,41091,21 +$E,41092,20 +$E,41092,23 +$E,41094,39 +$E,41095,11 +$E,41095,19 +$E,41096,19 +$E,41097,9 +$E,41098,8 +$E,41402,71 +$E,41402,12 +$E,41404,38 +$E,41406,50 +$E,41406,8 +$E,41406,35 +$E,41407,24 +$E,41408,14 +$E,41409,39 +$E,41410,14 +$E,41862,312 +$E,41864,7 +$E,43112,419 +$E,43113,12 +$E,43114,14 +$E,44034,39 +$E,44038,7 +$E,45612,345 +$E,45613,17 +$E,48112,375 +$E,48113,15 +$E,50612,414 +$E,50614,25 +$E,50614,20 +$E,53112,339 +$E,53114,14 +$E,53114,11 +$E,53144,30 +$E,53148,16 +$E,53151,6 +$E,55612,284 +$E,55613,6 +$E,58112,329 +$E,58113,20 +$E,60612,257 +$E,60644,19 +$E,60648,7 +$E,60651,7 +$E,63112,214 +$E,65612,250 +$E,68112,204 +$E,68144,10 +$E,68148,13 +$E,70612,167 +$E,73112,206 +$E,75612,161 +$E,75644,7 +$E,78112,134 +$STOP,272,35114712.23,64578,155,17552,15,1,16 +$START,273,1009 +$E,4132,107 +$E,6632,84 +$E,7997,7 +$E,9132,99 +$E,9133,6 +$E,11632,97 +$E,14132,67 +$E,24273,24 +$E,24276,6 +$E,24507,12 +$E,33713,4 +$STOP,273,35114722.98,13701,11,17562,10,0,9 +$START,274,14314 +$E,8418,217 +$E,11625,6 +$E,32762,176 +$E,52350,241 +$E,55128,6 +$E,62996,4 +$E,72240,54 +$E,72647,31 +$STOP,274,35114733.7,26986,8,17985,7,1,7 +$START,275,27680 +$E,1192,4 +$E,5225,73 +$E,8070,8 +$E,20272,7 +$E,62675,12 +$STOP,275,35114743.17,40328,5,17893,7,2,7 +$START,276,40775 +$E,6237,7 +$E,49500,6 +$E,50515,7 +$STOP,276,35114753.23,53410,3,17369,7,1,5 +$START,277,53839 +$E,32779,4 +$STOP,277,35114763.29,926,1,17825,8,3,4 +$START,278,1341 +$E,268,22 +$E,272,24 +$E,581,25 +$E,584,4 +$E,586,7 +$E,587,12 +$E,893,60 +$E,898,16 +$E,964,15 +$E,1214,75 +$E,1214,17 +$E,1215,6 +$E,1216,19 +$E,1218,12 +$E,1220,15 +$E,1283,253 +$E,2533,275 +$E,2535,16 +$E,3089,131 +$E,3089,31 +$E,3091,20 +$E,3092,14 +$E,3093,8 +$E,3094,47 +$E,3095,24 +$E,3097,6 +$E,3339,6 +$E,3393,108 +$E,3394,12 +$E,3395,27 +$E,3397,38 +$E,3398,32 +$E,3398,48 +$E,3399,15 +$E,3400,30 +$E,3401,14 +$E,3402,7 +$E,3783,334 +$E,3785,10 +$E,4136,6 +$E,5033,412 +$E,5035,12 +$E,5035,9 +$E,7533,307 +$E,7535,14 +$E,7536,7 +$E,10033,225 +$E,10057,20 +$E,10061,6 +$E,10065,22 +$E,11151,8 +$E,11214,57 +$E,11217,7 +$E,11219,7 +$E,11219,17 +$E,11276,10 +$E,11283,146 +$E,11518,39 +$E,11520,7 +$E,11523,9 +$E,11581,7 +$E,11831,39 +$E,11832,4 +$E,11834,6 +$E,11836,10 +$E,11893,8 +$E,12533,190 +$E,15033,143 +$E,17533,164 +$E,17557,17 +$E,20033,257 +$E,20035,14 +$E,20073,11 +$E,22533,243 +$E,22535,19 +$E,22573,28 +$E,22577,7 +$E,25033,368 +$E,25035,24 +$E,25057,30 +$E,27533,183 +$E,27535,7 +$E,30033,195 +$E,30073,15 +$E,32533,276 +$E,32535,15 +$E,32535,7 +$E,32557,35 +$E,32561,4 +$E,32573,22 +$E,32581,7 +$E,35033,323 +$E,35035,14 +$E,35073,24 +$E,35077,7 +$E,35078,8 +$E,37533,241 +$E,37565,20 +$E,37885,14 +$E,38198,6 +$E,40032,247 +$E,40034,24 +$E,42532,81 +$E,45032,96 +$E,47532,115 +$E,50032,105 +$E,52532,105 +$E,52572,8 +$E,55032,148 +$E,55095,8 +$E,57532,99 +$E,57572,6 +$E,58257,206 +$E,60032,99 +$E,60071,12 +$E,62532,143 +$E,62533,15 +$E,62571,12 +$E,64518,6 +$E,65032,104 +$E,65071,7 +$E,65077,6 +$E,67532,99 +$E,67571,9 +$E,67575,7 +$E,70032,116 +$E,70071,5 +$E,72556,7 +$E,72571,19 +$E,72572,8 +$E,72577,5 +$E,72578,10 +$E,75032,126 +$E,75071,15 +$E,75079,7 +$E,77532,115 +$STOP,278,35114773.35,16925,136,18435,24,5,14 +$START,279,18770 +$E,6203,57 +$E,43238,6 +$E,61166,8 +$E,65118,4 +$STOP,279,35114783.97,31412,4,17721,12,0,4 +$START,280,31851 +$E,64042,56 +$E,70759,6 +$STOP,280,35114794.3,44478,2,16770,9,0,4 +$START,281,44901 +$E,7657,63 +$E,56796,9 +$E,64030,56 +$E,67168,6 +$E,69602,432 +$STOP,281,35114804.9,57545,5,17090,10,0,4 +$START,282,57993 +$E,23589,7 +$E,38446,6 +$E,60310,574 +$STOP,282,35114814.16,5089,3,18425,9,1,8 +$START,283,5519 +$E,377,211 +$E,28067,9 +$E,30036,5 +$E,51048,391 +$E,71133,7 +$STOP,283,35114824.22,18169,5,17668,6,1,7 +$START,284,18804 +$E,15568,62 +$E,33721,231 +$E,33722,6 +$E,33724,7 +$E,33725,28 +$E,33726,13 +$E,33726,43 +$E,33729,35 +$E,33730,12 +$E,34018,168 +$E,34018,12 +$E,34019,32 +$E,34020,31 +$E,34021,33 +$E,34022,20 +$E,34023,78 +$E,34023,25 +$E,34024,19 +$E,34024,44 +$E,34025,15 +$E,34025,28 +$E,34026,15 +$E,34027,15 +$E,34330,224 +$E,34331,35 +$E,34332,44 +$E,34333,39 +$E,34333,56 +$E,34334,25 +$E,34335,71 +$E,34335,7 +$E,34335,31 +$E,34336,18 +$E,34336,15 +$E,34337,28 +$E,34337,45 +$E,34338,31 +$E,34339,31 +$E,34340,9 +$E,34643,179 +$E,34644,44 +$E,34646,7 +$E,34647,8 +$E,34647,24 +$E,34648,40 +$E,34649,14 +$E,34650,18 +$E,34650,19 +$E,34651,31 +$E,34697,8 +$E,34705,67 +$E,34711,7 +$E,34760,10 +$E,34768,6 +$E,34814,406 +$E,34815,17 +$E,34816,7 +$E,34900,9 +$E,34955,101 +$E,34957,26 +$E,34959,4 +$E,34959,15 +$E,34961,12 +$E,34962,33 +$E,34963,44 +$E,35080,15 +$E,35393,12 +$E,36018,7 +$E,36064,287 +$E,36065,9 +$E,36463,15 +$E,36518,97 +$E,36519,24 +$E,36521,20 +$E,36521,28 +$E,36522,8 +$E,36523,6 +$E,36524,6 +$E,36525,7 +$E,36525,4 +$E,36580,63 +$E,36586,7 +$E,36643,46 +$E,36645,7 +$E,36647,4 +$E,36647,4 +$E,36775,56 +$E,36780,4 +$E,36781,9 +$E,36838,94 +$E,36840,12 +$E,36841,15 +$E,36844,35 +$E,36844,20 +$E,36845,17 +$E,36847,4 +$E,36900,81 +$E,36906,17 +$E,36955,48 +$E,36959,12 +$E,36960,14 +$E,36960,7 +$E,36961,4 +$E,36963,19 +$E,37268,46 +$E,37268,16 +$E,37272,19 +$E,37274,16 +$E,37275,12 +$E,37276,15 +$E,37314,265 +$E,37315,9 +$E,37316,6 +$E,37580,54 +$E,37580,30 +$E,37582,7 +$E,37584,28 +$E,37585,7 +$E,37585,4 +$E,37588,20 +$E,37589,9 +$E,38518,72 +$E,38523,24 +$E,38524,4 +$E,38525,12 +$E,38526,15 +$E,38527,4 +$E,41017,71 +$E,41017,40 +$E,41021,16 +$E,41023,7 +$E,41024,12 +$E,41025,15 +$E,43517,86 +$E,43517,52 +$E,43519,5 +$E,43520,7 +$E,43521,9 +$E,43522,24 +$E,43522,10 +$E,43523,19 +$E,43524,14 +$E,43525,15 +$E,43548,55 +$E,43554,7 +$E,43554,9 +$E,43556,96 +$E,43556,32 +$E,43558,8 +$E,43559,10 +$E,43560,15 +$E,43561,4 +$E,43561,19 +$E,43563,360 +$E,43564,46 +$E,43829,142 +$E,43829,76 +$E,43831,15 +$E,43832,12 +$E,43833,15 +$E,43833,7 +$E,43833,4 +$E,43834,24 +$E,43834,7 +$E,43835,12 +$E,43835,17 +$E,43836,4 +$E,43836,12 +$E,43838,24 +$E,43838,12 +$E,44142,133 +$E,44142,70 +$E,44144,24 +$E,44145,19 +$E,44146,31 +$E,44147,35 +$E,44147,12 +$E,44148,31 +$E,44149,9 +$E,44150,12 +$E,44150,19 +$E,44899,188 +$E,44902,23 +$E,44902,19 +$E,44903,11 +$E,44903,49 +$E,44904,15 +$E,44904,8 +$E,44905,21 +$E,44905,31 +$E,44906,20 +$E,44906,4 +$E,44908,37 +$E,44908,6 +$E,44954,236 +$E,44956,54 +$E,44957,28 +$E,44958,30 +$E,44958,4 +$E,44959,35 +$E,44959,32 +$E,44960,43 +$E,44961,36 +$E,44963,31 +$E,44963,28 +$E,45017,190 +$E,45017,19 +$E,45020,12 +$E,45021,34 +$E,45021,9 +$E,45021,19 +$E,45022,18 +$E,45022,31 +$E,45023,19 +$E,45024,30 +$E,45025,24 +$E,45026,7 +$E,45079,163 +$E,45079,88 +$E,45081,25 +$E,45082,12 +$E,45083,24 +$E,45084,48 +$E,45084,41 +$E,45085,19 +$E,45085,4 +$E,45085,32 +$E,45086,15 +$E,45088,35 +$E,45088,24 +$E,45089,8 +$E,45212,152 +$E,45214,15 +$E,45215,6 +$E,45216,44 +$E,45216,8 +$E,45218,12 +$E,45218,7 +$E,45220,22 +$E,45220,12 +$E,45267,240 +$E,45267,31 +$E,45268,19 +$E,45268,14 +$E,45270,19 +$E,45270,56 +$E,45270,16 +$E,45271,12 +$E,45271,67 +$E,45272,40 +$E,45273,54 +$E,45275,41 +$E,45276,16 +$E,45329,156 +$E,45332,16 +$E,45333,7 +$E,45334,19 +$E,45334,9 +$E,45335,11 +$E,45336,24 +$E,45337,19 +$E,45338,22 +$E,45392,131 +$E,45392,63 +$E,45394,20 +$E,45395,15 +$E,45396,6 +$E,45396,14 +$E,45396,25 +$E,45397,12 +$E,45398,30 +$E,45399,28 +$E,45400,15 +$E,45401,15 +$E,45524,142 +$E,45527,7 +$E,45527,15 +$E,45528,6 +$E,45528,29 +$E,45529,6 +$E,45529,7 +$E,45530,28 +$E,45531,9 +$E,45531,11 +$E,45532,17 +$E,45533,15 +$E,45579,230 +$E,45581,27 +$E,45581,33 +$E,45582,24 +$E,45582,56 +$E,45583,12 +$E,45583,14 +$E,45584,60 +$E,45585,73 +$E,45586,63 +$E,45587,88 +$E,45588,28 +$E,45588,14 +$STOP,284,35114834.31,42888,516,17307,36,6,52 +$START,285,46408 +$E,377,28 +$E,384,4 +$E,423,543 +$E,425,30 +$E,426,7 +$E,2877,24 +$E,2882,9 +$E,2923,564 +$E,2925,33 +$E,2926,11 +$E,5377,48 +$E,5381,9 +$E,5385,7 +$E,5408,64 +$E,5414,22 +$E,5414,6 +$E,5415,15 +$E,5423,480 +$E,5425,28 +$E,5426,11 +$E,5572,29 +$E,7877,41 +$E,7877,15 +$E,7881,12 +$E,7883,19 +$E,7885,12 +$E,7923,610 +$E,7925,33 +$E,7926,7 +$E,10377,54 +$E,10380,7 +$E,10381,27 +$E,10382,7 +$E,10382,15 +$E,10383,7 +$E,10385,14 +$E,10386,15 +$E,10423,662 +$E,10425,49 +$E,10426,12 +$E,12877,73 +$E,12881,35 +$E,12882,7 +$E,12883,16 +$E,12885,12 +$E,12886,20 +$E,12923,551 +$E,12925,24 +$E,12926,8 +$E,14005,4 +$E,20502,298 +$E,20507,20 +$E,20509,7 +$E,20511,54 +$E,20511,30 +$E,20736,207 +$E,20740,22 +$E,20741,9 +$E,20742,28 +$E,20743,7 +$E,20744,17 +$E,20745,38 +$E,20745,22 +$STOP,285,35114846.23,59815,63,17395,11,1,10 +$START,286,60870 +$E,37521,8 +$E,77466,545 +$STOP,286,35114856.47,7960,2,17991,10,0,8 +$START,287,8497 +$E,23857,151 +$E,69766,7 +$STOP,287,35114866.54,21127,2,17201,7,5,9 +$START,288,21676 +$E,16642,6 +$E,36327,168 +$E,39873,76 +$E,61355,129 +$STOP,288,35114876.61,34316,4,17318,10,2,3 +$START,289,34820 +$E,28244,4 +$E,57470,355 +$E,61200,6 +$E,66178,67 +$E,74484,108 +$E,74489,12 +$E,74492,6 +$E,74492,16 +$E,74493,6 +$E,74718,60 +$E,74720,24 +$E,74721,35 +$E,74723,16 +$E,74725,19 +$E,74726,35 +$E,75031,56 +$E,75031,51 +$E,75032,32 +$E,75034,56 +$E,75034,14 +$E,75034,46 +$E,75035,38 +$E,75036,7 +$E,75037,55 +$E,75039,7 +$E,75343,153 +$E,75344,22 +$E,75345,35 +$E,75346,115 +$E,75347,72 +$E,75348,130 +$E,75349,57 +$E,75349,47 +$E,75350,60 +$E,75351,33 +$E,75352,28 +$E,75577,579 +$E,75579,38 +$E,75579,19 +$E,75656,92 +$E,75656,62 +$E,75657,35 +$E,75658,48 +$E,75659,30 +$E,75659,19 +$E,75660,18 +$E,75661,38 +$E,75661,15 +$E,75662,15 +$E,75662,24 +$E,75663,48 +$E,75663,12 +$E,75665,8 +$E,75750,176 +$E,75750,56 +$E,75752,63 +$E,75754,7 +$E,75755,7 +$E,75757,63 +$E,75758,33 +$E,75758,15 +$E,75759,16 +$E,76101,7 +$E,76414,7 +$E,77164,6 +$E,77234,551 +$E,77235,4 +$E,77236,48 +$E,77236,71 +$E,77236,46 +$E,77237,168 +$E,77237,236 +$E,77238,88 +$E,77238,63 +$E,77239,49 +$E,77239,145 +$E,77240,135 +$E,77241,124 +$E,77241,52 +$E,77243,79 +$E,77296,82 +$E,77299,7 +$E,77301,6 +$E,77302,8 +$E,77304,4 +$E,77351,77 +$E,77355,19 +$E,77356,6 +$E,77356,11 +$E,77360,19 +$E,77476,79 +$E,77476,9 +$E,77481,7 +$E,77482,7 +$E,77484,7 +$E,77531,231 +$E,77531,120 +$E,77533,120 +$E,77533,59 +$E,77534,96 +$E,77535,65 +$E,77535,79 +$E,77535,67 +$E,77536,81 +$E,77536,124 +$E,77537,71 +$E,77538,116 +$E,77538,9 +$E,77539,63 +$E,77540,14 +$E,77597,14 +$E,77598,15 +$E,77599,12 +$E,77600,9 +$E,77600,26 +$E,77600,12 +$E,77602,12 +$E,77602,8 +$E,77664,152 +$E,77666,15 +$E,77668,6 +$E,77668,16 +$E,77669,26 +$E,77669,21 +$E,77670,24 +$E,77672,35 +$E,77673,10 +$E,77976,240 +$E,77977,7 +$E,77979,12 +$E,77980,27 +$E,77980,22 +$E,77981,25 +$E,77981,60 +$E,77982,28 +$E,77982,12 +$E,77983,31 +$E,77984,22 +$E,77985,49 +$E,77985,31 +$E,78077,1175 +$E,78079,86 +$E,78080,7 +$STOP,289,35114886.69,50705,143,17718,15,2,11 +$START,290,52662 +$E,349,275 +$E,349,60 +$E,352,32 +$E,352,15 +$E,353,35 +$E,354,35 +$E,355,19 +$E,355,4 +$E,355,12 +$E,356,28 +$E,357,46 +$E,358,23 +$E,358,7 +$E,404,252 +$E,404,60 +$E,406,76 +$E,407,192 +$E,408,14 +$E,408,55 +$E,409,44 +$E,409,64 +$E,410,76 +$E,410,8 +$E,411,89 +$E,411,47 +$E,412,36 +$E,413,35 +$E,414,4 +$E,419,143 +$E,420,35 +$E,421,44 +$E,423,19 +$E,423,6 +$E,424,24 +$E,425,12 +$E,426,19 +$E,428,7 +$E,428,9 +$E,466,199 +$E,468,26 +$E,469,19 +$E,470,12 +$E,471,4 +$E,471,22 +$E,471,23 +$E,472,39 +$E,473,15 +$E,473,44 +$E,473,18 +$E,475,39 +$E,475,28 +$E,536,320 +$E,538,12 +$E,539,8 +$E,539,28 +$E,539,22 +$E,540,7 +$E,540,24 +$E,541,19 +$E,541,9 +$E,541,22 +$E,541,67 +$E,542,48 +$E,543,8 +$E,543,40 +$E,544,22 +$E,545,51 +$E,546,30 +$E,849,327 +$E,851,7 +$E,851,24 +$E,852,30 +$E,852,12 +$E,853,11 +$E,853,36 +$E,853,7 +$E,854,35 +$E,854,73 +$E,855,51 +$E,855,12 +$E,856,46 +$E,857,8 +$E,858,67 +$E,859,16 +$E,950,707 +$E,952,53 +$E,952,20 +$E,953,14 +$E,1161,343 +$E,1163,15 +$E,1164,12 +$E,1165,9 +$E,1165,14 +$E,1165,48 +$E,1166,31 +$E,1166,39 +$E,1166,76 +$E,1167,56 +$E,1168,19 +$E,1168,44 +$E,1169,19 +$E,1170,71 +$E,1171,15 +$E,1172,6 +$E,2099,339 +$E,2101,9 +$E,2101,28 +$E,2102,17 +$E,2102,7 +$E,2103,19 +$E,2103,28 +$E,2103,15 +$E,2104,32 +$E,2104,83 +$E,2105,38 +$E,2105,20 +$E,2106,56 +$E,2106,4 +$E,2106,23 +$E,2108,63 +$E,2109,15 +$E,2109,6 +$E,2200,1202 +$E,2202,99 +$E,2203,36 +$E,2224,368 +$E,2224,78 +$E,2227,45 +$E,2227,31 +$E,2228,25 +$E,2228,12 +$E,2229,55 +$E,2230,39 +$E,2230,4 +$E,2230,24 +$E,2231,43 +$E,2232,52 +$E,2233,48 +$E,2233,12 +$E,2279,284 +$E,2279,39 +$E,2280,6 +$E,2281,18 +$E,2282,143 +$E,2282,15 +$E,2283,12 +$E,2283,110 +$E,2284,16 +$E,2284,131 +$E,2284,76 +$E,2285,19 +$E,2286,99 +$E,2286,56 +$E,2287,46 +$E,2341,411 +$E,2343,44 +$E,2344,34 +$E,2345,49 +$E,2345,15 +$E,2345,13 +$E,2346,22 +$E,2346,56 +$E,2346,31 +$E,2347,79 +$E,2347,7 +$E,2347,41 +$E,2348,39 +$E,2348,72 +$E,2348,80 +$E,2350,84 +$E,2351,23 +$E,2411,474 +$E,2412,12 +$E,2413,31 +$E,2414,9 +$E,2414,43 +$E,2414,30 +$E,2415,24 +$E,2415,16 +$E,2415,60 +$E,2416,64 +$E,2416,14 +$E,2416,35 +$E,2416,103 +$E,2417,83 +$E,2417,28 +$E,2418,30 +$E,2418,79 +$E,2419,7 +$E,2419,38 +$E,2420,108 +$E,2422,7 +$E,2536,465 +$E,2537,89 +$E,2539,12 +$E,2539,62 +$E,2540,35 +$E,2540,31 +$E,2541,54 +$E,2541,12 +$E,2541,60 +$E,2542,39 +$E,2543,17 +$E,2543,35 +$E,2543,57 +$E,2545,91 +$E,2545,48 +$E,2546,8 +$E,2591,113 +$E,2592,62 +$E,2593,57 +$E,2594,24 +$E,2595,20 +$E,2595,33 +$E,2596,72 +$E,2596,79 +$E,2597,86 +$E,2597,46 +$E,2598,38 +$E,2599,31 +$E,2600,20 +$E,2601,14 +$E,2654,440 +$E,2656,7 +$E,2656,47 +$E,2656,51 +$E,2657,30 +$E,2658,27 +$E,2658,48 +$E,2659,65 +$E,2659,28 +$E,2659,86 +$E,2660,39 +$E,2660,39 +$E,2661,81 +$E,2661,79 +$E,2661,7 +$E,2662,79 +$E,2663,56 +$E,2663,31 +$E,2664,8 +$E,2724,455 +$E,2726,23 +$E,2726,12 +$E,2726,48 +$E,2727,35 +$E,2727,24 +$E,2727,24 +$E,2728,70 +$E,2728,65 +$E,2728,22 +$E,2729,42 +$E,2729,92 +$E,2730,84 +$E,2730,22 +$E,2730,39 +$E,2731,71 +$E,2731,33 +$E,2733,118 +$E,2734,44 +$E,2849,568 +$E,2849,126 +$E,2851,16 +$E,2851,12 +$E,2852,75 +$E,2852,19 +$E,2852,6 +$E,2852,70 +$E,2853,63 +$E,2853,15 +$E,2854,92 +$E,2855,60 +$E,2855,24 +$E,2855,56 +$E,2856,7 +$E,2856,71 +$E,2857,103 +$E,2858,12 +$E,2904,168 +$E,2904,44 +$E,2906,54 +$E,2906,49 +$E,2907,71 +$E,2908,6 +$E,2908,56 +$E,2909,24 +$E,2909,32 +$E,2910,16 +$E,2910,67 +$E,2911,73 +$E,2911,60 +$E,2912,28 +$E,2913,9 +$E,2966,548 +$E,2968,7 +$E,2968,59 +$E,2969,71 +$E,2970,56 +$E,2970,14 +$STOP,290,35114897.36,10271,660,17872,30,5,50 +$START,291,13437 +$E,6158,7 +$E,11710,60 +$E,34330,99 +$E,43669,22 +$E,52569,67 +$STOP,291,35114909.11,26086,5,17531,16,2,8 +$START,292,26536 +$E,8763,74 +$E,28021,19 +$E,61192,568 +$E,73066,6 +$STOP,292,35114919.18,39179,4,18146,13,0,3 +$START,293,39769 +$E,70555,240 +$E,74762,6 +$STOP,293,35114929.26,52399,2,17834,11,0,4 +$START,294,52824 +$E,6365,4 +$E,6897,152 +$E,43342,229 +$E,49747,6 +$E,77403,251 +$STOP,294,35114939.32,65470,5,17957,7,4,7 +$START,295,383 +$E,73541,5 +$STOP,295,35114949.39,13005,1,18105,8,1,3 +$START,296,13421 +$E,16224,7 +$E,18496,996 +$E,30624,4 +$E,42502,6 +$E,44166,743 +$E,44168,72 +$E,44169,75 +$E,44170,31 +$E,44171,14 +$E,44171,32 +$E,44172,35 +$E,44172,132 +$E,44173,6 +$E,44173,78 +$E,44174,104 +$E,44175,190 +$E,44177,20 +$E,44323,499 +$E,44325,80 +$E,44325,92 +$E,44325,99 +$E,44326,158 +$E,44327,127 +$E,44327,271 +$E,44328,12 +$E,44328,112 +$E,44329,231 +$E,44329,60 +$E,44330,81 +$E,44331,128 +$E,44332,35 +$E,44557,316 +$E,44557,56 +$E,44558,12 +$E,44559,44 +$E,44560,16 +$E,44560,127 +$E,44561,15 +$E,44561,83 +$E,44561,63 +$E,44563,124 +$E,44563,71 +$E,44563,39 +$E,44564,176 +$E,44565,57 +$E,44566,44 +$E,44566,31 +$E,44566,23 +$E,44784,207 +$E,44784,70 +$E,44786,7 +$E,44786,153 +$E,44787,14 +$E,44787,166 +$E,44788,51 +$E,44789,76 +$E,44790,64 +$E,44791,88 +$E,44791,35 +$E,44791,6 +$E,44792,49 +$E,44793,17 +$E,44793,14 +$E,44815,232 +$E,44816,14 +$E,44817,31 +$E,44818,30 +$E,44819,15 +$E,44821,17 +$E,44824,41 +$E,44824,7 +$E,45096,135 +$E,45099,60 +$E,45099,15 +$E,45100,118 +$E,45100,7 +$E,45101,60 +$E,45102,41 +$E,45103,43 +$E,45105,31 +$E,45105,20 +$E,45106,6 +$E,45252,103 +$E,45253,63 +$E,45256,15 +$E,45258,12 +$E,45259,12 +$E,45261,6 +$E,45261,9 +$E,45448,83 +$E,45448,42 +$E,45452,56 +$E,45452,6 +$E,45453,40 +$E,45453,12 +$E,45454,48 +$E,45455,31 +$E,46073,72 +$E,46077,14 +$E,46081,15 +$E,46081,6 +$E,46596,65 +$E,46603,24 +$E,47190,63 +$E,47440,6 +$E,47600,4 +$E,48971,6 +$E,49627,6 +$E,53721,24 +$E,54315,12 +$E,54909,32 +$E,55502,44 +$E,56096,60 +$E,56099,6 +$E,56103,6 +$E,56697,35 +$E,56704,24 +$E,57322,90 +$E,57323,88 +$E,57326,14 +$E,57327,24 +$E,57328,15 +$E,57328,4 +$E,57329,7 +$E,57329,4 +$E,57330,14 +$E,57331,12 +$E,57332,4 +$E,57947,112 +$E,57951,10 +$E,57952,73 +$E,57954,14 +$E,57955,7 +$E,57956,24 +$E,57956,19 +$E,58471,184 +$E,58472,56 +$E,58474,48 +$E,58475,32 +$E,58475,40 +$E,58476,61 +$E,58476,48 +$E,58477,7 +$E,58478,12 +$E,58479,39 +$E,58481,7 +$E,59065,376 +$E,59066,18 +$E,59067,51 +$E,59067,126 +$E,59068,104 +$E,59069,77 +$E,59069,62 +$E,59070,39 +$E,59071,16 +$E,59071,58 +$E,59071,71 +$E,59072,104 +$E,59073,79 +$E,59074,6 +$E,59075,7 +$E,59660,43 +$E,59661,31 +$E,59661,32 +$E,59661,54 +$E,59662,67 +$E,59663,111 +$E,59663,67 +$E,59664,8 +$E,59664,31 +$E,59665,78 +$E,59665,49 +$E,59667,79 +$E,59668,24 +$E,59668,19 +$E,60252,300 +$E,60253,6 +$E,60254,27 +$E,60255,30 +$E,60256,56 +$E,60256,63 +$E,60258,39 +$E,60259,92 +$E,60259,31 +$E,60259,46 +$E,60261,60 +$E,60261,35 +$E,60262,7 +$E,60471,65 +$E,60473,12 +$E,60477,8 +$E,60478,7 +$E,60846,243 +$E,60848,69 +$E,60849,60 +$E,60850,71 +$E,60851,85 +$E,60851,15 +$E,60852,24 +$E,60853,49 +$E,60854,35 +$E,60855,9 +$E,61440,209 +$E,61440,28 +$E,61441,22 +$E,61442,15 +$E,61443,49 +$E,61443,54 +$E,61443,48 +$E,61444,24 +$E,61444,30 +$E,61445,7 +$E,61446,38 +$E,61446,60 +$E,61447,39 +$E,61448,48 +$E,61449,31 +$E,62033,176 +$E,62035,7 +$E,62036,51 +$E,62036,12 +$E,62037,17 +$E,62038,21 +$E,62040,24 +$E,62040,19 +$E,62041,57 +$E,62042,30 +$E,62428,6 +$E,62627,167 +$E,62630,8 +$E,62630,11 +$E,62631,44 +$E,62632,35 +$E,62634,56 +$E,62635,41 +$E,62636,15 +$E,63221,107 +$E,63223,4 +$E,63225,7 +$E,63227,29 +$E,63228,15 +$E,63229,14 +$E,63230,7 +$E,63815,65 +$E,63817,6 +$E,63818,6 +$E,63821,6 +$E,63823,12 +$E,64408,35 +$E,64412,11 +$E,64414,12 +$E,65002,54 +$E,65007,7 +$E,66190,28 +$E,66543,4 +$E,66783,6 +$E,67377,7 +$E,67971,12 +$E,72502,5 +$E,77479,12 +$STOP,296,35114959.44,35192,260,17933,23,7,16 +$START,297,38266 +$E,2098,31 +$E,4598,22 +$E,5505,18 +$E,6098,24 +$E,7098,18 +$E,9598,56 +$E,9669,38 +$E,12098,31 +$E,14598,12 +$E,15005,35 +$E,16401,6 +$E,17106,14 +$E,19598,39 +$E,22122,67 +$E,22130,4 +$E,22131,9 +$E,22723,63 +$E,22727,8 +$E,24598,39 +$E,27098,34 +$E,29598,31 +$E,32098,60 +$E,34598,62 +$E,34638,7 +$E,37098,70 +$E,37379,11 +$E,37567,66 +$E,37576,7 +$E,37696,6 +$E,39597,82 +$E,39613,12 +$E,42097,62 +$E,42130,7 +$E,44597,73 +$E,44612,7 +$E,44622,9 +$E,44629,7 +$E,44630,15 +$E,47097,48 +$E,49597,41 +$E,52097,47 +$E,52527,70 +$E,52535,15 +$E,52542,24 +$E,52605,19 +$E,54597,60 +$E,54609,9 +$E,57097,51 +$E,57129,6 +$E,57152,67 +$E,57160,8 +$E,59597,67 +$E,59613,4 +$E,62097,120 +$E,62113,8 +$E,62128,8 +$E,62129,24 +$E,64597,131 +$E,67097,86 +$E,67110,7 +$E,67113,12 +$E,67114,15 +$E,69597,103 +$E,69618,9 +$E,69628,14 +$E,69637,24 +$E,69637,6 +$E,72097,56 +$E,74597,51 +$E,77097,82 +$E,77105,15 +$STOP,297,35114971.1,51824,71,18741,12,3,21 +$START,298,53350 +$E,655,327 +$E,6603,1056 +$E,6605,49 +$E,6607,19 +$E,6608,37 +$E,6608,23 +$E,6609,29 +$E,6609,9 +$E,6609,24 +$E,6610,29 +$E,6611,262 +$E,6613,35 +$E,6837,526 +$E,6839,136 +$E,6840,22 +$E,6841,48 +$E,6842,88 +$E,6843,206 +$E,6844,70 +$E,6844,20 +$E,6846,206 +$E,6848,12 +$E,12696,6 +$E,54704,60 +$E,63709,6 +$STOP,298,35114981.33,653,25,18444,7,0,7 +$START,299,1316 +$E,25565,30 +$STOP,299,35114991.45,13939,1,17559,8,0,6 +$ENV,299,35114991.51,23.9,56.2,24.1,54.2,23.79,972.00 +$START,300,14991 +$E,11347,4 +$E,46017,7 +$E,66064,4 +$STOP,300,35115001.59,27626,3,18250,9,3,3 +$START,301,28057 +$E,17979,6 +$E,22439,4 +$E,56506,471 +$E,56506,96 +$E,56508,88 +$E,56509,24 +$E,56511,8 +$E,56512,88 +$E,56512,96 +$E,56513,20 +$E,56513,61 +$E,56515,118 +$E,56516,31 +$E,56517,4 +$E,56623,225 +$E,56623,56 +$E,56625,33 +$E,56626,113 +$E,56626,76 +$E,56627,71 +$E,56628,152 +$E,56629,12 +$E,56629,63 +$E,56630,73 +$E,56631,140 +$E,56632,51 +$E,56633,19 +$E,56655,235 +$E,56655,24 +$E,56656,48 +$E,56656,56 +$E,56657,76 +$E,56659,39 +$E,56660,91 +$E,56660,24 +$E,56660,56 +$E,56662,35 +$E,56662,40 +$E,56663,27 +$E,56663,15 +$E,56670,366 +$E,56671,79 +$E,56673,104 +$E,56674,15 +$E,56675,78 +$E,56675,44 +$E,56676,60 +$E,56677,95 +$E,56677,48 +$E,56678,11 +$E,56679,99 +$E,56701,280 +$E,56702,127 +$E,56703,30 +$E,56704,15 +$E,56704,188 +$E,56705,86 +$E,56705,31 +$E,56706,9 +$E,56706,102 +$E,56706,30 +$E,56707,45 +$E,56708,108 +$E,56708,31 +$E,56709,97 +$E,56710,88 +$E,56711,35 +$E,56733,359 +$E,56733,43 +$E,56735,4 +$E,56735,126 +$E,56736,71 +$E,56736,32 +$E,56737,39 +$E,56737,15 +$E,56738,143 +$E,56738,71 +$E,56738,82 +$E,56739,31 +$E,56739,27 +$E,56740,63 +$E,56740,92 +$E,56740,26 +$E,56741,71 +$E,56742,19 +$E,56764,319 +$E,56765,112 +$E,56765,48 +$E,56767,24 +$E,56767,49 +$E,56767,7 +$E,56768,154 +$E,56768,56 +$E,56769,31 +$E,56769,52 +$E,56770,76 +$E,56770,80 +$E,56771,104 +$E,56771,15 +$E,56772,88 +$E,56773,28 +$E,56774,12 +$E,56780,207 +$E,56780,139 +$E,56782,48 +$E,56783,54 +$E,56784,126 +$E,56784,71 +$E,56786,56 +$E,56786,143 +$E,56788,59 +$E,56789,23 +$E,56811,199 +$E,56811,14 +$E,56813,92 +$E,56814,26 +$E,56815,8 +$E,56816,35 +$E,56817,31 +$E,56817,6 +$E,56817,7 +$E,56818,33 +$E,56818,60 +$E,56819,24 +$E,56820,4 +$E,56842,412 +$E,56843,22 +$E,56844,67 +$E,56844,44 +$E,56845,28 +$E,56846,44 +$E,56847,46 +$E,56848,40 +$E,56848,88 +$E,56849,108 +$E,56849,36 +$E,56851,71 +$E,56852,6 +$E,56873,249 +$E,56874,23 +$E,56874,16 +$E,56876,31 +$E,56877,7 +$E,56877,24 +$E,56877,28 +$E,56878,4 +$E,56879,6 +$E,56879,34 +$E,56880,47 +$E,56880,63 +$E,56882,30 +$E,56882,15 +$E,56904,232 +$E,56905,104 +$E,56907,11 +$E,56907,14 +$E,56908,67 +$E,56909,88 +$E,56909,38 +$E,56910,10 +$E,56911,24 +$E,56911,6 +$E,56912,15 +$E,56913,67 +$E,56914,12 +$E,56936,230 +$E,56936,92 +$E,56937,28 +$E,56938,86 +$E,56939,76 +$E,56940,30 +$E,56940,156 +$E,56941,35 +$E,56941,11 +$E,56942,67 +$E,56942,35 +$E,56943,78 +$E,56944,63 +$E,56945,28 +$E,56998,207 +$E,57000,12 +$E,57001,44 +$E,57002,28 +$E,57003,63 +$E,57004,20 +$E,57005,25 +$E,57005,28 +$E,57007,20 +$E,57007,19 +$E,57008,7 +$E,57029,232 +$E,57030,15 +$E,57031,7 +$E,57033,33 +$E,57034,44 +$E,57035,44 +$E,57036,15 +$E,57036,24 +$E,57036,7 +$E,57037,63 +$E,57038,26 +$E,57061,243 +$E,57061,35 +$E,57062,56 +$E,57062,6 +$E,57064,83 +$E,57064,40 +$E,57065,65 +$E,57065,22 +$E,57067,79 +$E,57068,33 +$E,57069,60 +$E,57070,15 +$E,57071,7 +$E,57076,344 +$E,57077,19 +$E,57079,126 +$E,57079,72 +$E,57080,83 +$E,57080,71 +$E,57081,28 +$E,57082,57 +$E,57082,17 +$E,57083,22 +$E,57083,24 +$E,57085,35 +$E,57085,25 +$E,57108,187 +$E,57110,49 +$E,57112,31 +$E,57112,40 +$E,57113,31 +$E,57115,47 +$E,57116,27 +$E,57139,129 +$E,57139,63 +$E,57142,7 +$E,57142,25 +$E,57143,79 +$E,57145,30 +$E,57145,28 +$E,57146,15 +$E,57146,39 +$E,57147,23 +$E,57148,7 +$E,57170,124 +$E,57170,34 +$E,57172,51 +$E,57173,31 +$E,57174,79 +$E,57175,22 +$E,57176,35 +$E,57177,15 +$E,57177,39 +$E,57179,31 +$E,57217,236 +$E,57217,39 +$E,57218,65 +$E,57220,33 +$E,57220,70 +$E,57220,32 +$E,57221,55 +$E,57222,14 +$E,57224,65 +$E,57224,48 +$E,57225,43 +$E,57226,24 +$E,57248,131 +$E,57249,75 +$E,57251,8 +$E,57251,62 +$E,57253,63 +$E,57253,6 +$E,57253,28 +$E,57255,7 +$E,57257,15 +$E,57257,14 +$E,57257,7 +$E,57280,131 +$E,57280,46 +$E,57282,52 +$E,57284,47 +$E,57284,46 +$E,57285,5 +$E,57287,35 +$E,57288,12 +$E,57311,247 +$E,57311,45 +$E,57312,17 +$E,57313,22 +$E,57313,50 +$E,57315,94 +$E,57316,67 +$E,57316,30 +$E,57317,88 +$E,57317,4 +$E,57318,49 +$E,57319,25 +$E,57320,25 +$STOP,301,35115011.65,52836,485,18229,26,4,39 +$START,302,56465 +$E,3039,275 +$E,3043,6 +$E,3044,19 +$E,3045,4 +$E,3047,35 +$E,3053,14 +$E,3053,7 +$E,3054,7 +$E,3056,8 +$E,3057,7 +$E,3059,6 +$E,3067,24 +$E,3069,19 +$E,3070,28 +$E,3071,56 +$E,5539,204 +$E,5542,4 +$E,5543,17 +$E,5552,15 +$E,5555,7 +$E,5559,12 +$E,5562,18 +$E,5563,33 +$E,5564,17 +$E,8039,185 +$E,8050,6 +$E,8062,7 +$E,8079,22 +$E,8080,7 +$E,10539,127 +$E,10544,12 +$E,10548,8 +$E,10552,12 +$E,10553,7 +$E,10558,15 +$E,10562,6 +$E,10563,4 +$E,10571,17 +$E,10572,9 +$E,11180,103 +$E,11188,7 +$E,11189,7 +$E,11195,40 +$E,11198,12 +$E,11203,7 +$E,11641,76 +$E,11906,873 +$E,13039,46 +$E,13524,35 +$E,13539,12 +$E,15539,14 +$E,18039,6 +$E,27105,15 +$E,30539,7 +$E,35539,7 +$E,36126,6 +$E,66722,7 +$E,73147,151 +$E,73156,24 +$E,73156,17 +$E,73381,96 +$E,73387,18 +$E,73390,12 +$STOP,302,35115023.67,4329,63,18720,14,6,13 +$START,303,5332 +$E,29630,6 +$E,50958,14 +$E,73467,6 +$STOP,303,35115033.90,17967,3,18188,9,2,4 +$START,304,18433 +$E,22968,28 +$E,28595,16 +$E,31409,7 +$E,32399,160 +$E,34223,72 +$E,34760,14 +$E,38443,24 +$E,39849,30 +$E,41255,45 +$E,41763,7 +$E,42663,99 +$E,44069,124 +$E,45476,9 +$E,46411,73 +$E,46883,18 +$E,47177,10 +$E,47469,4 +$E,48290,44 +$E,49697,60 +$E,50295,73 +$E,50946,4 +$E,51104,38 +$E,52510,12 +$E,54179,88 +$E,55324,22 +$E,58067,39 +$E,58138,24 +$E,60951,12 +$E,66579,80 +$E,69392,12 +$E,69715,41 +$E,70799,7 +$E,75020,67 +$E,76426,96 +$E,77833,7 +$STOP,304,35115043.97,31389,35,18035,9,2,5 + diff --git a/data/DATALOG_AIRDOS_GEO.TXT b/data/DATALOG_AIRDOS_GEO.TXT new file mode 100644 index 0000000..d9f52ba --- /dev/null +++ b/data/DATALOG_AIRDOS_GEO.TXT @@ -0,0 +1,258 @@ +$AIRDOS,GEO_1024_v1,NaI(Tl)-D16x30,1290c40506a2a0924513a000a70420b3 +$GBGSV,1,1,00,1*76 +$GNGLL,,,,,,V,N*7A +$GNRMC,,V,,,,,,,,,,N,V*37 +$GNVTG,,,,,,,,,N*2E +$GNGGA,,,,,,0,00,99.99,,,,,,*56 +$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,1*33 +$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,2*30 +$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,3*31 +$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,4*36 +$GPGSV,1,1,00,1*64 +$GLGSV,1,1,00,1*78 +$GAGSV,1,1,00,7*73 +$GBGSV,1,1,00,1*76 +$GNGLL,,,,,,V,N*7A +$GNRMC,,V,,,,,,,,,,N,V*37 +$GNVTG,,,,,,,,,N*2E +$GNGGA,,,,,,0,00,99.99,,,,,,*56 +$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,1*33 +$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,2*30 +$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,3*31 +$TIME,61.3 +$HIST,0,73.0,100080.25,21.94,2.67,-87,0,0,0,1,34275,125,20,3,4,2,4,0,1,1,0,1,2,0,0,0,0,1,0,2,0,0,0 +$HITS,22,4801,38,8244,119,9699,26,12520,211,24413,34,24600,53,33393,65,34160,41,42607,27,50467,96,57464,26,61633,107,64264,155,64286,27,65274,34,66794,61,68281,175,69509,192,82702,26,87430,25,89863,65,99728,64 +$HIST,1,85.30,100078.25,21.94,2.67,-57,0,0,0,1,34250,134,32,2,4,3,1,3,2,2,6,1,1,0,0,2,0,1,0,0,1,1,1 +$HITS,16,5018,26,5047,25,5078,97,7189,29,8467,30,10877,32,17935,31,18972,25,19114,58,24989,35,39483,44,39979,30,40277,44,75638,42,78859,64,81954,52 +$HIST,2,97.59,100078.25,21.94,2.67,-43,0,0,0,0,34262,125,24,1,5,1,4,6,3,1,1,2,1,3,2,2,1,0,0,1,0,0,4 +$HITS,15,8149,28,10030,228,15144,27,17358,30,20495,68,29187,34,38675,29,49512,58,50879,61,63618,55,65528,28,69619,38,70351,42,77887,37,98678,48 +$HIST,3,109.87,100079.00,21.94,2.67,-37,0,0,1,0,34277,121,19,1,4,3,4,4,3,1,0,0,0,1,2,1,0,2,1,0,1,1,0 +$HITS,17,14377,28,20069,46,20434,31,23282,119,26066,116,26870,88,28093,54,28670,33,33190,38,38592,41,44431,49,48858,100,50087,48,50124,145,84009,64,85644,34,87660,93 +$HIST,4,122.16,100081.25,21.94,2.67,-35,0,0,0,1,34295,103,18,3,2,3,3,2,1,3,1,2,0,1,1,2,2,1,0,1,1,1,0 +$HITS,17,4655,55,9064,58,17048,92,23584,33,30500,68,32691,72,33503,39,50931,120,51633,132,55460,31,61529,73,64385,50,65024,28,75131,41,76275,26,93464,56,93601,95 +$HIST,5,134.45,100080.25,21.94,2.67,-34,0,0,0,0,34282,118,23,1,2,4,3,1,3,2,1,0,1,1,1,0,1,0,0,1,1,1,0 +$HITS,17,971,92,8514,55,19957,35,21636,30,28835,34,30564,79,31893,36,40070,26,43697,30,53500,152,55253,92,55737,130,58792,37,66467,26,73513,53,89355,100,98490,184 +$HIST,6,146.75,100082.00,21.94,2.67,-33,0,0,0,0,34288,108,16,4,3,4,2,2,2,1,1,4,1,2,1,0,3,3,0,0,0,0,0 +$HITS,19,3451,129,9059,78,13236,30,13266,64,16410,76,19459,120,19906,44,20778,63,29306,50,39038,40,46386,26,48764,36,54087,65,61287,53,83055,37,85285,29,88830,28,92112,32,94461,58 +$HIST,7,159.4,100078.25,21.88,2.67,-33,0,0,0,0,34271,129,19,3,2,5,2,0,0,4,4,2,0,1,3,0,0,0,1,2,1,0,0 +$HITS,15,591,63,820,37,20637,29,34528,97,40608,39,42707,39,49322,28,49789,25,50528,29,61131,49,63334,131,70146,58,70486,31,71138,41,76655,94 +$HIST,8,171.33,100083.00,21.94,2.67,-33,0,0,0,0,34275,117,27,5,3,1,3,3,2,4,1,1,0,0,0,0,0,0,0,1,0,3,0 +$HITS,18,6986,95,18444,50,18542,84,26376,81,32480,79,32492,46,36695,68,40192,55,48453,38,50211,36,56137,96,59827,39,61384,33,62395,54,74652,93,85229,39,89716,48,93532,25 +$HIST,9,183.62,100079.75,21.88,2.67,-33,0,0,0,0,34277,122,19,7,3,3,1,2,0,2,4,1,0,0,0,0,1,1,0,0,1,1,2 +$HITS,17,369,110,12756,39,17046,71,17393,127,20103,176,31421,26,34958,43,36768,57,39099,27,57097,74,60429,59,67685,26,84389,28,86661,32,89934,76,94925,27,95902,25 +$HIST,10,195.91,100070.50,21.88,2.67,-33,0,0,0,1,34244,131,30,5,4,2,2,1,1,2,5,2,1,0,4,1,3,0,1,1,1,2,0 +$HITS,20,136,30,1373,84,3365,35,4555,95,7616,32,8899,37,11697,81,30741,83,31827,106,42344,33,42811,45,47823,34,58588,70,60354,44,68719,28,78418,44,79036,40,97554,12,98153,90,99444,45 +$HIST,11,208.20,100080.50,21.88,2.67,-33,0,0,0,0,34307,104,11,0,3,1,4,2,0,3,4,0,2,0,0,0,1,1,0,1,0,1,2 +$HITS,17,13744,26,18113,207,20920,60,29531,50,31668,43,34627,57,35580,75,37558,33,41867,73,59581,130,63384,194,65171,31,85725,93,86169,53,90732,35,92854,26,96657,31 +$HIST,12,220.50,100084.75,21.88,2.67,-32,0,0,0,1,34287,109,20,3,4,3,0,1,0,1,1,3,2,0,0,1,0,2,1,4,0,2,0 +$HITS,19,108,149,14898,123,15713,59,21452,26,26992,27,27905,46,48532,33,53433,85,57514,45,58594,32,63215,46,70471,193,72118,25,74407,52,79173,42,81905,66,86694,64,88231,31,93870,173 +$HIST,13,232.79,100079.25,21.88,2.67,-33,0,0,0,1,34280,123,17,3,2,3,1,1,1,3,3,0,3,1,1,0,0,0,2,0,1,0,0 +$HITS,18,3215,47,4771,45,16732,180,22885,37,27309,30,27842,94,29341,36,34766,225,43772,66,50850,26,60414,246,61699,212,64979,41,75920,40,78731,70,86796,85,86870,29,90210,40 +$HIST,14,245.10,100083.75,21.88,2.67,-33,0,0,0,0,34263,132,26,4,7,2,3,4,1,2,1,5,0,2,0,0,0,0,0,0,1,1,0 +$HITS,10,1298,40,6290,69,7590,26,23440,36,24822,73,72861,72,75606,36,75902,134,78061,43,89605,27 +$HIST,15,257.37,100082.00,21.88,2.67,-33,0,0,0,2,34310,99,18,3,5,2,2,1,2,1,0,1,0,0,1,2,0,1,0,0,1,0,0 +$HITS,13,20444,59,31628,25,39668,36,48656,96,53101,73,53355,99,56322,45,59740,37,63826,31,73096,119,81666,60,84936,49,89410,71 +$HIST,16,269.66,100084.50,21.88,2.67,-33,0,0,0,1,34296,117,16,2,3,4,1,2,0,2,1,1,0,1,1,0,1,0,0,0,2,0,0 +$HITS,13,8948,33,38186,25,38259,73,40555,90,44845,82,47399,32,50181,49,50460,33,51997,28,69548,33,93410,34,95643,52,98285,64 +$HIST,17,281.94,100087.00,21.88,2.67,-33,0,0,0,0,34274,135,16,1,0,1,1,2,2,0,1,3,1,2,0,3,0,2,0,0,1,1,0 +$HITS,18,3053,82,5143,71,21741,38,36128,67,43033,145,49406,42,49745,46,50604,26,56877,39,59140,139,66988,50,68731,58,72981,36,74730,26,75998,36,91718,64,94931,42,98746,37 +$HIST,18,294.23,100083.00,21.81,2.67,-33,0,0,0,0,34286,104,20,3,5,3,2,1,3,3,2,1,0,3,1,1,1,1,1,0,3,1,1 +$HITS,18,5334,49,12697,37,28797,47,34576,33,37313,56,42330,67,43847,87,45589,54,48915,25,57495,60,68374,38,70123,66,70196,44,71853,58,75839,98,91688,26,92097,35,94592,30 +$HIST,19,306.52,100087.00,21.88,2.67,-33,0,0,0,2,34272,122,16,3,3,3,1,3,1,1,2,2,1,2,2,0,0,1,3,0,0,0,1 +$HITS,23,8924,45,12756,75,14809,50,19181,38,21189,43,21560,200,33250,83,34297,39,35755,50,39351,61,40507,36,42645,26,48440,34,64599,26,67393,90,70167,32,80328,116,82270,45,82925,30,89496,92,95143,42,95685,46,99387,108 +$HIST,20,318.83,100083.00,21.81,2.67,-33,0,0,0,1,34280,119,20,5,1,4,4,0,2,1,0,6,0,0,1,0,1,0,1,1,1,1,0 +$HITS,15,1202,44,5647,31,9500,98,22337,40,27156,87,28564,43,40066,101,40480,77,47794,42,55038,52,65764,121,66242,40,86093,36,93010,27,96038,36 +$HIST,21,331.11,100085.25,21.81,2.67,-33,0,0,0,1,34254,125,30,3,2,3,7,1,2,3,1,1,3,1,1,1,1,1,1,1,0,0,1 +$HITS,20,4545,31,17049,35,17543,43,18339,29,24310,38,29823,185,43055,32,43081,68,44035,41,49461,29,50894,40,59667,47,63964,64,67544,72,69144,152,74864,78,87027,114,87550,54,93036,47,97880,79 +$HIST,22,343.41,100080.00,21.81,2.67,-33,0,0,0,0,34256,130,24,8,4,2,2,2,3,3,3,1,4,0,0,0,0,1,1,2,1,0,0 +$HITS,17,2616,95,6790,114,8845,44,15427,43,17748,99,36923,75,39733,80,57535,29,60371,50,66190,61,68191,87,81263,93,83485,95,96083,68,96436,25,98559,25,99289,73 +$HIST,23,355.70,100082.25,21.81,2.67,-33,0,0,0,0,34293,111,26,2,3,2,2,2,1,0,2,1,1,2,0,2,0,0,0,0,1,0,0 +$HITS,13,8639,26,8994,118,10055,74,11771,57,22250,74,27346,34,28662,108,29421,74,42642,59,63098,117,70725,96,76818,39,82477,41 +$HIST,24,367.99,100084.25,21.81,2.67,-33,0,0,0,0,34282,119,18,1,2,5,0,1,2,5,0,1,2,0,2,0,3,0,0,0,2,0,0 +$HITS,19,3397,33,11284,74,14289,11,18599,35,35699,33,36502,29,37522,31,38378,67,39072,45,46642,101,46650,26,56495,88,56512,33,61337,38,70882,255,74679,74,79348,62,94821,36,97779,55 +$HIST,25,380.28,100086.75,21.81,2.67,-33,0,0,0,1,34268,122,27,5,4,2,3,1,4,2,0,0,2,1,1,1,1,0,0,0,0,0,1 +$HITS,18,681,77,7245,76,15930,80,32785,34,36342,25,54904,76,58256,34,76731,50,87182,80,87811,66,90723,29,92258,87,92509,38,96294,26,96925,59,97276,47,99634,38,99828,24 +$HIST,26,392.57,100087.50,21.81,2.67,-33,0,0,0,0,34276,121,26,1,3,1,6,2,0,0,0,0,1,0,1,0,2,0,1,2,0,0,0 +$HITS,21,2450,78,7483,71,14407,96,19461,57,21244,69,27427,28,32124,62,36098,32,42958,68,44616,46,46637,32,49665,31,50341,71,52878,50,60906,141,61014,184,76897,39,82166,162,89813,39,89913,51,95988,46 +$HIST,27,404.88,100087.50,21.81,2.67,-33,0,0,0,0,34276,130,18,2,1,2,1,3,4,1,1,2,0,0,0,0,0,0,0,0,0,0,0 +$HITS,23,5699,44,12220,33,18024,191,22002,37,27791,79,31263,126,34981,57,36419,70,42133,80,43228,47,52434,79,58939,54,62573,29,64837,39,69159,51,73684,36,75516,26,78505,39,93348,43,93855,36,96492,28,98723,28,98995,47 +$HIST,28,417.18,100090.25,21.81,2.67,-33,0,0,0,0,34273,105,30,9,2,2,4,1,2,3,0,2,2,1,1,0,1,0,3,1,1,3,0 +$HITS,18,13592,27,16545,30,21323,56,27763,53,30023,27,38319,43,43561,62,45257,69,46337,32,47051,33,52099,50,75934,27,77394,86,86652,68,87723,39,90185,25,92026,33,95902,0 +$HIST,29,429.48,100084.50,21.81,2.67,-33,0,0,0,0,34288,92,26,0,5,3,1,2,5,2,0,2,1,0,1,2,1,0,0,0,1,3,1 +$HITS,28,5660,80,8421,78,9075,57,11471,70,16296,57,19981,53,20561,70,26229,46,30583,52,30649,29,44205,77,48130,49,56251,25,59341,58,59679,56,61185,47,66625,40,67755,30,68979,41,71490,30,78954,26,82008,32,82444,134,84485,25,89586,34,95012,26,96674,51,98882,75 +$HIST,30,441.79,100089.25,21.81,2.67,-33,0,0,0,0,34288,122,16,3,3,1,4,1,2,2,0,0,1,1,0,0,1,1,1,0,0,1,0 +$HITS,16,15817,30,23759,58,24187,56,37753,29,38419,56,40279,32,40889,148,45385,95,51960,45,59753,80,65756,31,78732,57,84166,39,88429,64,92150,72,96565,42 +$HIST,31,454.9,100086.25,21.81,2.67,-33,0,0,0,2,34237,139,26,5,2,6,2,2,1,3,3,3,1,3,1,0,2,0,3,1,0,0,0 +$HITS,22,4896,111,7368,24,14286,143,17956,56,25137,172,28220,28,29730,25,31103,29,31378,25,32987,37,38749,33,53294,43,55973,57,66145,35,68081,56,70570,41,81317,30,86221,32,86684,58,88421,44,90435,49,94684,37 +$HIST,32,466.39,100082.50,21.81,2.67,-33,0,0,0,1,34307,100,21,1,3,3,0,0,0,2,1,1,3,0,0,0,2,0,2,1,0,1,1 +$HITS,14,2272,29,7259,51,9580,33,10908,85,21476,48,34365,60,39943,36,43772,60,60940,100,61141,32,66294,58,83069,31,86265,66,92030,98 +$HIST,33,478.67,100085.00,21.81,2.67,-33,0,0,0,0,34236,144,22,5,8,2,5,0,1,3,3,2,1,4,3,0,1,0,0,0,0,0,0 +$HITS,24,2310,178,4597,36,6413,97,6653,94,8405,57,11432,30,13763,44,14073,31,17665,70,19523,41,22733,28,25942,63,27033,33,27634,49,30204,56,45551,25,45703,64,49646,80,58664,58,68033,27,79874,33,84891,25,89451,112,92208,63 +$HIST,34,490.98,100081.50,21.75,2.67,-33,0,0,0,2,34276,124,21,4,3,4,3,2,1,4,2,1,0,0,0,0,1,0,2,0,0,0,0 +$HITS,14,1835,44,3990,54,6010,44,7479,58,12297,44,24646,40,26355,35,26800,56,39353,76,50231,38,60837,37,77483,36,94339,25,99015,27 +$HIST,35,503.25,100084.00,21.75,2.67,-33,0,0,0,2,34275,103,28,2,2,5,5,3,3,5,2,2,2,2,0,0,2,1,0,0,0,0,2 +$HITS,18,260,27,2824,36,9015,86,21862,68,23288,34,25728,32,26814,29,28782,31,31437,27,36714,42,49021,114,55933,47,79957,31,83828,69,86292,31,95763,37,98264,53,98940,65 +$HIST,36,515.55,100086.00,21.75,2.67,-33,0,0,1,3,34276,118,19,4,1,2,0,2,4,1,1,2,1,0,1,1,0,0,1,1,0,0,1 +$HITS,24,2598,91,4098,78,9315,28,12411,47,18874,51,26548,26,36661,37,43009,65,48021,64,49430,53,56007,44,57673,25,58635,145,61426,42,66517,58,66541,44,69839,34,69988,64,74704,73,79515,37,79709,71,91757,53,93036,30,96628,36 +$HIST,37,527.85,100084.00,21.75,2.67,-33,0,0,0,1,34255,137,31,1,2,3,3,4,2,1,2,1,2,0,0,0,1,0,0,0,1,0,0 +$HITS,17,13626,93,14001,58,17762,41,22998,44,25057,94,35439,49,46406,62,63596,26,67887,27,68107,140,69687,28,72358,60,78895,33,81253,66,94909,28,95261,52,97141,25 +$HIST,38,540.14,100086.25,21.75,2.67,-33,0,0,0,2,34267,129,22,1,3,3,3,2,2,2,0,3,1,1,0,0,0,1,0,0,1,0,1 +$HITS,20,8469,25,13009,25,16397,6,23213,53,27893,96,29962,65,35995,62,36288,50,36717,85,42210,96,59640,26,60583,121,61988,54,69293,37,72250,27,88766,37,93252,104,96218,28,96644,38,98634,26 +$HIST,39,552.43,100082.00,21.75,2.67,-33,0,0,0,0,34301,107,16,5,2,3,0,0,1,3,0,0,0,1,2,1,1,0,2,0,3,1,3 +$HITS,12,343,11,7092,191,10726,29,26681,40,30355,65,32872,30,53182,28,54602,51,70642,43,84985,46,92469,34,94508,45 +$HIST,40,564.71,100085.00,21.75,2.67,-33,0,0,0,0,34255,141,21,1,2,0,1,0,2,1,3,1,0,2,0,1,3,1,1,1,1,0,0 +$HITS,26,5304,72,17947,49,18509,72,19949,51,21621,55,25160,81,28163,93,37621,38,43628,129,50262,46,52075,48,53400,37,54997,105,57185,39,65560,78,67588,93,70859,32,75372,59,87299,81,91290,77,91692,48,91866,67,93229,50,93339,27,97780,67,99732,25 +$HIST,41,577.2,100083.50,21.75,2.67,-33,0,0,0,1,34267,115,27,4,3,7,1,0,3,0,2,1,3,4,2,0,0,2,0,1,0,0,1 +$HITS,20,2511,42,3708,40,10180,95,13770,35,14723,105,16543,249,21178,25,28942,96,36198,45,41988,83,41993,45,47466,32,47815,59,51467,29,52497,66,53533,31,69289,102,76644,61,84121,34,85853,30 +$HIST,42,589.32,100081.25,21.75,2.67,-33,0,0,0,1,34260,117,22,5,1,2,2,2,1,1,2,1,0,3,2,1,2,2,0,1,0,2,0 +$HITS,34,30,109,5369,49,11707,108,12784,55,15221,56,17495,25,20796,53,24574,39,24988,43,27930,37,36904,92,37850,28,40794,26,41823,55,44677,97,45308,93,46006,33,46396,32,51057,46,51417,27,55251,25,55630,95,57267,28,62087,192,66110,28,67075,36,69405,44,72222,57,78609,78,82681,38,84097,98,85277,28,86536,50,96282,47 +$HIST,43,601.66,100079.00,21.75,2.67,-33,0,0,1,0,34285,115,27,5,2,3,2,1,2,0,0,2,1,1,0,0,0,1,0,1,0,0,0 +$HITS,15,4098,27,8823,37,15683,97,22871,60,30784,73,31779,41,34049,50,36359,55,38988,119,45339,92,61059,60,66797,39,81090,125,96053,56,99906,80 +$HIST,44,613.94,100079.25,21.75,2.67,-33,0,0,0,0,34272,122,21,8,6,3,2,4,1,1,1,1,2,2,0,1,0,0,1,1,0,0,0 +$HITS,15,3938,79,20966,57,21494,103,32169,37,45238,106,45726,101,51121,34,59382,62,61871,47,73132,77,73342,102,80992,31,81467,26,92621,45,95223,126 +$HIST,45,626.23,100079.00,21.75,2.67,-33,0,0,0,0,34256,141,17,3,1,3,3,4,2,3,2,1,1,2,1,1,0,0,1,2,0,0,1 +$HITS,19,8065,27,13318,68,17993,174,27601,32,29236,88,33630,59,38004,29,38357,28,42091,97,45382,48,50452,34,58424,76,78865,32,83628,135,85405,27,87962,31,92554,42,95007,47,98905,34 +$HIST,46,638.52,100078.75,21.75,2.67,-33,0,0,0,0,34262,123,26,7,6,4,1,1,0,0,1,4,1,2,1,2,1,1,0,1,0,2,0 +$HITS,18,1800,28,10732,41,22331,48,35276,57,37108,36,38577,90,48756,25,51175,39,70163,151,70876,53,80391,133,81801,25,85670,34,86621,21,87410,26,87413,33,94766,122,98726,53 +$HIST,47,650.81,100079.75,21.75,2.67,-33,0,0,0,2,34293,103,20,2,4,3,4,0,1,2,0,2,1,0,3,1,1,1,0,3,0,1,0 +$HITS,17,2376,42,5359,67,9400,30,11812,92,12668,58,20697,42,23471,34,27834,73,29670,81,34055,45,52370,28,56748,18,64022,108,71847,62,76505,32,91048,86,95427,25 +$HIST,48,663.10,100082.50,21.75,2.67,-33,0,0,2,0,34262,121,22,5,3,5,3,2,2,2,2,1,2,0,2,2,1,2,1,0,2,0,0 +$HITS,20,1044,115,2335,88,4783,48,12211,32,28132,100,31177,70,36002,42,39542,26,59569,65,62785,42,64377,49,64804,33,65013,26,65676,33,66572,26,69088,61,72105,83,72235,26,84455,35,91156,30 +$HIST,49,675.39,100080.25,21.69,2.67,-33,0,0,0,0,34267,119,30,1,5,6,3,1,3,3,0,1,0,2,0,0,0,0,1,1,1,2,0 +$HITS,18,371,41,3507,25,7142,36,14378,32,15821,54,16316,106,22383,29,34746,28,35528,25,42676,27,51632,68,56161,34,68843,34,69178,61,77560,50,78632,28,89901,25,97861,253 +$HIST,50,687.69,100077.50,21.69,2.67,-33,0,0,0,1,34247,130,28,4,2,3,3,2,1,4,1,2,3,0,1,2,0,0,4,0,1,0,2 +$HITS,23,193,52,2842,27,6327,37,7672,27,10420,64,13845,65,18713,66,19649,31,30059,93,33566,192,35104,82,41301,87,43151,130,45311,29,65831,41,68535,28,70137,93,71742,162,75807,94,83925,195,86810,107,89041,230,96130,45 +$HIST,51,699.99,100081.50,21.69,2.67,-33,0,0,1,1,34264,121,21,4,6,3,4,0,1,2,2,5,2,1,1,1,0,2,0,0,1,1,1 +$HITS,19,6599,35,16679,43,22245,61,22743,88,24037,27,26114,59,39346,40,43387,36,45997,47,46541,40,46875,156,46888,25,56851,237,57224,27,69645,27,77688,77,82492,109,95088,36,95959,48 +$HIST,52,712.28,100079.75,21.69,2.67,-33,0,0,0,1,34269,117,23,6,0,1,4,6,5,1,1,5,0,1,1,0,0,1,1,0,1,0,1 +$HITS,19,1028,45,6769,192,6828,88,10846,57,23160,31,31019,90,51002,42,55316,62,55772,31,64424,41,66226,76,67814,47,68176,107,71100,37,72221,79,76537,26,78201,75,83649,41,93866,37 +$HIST,53,724.59,100079.75,21.69,2.67,-34,0,0,0,0,34291,104,22,9,4,0,1,1,0,0,0,2,2,3,0,1,0,1,2,1,0,1,1 +$HITS,18,7113,34,12599,36,15103,26,15321,40,21805,104,29419,35,41167,63,46046,49,51683,38,63680,46,66427,51,70224,54,72432,25,75727,39,78873,30,79151,29,88366,68,98074,45 +$HIST,54,736.88,100074.50,21.69,2.67,-33,0,0,0,0,34286,116,30,2,1,1,1,2,1,0,3,2,1,0,0,1,4,0,0,1,1,0,0 +$HITS,11,5722,34,13674,53,21768,31,27470,41,44239,44,47160,67,48583,60,51075,101,81675,77,90026,98,97891,25 +$HIST,55,749.14,100074.00,21.69,2.67,-33,0,0,0,1,34281,109,26,3,2,2,4,3,0,1,0,1,0,1,2,1,2,0,2,1,1,2,0 +$HITS,19,9863,41,10321,25,23074,48,29865,95,35135,37,39578,36,40590,27,40607,40,41197,25,45509,41,55660,50,57768,33,61657,29,62115,75,74897,56,76908,101,78139,79,83460,136,99077,191 +$HIST,56,761.44,100071.25,21.69,2.67,-33,0,0,1,0,34291,120,22,3,0,2,0,2,1,3,1,3,0,0,1,0,1,0,0,0,0,0,1 +$HITS,12,16737,73,16825,56,20514,25,22645,61,50918,31,52335,108,57086,45,71466,27,80162,51,82476,52,87301,27,89720,27 +$HIST,57,773.71,100074.75,21.69,2.67,-33,0,0,1,0,34286,112,23,1,6,1,4,1,2,2,4,1,1,2,0,2,0,0,0,0,0,1,1 +$HITS,13,24191,56,33372,29,43938,83,54445,65,57654,26,59257,59,74623,49,75534,25,76959,184,80777,69,83996,34,95466,42,98669,36 +$HIST,58,785.98,100077.25,21.69,2.67,-33,0,0,0,1,34279,114,23,1,3,3,4,2,2,3,4,0,0,0,2,0,1,0,0,0,0,0,0 +$HITS,22,5179,26,5611,93,7185,67,20433,133,27965,48,28880,32,42454,69,46969,49,50525,26,53985,26,56605,25,59578,163,65294,30,66874,68,72047,32,72485,82,77111,73,84172,82,84730,71,90784,86,98953,87,99118,61 +$HIST,59,798.28,100074.00,21.69,2.67,-33,0,0,0,0,34283,118,12,7,6,4,1,1,0,1,1,0,2,2,0,3,1,1,0,0,1,1,1 +$HITS,18,5360,49,5828,64,7543,26,15350,42,23094,113,30120,34,41032,74,47911,53,53209,41,61304,100,62714,39,64147,29,68670,49,74419,36,82678,35,82808,38,83253,49,89889,74 +$HIST,60,810.57,100073.75,21.69,2.67,-33,0,0,0,1,34287,122,21,3,4,0,3,1,0,1,2,1,1,0,1,0,1,1,1,1,0,1,0 +$HITS,11,11124,28,24280,49,25466,33,27611,83,37040,199,58264,28,60633,50,68170,28,78424,29,83436,54,90892,46 +$HIST,61,822.84,100076.75,21.69,2.67,-33,0,0,1,0,34296,109,22,3,4,1,2,0,0,0,1,1,1,1,2,0,0,0,1,0,0,2,0 +$HITS,17,3990,40,14056,32,15759,46,19958,33,30615,50,32501,32,32932,68,33249,160,36461,58,39106,92,48310,98,49783,31,67530,91,68575,34,70150,72,71649,33,84985,32 +$HIST,62,835.14,100075.00,21.63,2.67,-33,0,0,0,1,34257,130,21,4,2,6,1,5,3,3,2,3,1,2,2,2,0,1,0,0,1,0,0 +$HITS,17,673,82,4345,128,24431,53,25911,65,26488,73,33965,103,59838,67,63053,246,71949,33,73009,27,79373,41,80856,63,82808,36,83584,85,95764,31,98089,31,99225,32 +$HIST,63,847.42,100072.25,21.63,2.67,-33,0,0,0,2,34262,120,23,4,2,4,1,5,4,2,2,3,2,2,1,0,0,2,2,0,0,0,1 +$HITS,20,199,77,1203,35,7287,32,9007,110,11876,80,14839,30,16249,117,20414,32,21564,54,23207,25,23567,145,25756,33,38284,25,43579,54,51447,100,56857,37,57245,32,77448,203,77806,27,89272,214 +$HIST,64,859.71,100071.75,21.63,2.67,-34,0,0,0,1,34271,125,20,5,4,3,3,2,2,1,0,4,0,1,0,1,3,0,1,0,0,0,0 +$HITS,17,3702,39,4188,97,4262,91,4609,30,9999,30,13842,77,16297,34,17988,32,21012,43,27219,29,32173,186,43657,45,51322,51,57455,55,76049,47,81560,94,84238,60 +$HIST,65,872.0,100072.00,21.63,2.67,-33,0,0,1,1,34268,121,23,2,2,5,3,1,4,1,0,2,0,2,0,2,1,0,0,0,1,0,0 +$HITS,24,10756,43,13173,28,23960,48,25622,90,27006,33,29836,95,31104,25,31716,76,34452,73,34477,58,38772,108,41354,37,44535,50,50632,67,54380,73,59101,58,59235,100,66302,48,80118,42,83819,36,87032,27,88178,33,89157,191,90354,40 +$HIST,66,884.31,100074.50,21.63,2.67,-33,0,0,0,3,34254,123,37,4,3,3,2,1,0,3,1,3,0,3,1,1,1,1,1,2,2,0,0 +$HITS,15,2056,27,7032,69,7540,34,21431,39,29494,43,35690,33,42625,28,52910,32,66505,46,74632,50,81060,57,81281,32,82480,65,89653,41,96167,42 +$HIST,67,896.59,100075.25,21.63,2.67,-33,0,0,0,0,34268,124,18,3,6,2,1,3,1,1,0,0,0,0,3,3,0,2,2,0,0,2,0 +$HITS,25,6247,46,9602,144,11746,145,13950,41,14390,32,15948,55,26005,55,31993,225,34234,38,34428,19,39593,61,45016,53,48579,30,50500,33,58184,61,62572,79,65175,38,67456,35,68275,203,70030,38,70395,44,71231,29,71928,179,81238,2,92652,110 +$HIST,68,908.89,100076.00,21.63,2.67,-34,0,0,0,0,34282,121,25,4,2,1,2,0,2,1,3,3,2,2,0,0,3,1,0,0,1,0,1 +$HITS,8,7635,28,42749,37,53776,97,58656,185,64128,54,76376,145,86537,40,87592,84 +$HIST,69,921.16,100071.00,21.63,2.67,-33,0,0,1,1,34271,113,26,3,4,4,2,0,1,1,1,2,3,2,2,1,1,0,1,1,0,3,0 +$HITS,20,943,29,5298,74,7508,36,7980,70,16206,25,24033,64,24068,53,26127,83,26207,78,27804,77,29196,60,30084,55,53956,64,60611,32,65148,29,65864,98,67823,36,72096,31,80360,27,94978,25 +$HIST,70,933.45,100076.00,21.63,2.67,-33,0,0,0,0,34283,105,31,3,1,5,2,0,4,2,1,1,1,1,1,0,0,1,1,2,0,0,0 +$HITS,19,599,51,17526,40,29292,56,33795,60,41976,79,48133,80,52394,49,54026,79,54224,29,56214,26,62906,27,66178,37,67363,31,70625,37,77403,58,82713,39,85598,46,96097,53,99123,70 +$HIST,71,945.75,100072.00,21.63,2.67,-33,0,0,0,0,34284,123,19,4,3,0,3,0,1,5,4,0,1,2,0,0,1,0,1,0,0,0,0 +$HITS,13,2281,46,7848,29,17622,89,20442,49,23595,46,24149,37,54973,80,64854,76,86282,48,87827,75,88508,84,91391,27,93442,43 +$HIST,72,958.5,100078.75,21.63,2.67,-33,0,0,0,0,34268,121,30,8,1,2,2,2,3,0,2,2,0,0,2,0,1,1,0,1,0,1,0 +$HITS,17,6011,31,7957,33,10748,38,29029,96,37807,30,48614,74,64954,38,65705,26,66954,47,73725,79,75717,77,75845,70,83352,45,87107,58,88662,78,99266,69,99690,55 +$HIST,73,970.34,100075.00,21.63,2.67,-33,0,0,0,0,34247,129,30,4,5,4,1,2,3,5,2,2,3,2,2,0,3,1,1,1,1,0,0 +$HITS,16,14073,53,25814,59,47648,83,48671,56,48675,30,49321,34,50759,35,57723,26,57894,60,60583,25,63515,234,74178,62,79638,45,82615,27,85814,31,97655,33 +$HIST,74,982.62,100071.75,21.56,2.67,-33,0,0,0,0,34263,126,25,9,3,4,1,0,1,0,2,4,3,0,0,0,1,2,1,0,0,2,2 +$HITS,15,14501,25,20494,25,26432,59,28355,172,29998,50,36347,48,41715,26,43404,36,50149,44,63023,77,66713,34,73638,46,73844,28,83743,164,92583,41 +$HIST,75,994.89,100072.50,21.56,2.67,-33,0,0,1,2,34283,115,27,2,3,3,2,0,1,3,1,2,3,0,1,0,1,1,1,1,0,0,0 +$HITS,11,5532,27,40524,35,48532,70,58793,54,68844,78,69876,32,71679,66,79733,103,85339,42,86924,38,98545,99 +$HIST,76,1007.16,100074.50,21.56,2.67,-33,0,0,0,0,34247,132,27,5,4,1,1,2,1,2,3,2,0,2,1,4,2,0,0,0,1,1,0 +$HITS,26,7622,46,8693,27,10361,27,12046,59,13130,32,16303,51,21196,42,28352,36,32516,41,40554,123,45407,47,46537,35,49473,53,52807,70,68010,26,70336,52,72172,28,73396,36,75131,71,81689,121,83990,28,89012,108,92208,43,93937,41,94611,53,98121,74 +$HIST,77,1019.46,100070.25,21.56,2.67,-34,0,0,0,2,34267,115,32,4,6,3,5,1,0,0,0,5,0,0,2,2,2,0,0,1,1,0,1 +$HITS,15,12534,33,25423,40,31105,28,35358,32,42560,213,59262,25,61506,107,64017,53,67366,79,72426,128,75003,27,75341,177,78200,59,83478,32,89812,42 +$HIST,78,1031.74,100075.50,21.56,2.67,-33,0,0,0,1,34258,117,33,5,2,5,4,4,0,2,0,1,3,0,0,0,2,0,1,0,1,3,0 +$HITS,22,1941,27,6264,8,11495,45,13433,39,15740,46,20440,26,21889,62,24346,28,28248,69,34449,32,42657,27,58156,57,62110,51,67407,28,69340,28,70822,28,75656,40,79337,96,83299,49,84308,90,86817,28,90497,26 +$HIST,79,1044.4,100072.00,21.56,2.67,-33,0,0,0,1,34308,86,17,2,2,3,2,4,1,2,2,2,4,2,2,0,2,0,0,0,1,1,2 +$HITS,18,52,92,9109,90,12445,47,13342,79,20422,35,23063,104,28037,53,34097,40,44252,55,57693,53,60830,25,77146,69,78487,37,78585,32,81982,59,83458,56,95951,38,98422,219 +$HIST,80,1056.32,100073.50,21.56,2.67,-33,0,0,1,1,34267,120,32,3,4,3,0,2,1,2,2,0,2,2,2,0,0,1,0,0,1,0,1 +$HITS,17,3922,115,13710,47,15113,38,16699,55,23148,65,34113,29,35193,55,40512,222,44491,98,44943,27,53144,51,61802,228,63110,52,75927,44,76471,91,79288,59,97836,129 +$HIST,81,1068.61,100070.50,21.56,2.67,-33,0,0,0,0,34262,121,20,4,4,3,3,2,2,4,3,0,0,2,2,0,0,1,2,0,1,0,2 +$HITS,26,2343,28,7123,75,13135,145,22248,57,31006,122,40194,93,41398,41,46250,74,48806,42,51101,148,54340,68,59383,39,72808,26,81333,38,82115,28,82356,57,83261,30,84801,29,88224,54,88949,66,92809,36,94165,51,94837,45,96938,89,97597,49,99771,26 +$HIST,82,1080.92,100069.75,21.56,2.67,-34,0,0,1,1,34258,120,16,6,5,3,2,4,4,4,1,3,1,0,2,0,3,3,0,2,1,0,2 +$HITS,22,4271,28,5881,96,6116,25,6959,36,14195,74,15113,34,18399,82,22859,98,26348,35,32558,43,34060,45,38591,31,43734,52,46500,45,49339,48,56140,68,59832,32,64038,26,74115,47,77929,89,81168,100,93943,159 +$HIST,83,1093.22,100069.00,21.56,2.67,-34,0,0,0,1,34289,117,23,2,7,6,1,0,1,2,2,0,0,1,3,0,0,1,0,0,1,0,0 +$HITS,7,26361,26,70204,25,81504,91,85223,30,85706,36,91415,52,98995,163 +$HIST,84,1105.48,100071.50,21.56,2.67,-33,0,0,0,0,34270,121,21,4,3,4,2,1,2,1,2,2,0,0,1,1,2,0,0,1,0,2,0 +$HITS,24,9913,25,11630,25,13490,97,15964,48,18912,99,19697,51,29566,39,33582,52,36281,31,38424,30,38771,57,40253,29,41530,76,45276,91,45708,155,47605,75,48998,52,58019,36,78408,25,79820,35,90976,172,92752,80,94999,76,98652,101 +$HIST,85,1117.77,100077.00,21.56,2.67,-34,0,0,1,1,34315,96,14,2,2,3,2,2,1,0,0,1,0,2,2,0,1,0,1,1,1,0,0 +$HITS,16,11720,33,19321,67,25297,97,28850,51,29227,53,33778,136,36597,50,39893,25,45329,39,54848,42,56557,51,60211,161,62181,107,67340,32,82489,40,91759,49 +$HIST,86,1130.6,100072.00,21.50,2.67,-33,0,0,0,0,34256,134,31,3,0,2,0,2,2,1,2,2,1,0,1,0,0,1,0,2,1,1,0 +$HITS,22,9183,97,12041,48,22545,34,22846,37,24842,56,40863,36,52011,34,53383,46,58663,67,61486,42,68935,68,72246,36,76220,27,77611,35,78855,39,78861,29,79953,133,81388,76,90946,41,91483,29,93955,105,95024,57 +$HIST,87,1142.35,100067.50,21.50,2.67,-34,0,0,0,1,34289,125,16,1,3,0,1,1,3,0,0,1,0,2,0,1,1,1,1,1,1,1,0 +$HITS,14,6303,28,7186,49,16815,70,24854,103,25529,37,32802,53,37550,59,40705,28,46595,42,49517,35,67547,56,71493,36,81669,85,96673,31 +$HIST,88,1154.63,100069.00,21.50,2.67,-33,0,0,1,0,34277,115,30,3,2,0,1,3,0,2,3,3,1,0,0,0,0,0,1,1,1,1,0 +$HITS,19,7624,86,8187,36,8773,47,10273,32,17641,54,18409,34,30808,99,31727,82,37975,33,55082,32,59943,50,73284,46,73781,42,74685,61,76531,48,79539,212,85479,53,98912,87,99291,63 +$HIST,89,1166.92,100069.75,21.50,2.67,-34,0,0,0,3,34294,101,20,5,1,2,3,1,1,1,3,4,3,0,2,0,1,1,1,0,0,1,1 +$HITS,15,2708,42,7825,38,20019,95,29582,36,30588,27,36651,45,40170,60,41579,128,48303,32,53927,84,70200,34,71382,50,79468,73,85069,85,97267,48 +$HIST,90,1179.19,100070.75,21.50,2.67,-34,0,0,0,2,34250,121,26,8,8,2,8,2,2,1,2,4,1,1,1,1,2,1,0,1,0,0,2 +$HITS,18,14387,61,20978,29,21962,77,25511,55,26234,44,30878,56,33880,25,38417,30,43527,26,51144,30,54807,32,57150,37,64565,90,65561,40,67501,6,74033,44,83353,66,93217,28 +$HIST,91,1191.48,100068.50,21.50,2.67,-34,0,0,0,1,34253,133,28,0,4,4,2,1,4,1,4,1,3,1,1,1,2,0,1,1,0,1,1 +$HITS,16,22445,98,25095,60,26761,34,37621,60,38025,42,39816,69,41363,35,52622,39,56207,46,64234,31,68125,45,71459,165,75859,69,76391,82,89678,33,92585,56 +$HIST,92,1203.76,100075.25,21.50,2.67,-34,0,0,0,0,34273,120,19,5,2,2,2,3,3,2,3,1,1,2,0,1,1,1,1,0,0,1,0 +$HITS,21,3106,57,9875,29,10294,39,10538,41,17695,33,21070,66,21886,45,38093,31,39897,54,43903,68,51673,27,55183,59,58904,31,59696,36,62915,26,71797,83,71962,48,77600,26,88530,61,90204,42,98199,68 +$HIST,93,1216.5,100070.50,21.50,2.66,-34,0,0,0,1,34272,120,25,5,3,2,3,2,1,2,1,3,1,0,0,0,0,2,2,0,2,1,0 +$HITS,16,4093,42,6461,82,19780,29,21977,35,25740,69,46028,142,53556,59,55165,62,61238,68,61245,37,69433,58,71952,32,74507,27,74553,66,83030,32,83500,37 +$HIST,94,1228.34,100070.25,21.50,2.67,-34,0,0,0,0,34254,134,32,5,1,4,1,1,0,1,4,2,0,2,1,1,1,1,0,2,0,2,0 +$HITS,15,2469,52,36015,157,44828,42,53883,28,54110,27,54118,56,56911,29,57018,42,62111,191,65722,44,66804,26,68900,58,72855,25,81131,64,82123,53 +$HIST,95,1240.61,100067.75,21.50,2.66,-34,0,0,0,1,34266,122,26,4,4,2,4,3,4,2,0,1,3,0,2,0,0,2,0,2,0,0,0 +$HITS,16,1289,32,7990,180,15340,102,26702,67,27487,160,33017,72,37094,40,37681,31,37918,59,65817,50,69441,95,77634,48,81343,26,86631,66,91090,43,92387,238 +$HIST,96,1252.89,100069.25,21.50,2.66,-33,0,0,0,0,34287,98,25,6,5,4,4,2,1,5,2,3,1,2,2,1,0,0,0,2,0,1,1 +$HITS,12,2402,217,11895,32,19893,58,19997,52,21287,42,44839,44,45460,206,51378,34,59356,31,65936,26,71808,58,93237,72 +$HIST,97,1265.16,100063.75,21.44,2.67,-33,0,0,0,1,34265,123,24,5,5,3,4,1,1,1,0,0,0,5,0,0,0,2,2,0,0,0,0 +$HITS,22,7049,34,10114,55,13536,76,18736,68,20771,49,24194,56,29437,38,30343,25,30778,28,31766,30,38791,53,39686,58,50273,164,52778,26,57462,76,69241,79,71559,76,83902,93,84812,32,88789,76,90612,237,99502,45 +$HIST,98,1277.46,100068.50,21.50,2.66,-33,0,0,0,0,34290,105,22,2,3,3,3,3,1,3,3,1,0,0,0,0,0,1,1,2,0,1,1 +$HITS,19,889,57,14503,84,23070,27,27498,35,27910,34,31555,32,35573,56,42128,51,48744,56,52946,166,56385,34,56746,54,58488,35,59134,31,60890,117,69391,179,73700,29,80934,50,87160,84 +$HIST,99,1289.75,100067.00,21.44,2.66,-33,0,0,0,2,34279,106,26,5,1,0,3,4,1,2,1,4,0,3,1,0,1,2,2,0,0,3,0 +$HITS,18,3075,48,3513,26,7761,26,9504,31,10648,65,11260,49,20756,81,25774,36,43308,49,47384,44,60667,53,62706,55,66981,54,80980,56,82297,32,90912,58,93666,39,99427,67 +$HIST,100,1302.3,100068.00,21.44,2.66,-33,0,0,0,0,34288,119,17,2,2,2,2,1,2,2,1,2,1,2,0,2,0,0,0,0,0,1,1 +$HITS,17,787,68,5576,52,12122,31,12638,34,15920,41,16103,33,28298,29,33783,28,41840,128,49588,36,66691,37,77785,109,78332,31,79365,28,80872,33,87421,38,96851,26 +$HIST,101,1314.33,100063.75,21.44,2.66,-33,0,0,0,1,34270,128,15,5,2,5,3,1,0,1,0,2,0,1,0,2,1,0,0,2,0,2,2 +$HITS,21,3878,44,10302,241,10847,94,21806,31,22064,70,26138,42,26825,73,27374,102,27411,35,28647,26,32545,78,37256,72,43324,36,50751,54,62424,39,65568,51,71072,75,72787,29,74111,32,81264,32,87513,33 +$HIST,102,1326.62,100068.00,21.44,2.66,-33,0,0,0,0,34283,102,28,6,3,1,3,1,0,3,1,2,1,2,1,0,3,1,1,0,2,0,0 +$HITS,20,3556,53,8834,25,18283,48,19751,46,24639,52,25562,74,29526,25,30827,46,42311,64,46276,81,53561,31,56200,91,57933,36,60978,33,69480,61,72496,72,82656,72,83256,59,86001,28,98571,43 +$HIST,103,1339.22,100064.75,21.44,2.66,-33,0,0,0,1,34270,125,27,4,5,5,0,2,4,1,2,1,0,2,0,0,2,0,2,0,0,0,1 +$HITS,10,7559,53,12972,26,18383,66,20976,56,21699,50,39673,25,82651,55,86853,65,88631,28,90840,46 +$HIST,104,1351.48,100065.25,21.44,2.66,-33,0,0,0,0,34255,123,24,9,2,0,4,3,2,1,3,2,2,3,1,3,0,1,0,2,0,1,1 +$HITS,22,23284,29,27407,131,29379,26,31473,96,33398,25,36470,92,36813,42,43070,79,44412,36,46518,37,48381,31,51361,55,66086,32,69100,123,70722,75,71381,32,80085,175,81333,27,81549,71,90373,63,94999,130,99136,56 +$HIST,105,1363.78,100064.75,21.44,2.66,-33,0,0,0,1,34273,115,20,4,1,3,1,0,0,4,2,1,3,1,1,3,2,1,2,0,0,0,0 +$HITS,26,3133,39,13903,56,21628,25,29448,62,32333,50,32742,54,33771,86,34595,71,35241,86,45274,35,46789,55,53371,82,56585,68,58477,91,61295,55,61738,47,67182,46,69708,27,71077,82,74115,79,82153,124,94633,34,95015,25,95656,27,96546,59,97181,49 +$HIST,106,1376.10,100062.25,21.44,2.66,-33,0,0,0,1,34288,95,23,5,6,2,4,2,0,0,1,1,2,2,0,3,1,1,0,0,0,1,1 +$HITS,25,3612,31,4460,108,6735,34,10360,39,11580,73,19629,37,22800,32,25217,38,27484,66,33210,47,37052,37,44852,100,57522,63,61936,35,65480,36,68811,32,74205,62,84668,57,87904,25,90231,27,91424,27,93343,45,94724,59,98906,90,99724,33 +$HIST,107,1388.41,100061.75,21.44,2.66,-33,0,0,0,0,34297,93,26,2,3,3,3,0,1,1,1,0,2,0,1,1,0,0,1,0,2,1,0 +$HITS,26,764,39,3776,85,10779,33,17400,70,26097,26,29959,30,44491,35,46203,27,50075,118,52622,72,53019,33,56262,57,57016,40,59224,98,59657,32,62811,45,63578,71,70939,117,74513,43,75696,63,79687,25,84534,77,87712,86,93825,26,96523,96,98845,33 +$HIST,108,1400.72,100063.00,21.44,2.66,-33,0,0,1,0,34271,128,22,5,4,3,1,0,1,4,1,1,0,2,0,0,0,0,1,0,1,0,0 +$HITS,18,967,34,3427,62,5838,70,6483,104,34709,37,36636,57,40870,78,44592,93,44982,34,46646,51,50594,33,53209,209,57818,67,61223,33,79461,29,79765,34,80046,68,83736,55 +$HIST,109,1413.1,100058.00,21.38,2.66,-33,0,0,0,0,34262,129,30,3,2,1,1,1,4,1,0,2,4,2,0,0,1,1,0,0,0,0,0 +$HITS,20,10089,32,11196,65,13696,25,20742,32,22405,133,25853,31,36250,57,39302,91,40599,38,46013,47,52509,53,58436,70,59012,58,63906,49,73434,47,76670,25,76852,46,76989,54,85478,58,93570,31 +$HIST,110,1425.31,100058.25,21.38,2.66,-33,0,0,0,0,34294,95,23,5,4,0,4,2,1,2,4,2,1,0,3,2,2,0,1,1,0,0,0 +$HITS,18,7492,47,12770,55,23218,60,30570,30,38194,189,38991,53,39388,46,41851,247,41865,63,42395,149,52733,57,66682,34,84254,48,84260,62,84610,39,87741,60,88431,32,99208,37 +$HIST,111,1437.60,100060.00,21.38,2.66,-33,0,0,0,1,34263,128,23,3,4,6,1,2,2,1,1,2,2,2,0,0,1,0,3,4,0,1,0 +$HITS,14,4276,47,5762,39,27044,29,55697,35,56190,64,59047,43,67751,41,73535,36,74598,209,76855,77,89660,29,90445,79,94004,55,95186,26 +$HIST,112,1449.88,100046.00,21.38,2.66,-33,0,0,0,1,34288,116,26,3,0,2,3,1,2,0,0,1,1,0,0,1,2,0,0,0,1,0,0 +$HITS,16,12837,26,13016,44,21758,176,22063,27,23223,193,24171,29,26855,31,34006,146,35916,38,41011,103,48845,44,63266,71,75174,29,80526,9,86905,32,96924,33 +$HIST,113,1462.16,100047.25,21.44,2.66,-33,0,0,0,1,34302,98,28,4,4,2,2,0,0,1,1,3,1,0,0,2,2,0,0,2,2,0,0 +$HITS,9,3763,53,5198,83,7746,32,11948,39,24175,182,36605,28,40103,93,40678,76,59546,63 +$HIST,114,1474.42,100044.75,21.38,2.66,-33,0,0,0,0,34263,139,31,2,2,1,2,1,0,0,2,0,2,2,0,0,1,1,0,1,0,1,0 +$HITS,13,14138,40,19291,55,44084,235,45770,26,49301,225,51254,63,59082,25,61618,60,78008,47,85938,69,90010,53,93570,70,99156,30 +$HIST,115,1486.69,100058.25,21.38,2.66,-33,0,0,0,0,34267,112,28,3,3,1,3,0,2,1,4,2,4,2,0,2,1,2,3,1,0,0,1 +$HITS,22,2289,34,19411,69,23985,80,27129,25,29535,60,31978,44,33575,39,34794,45,34812,25,35099,30,41736,45,54838,34,55734,73,61388,34,72948,84,73073,37,78648,104,86734,55,95637,189,95681,31,96637,92,99039,128 +$HIST,116,1499.0,100059.75,21.38,2.66,-33,0,0,0,2,34297,112,17,3,1,5,1,1,2,2,2,0,1,0,0,1,0,2,0,0,1,2,1 +$HITS,11,11453,66,26509,133,30240,70,42838,25,44386,52,49784,77,54946,26,60808,32,63910,35,83411,30,87462,75 +$HIST,117,1511.26,100066.00,21.38,2.66,-33,0,0,0,1,34271,113,32,3,2,3,7,1,0,2,4,0,2,0,0,2,3,0,0,0,1,0,1 +$HITS,16,4609,71,10148,46,35048,51,35054,77,40804,72,41818,67,44131,237,60555,55,63967,27,65976,26,66231,28,76261,32,81965,53,82086,28,86700,35,93667,196 From b7921cee76e85f44cf0d842878ce47b7db4b51b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20K=C3=A1kona?= Date: Sat, 18 Oct 2025 00:42:28 +0200 Subject: [PATCH 3/4] Update version.py --- dosview/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dosview/version.py b/dosview/version.py index d507d06..876b342 100644 --- a/dosview/version.py +++ b/dosview/version.py @@ -1,3 +1,3 @@ #!/usr/bin/env python3 # -*- coding: UTF-8 -*- -__version__ = "0.1.21" +__version__ = "0.1.22" From 809e0a5e1ea99d859bb98763655bd9a4225c162f Mon Sep 17 00:00:00 2001 From: Roman Dvorak Date: Tue, 16 Dec 2025 22:52:26 +0100 Subject: [PATCH 4/4] Dosview updates, add EEPROM manager and RTC manager, use PyFT260 library form module, separate AIRDOS04_hm module as standalon module - still part of this repo --- .github/copilot-instructions.md | 106 +++ dosview/__init__.py | 1059 +++++++++---------------- dosview/airdos04.py | 979 +++++++++++++++++++++++ dosview/airdos04_info.py | 399 ++++++++++ dosview/eeprom_schema.py | 201 +++++ dosview/eeprom_widget.py | 442 +++++++++++ dosview/loading_dialog.py | 118 +++ dosview/rtc_widget.py | 376 +++++++++ pyproject.toml | 1 + test.ipynb | 456 ++++++++--- tools/gen_eeprom_header.py | 73 ++ tools/generated/eeprom_layout.h | 37 + tools/tools/generated/eeprom_layout.h | 34 + 13 files changed, 3518 insertions(+), 763 deletions(-) create mode 100644 .github/copilot-instructions.md create mode 100644 dosview/airdos04.py create mode 100644 dosview/airdos04_info.py create mode 100644 dosview/eeprom_schema.py create mode 100644 dosview/eeprom_widget.py create mode 100644 dosview/loading_dialog.py create mode 100644 dosview/rtc_widget.py create mode 100644 tools/gen_eeprom_header.py create mode 100644 tools/generated/eeprom_layout.h create mode 100644 tools/tools/generated/eeprom_layout.h diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..faa0d36 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,106 @@ +# Dosview Codebase AI Assistant Instructions + +## Project Overview + +**Dosview** is a lightweight PyQt5-based log viewer for analyzing radiation detector data from UST (Universal Scientific Technologies) dosimeters. It parses binary/text log files and visualizes spectral and temporal radiation data with matplotlib and pyqtgraph. + +### Core Architecture +- **Parser-GUI separation**: `dosview/parsers.py` handles all file format detection and parsing (no Qt dependencies) to enable unit testing without GUI initialization +- **Multi-format support**: Two main log formats (AIRDOS04C v2.0 and legacy pre-2.0) with automatic detection +- **Threading model**: File loading happens in `LoadDataThread` to prevent UI blocking during large file parsing +- **PyQt5 multi-window support**: Handles multiple log files and app instances (single instance via QLocalSocket/QLocalServer pattern) + +## Critical Patterns + +### Parser Architecture (`dosview/parsers.py`) +The parser module is **parser-agnostic by design**. Add new format support by: +1. Subclass `BaseLogParser` with `detect()` (static) and `parse()` (instance) methods +2. Return tuple: `[time_axis (ndarray), sums (ndarray), hist (ndarray), metadata (dict)]` +3. Add to `LOG_PARSERS` sequence for auto-detection +4. Return data must have consistent ndarray shapes with `time_axis.shape[0] == sums.shape[0]` + +**Example metadata structure**: +```python +{ + "log_device_info": {"DOS": {...}, "AIRDOS": {...}}, + "log_info": { + "log_type": "xDOS_SPECTRAL", + "detector_type": "AIRDOS04C", # or legacy detector name + "histogram_channels": 1024, + "events_total": 12345 + } +} +``` + +### Data Format Conventions +- **Time axis**: Seconds (converted to minutes for UI via `/60`) +- **Histogram**: 1D numpy array, channel indices as x-axis +- **Log format detection**: First line matching triggers parser (e.g., `$DOS` prefix with/without `AIRDOS04C`) +- **Legacy format quirk**: Pads histogram to 1024 channels regardless of actual data width + +### GUI Patterns (`dosview/__init__.py`) +- **PlotCanvas**: Uses `pg.GraphicsLayoutWidget` for dual-plot layout (evolution + spectrum) +- **Spectrum plot**: Log scale on both axes with marker overlays for channel events +- **Evolution plot**: Linear scale with rolling average overlay (20-point window) +- **Telemetry support**: Temperature, humidity, pressure, voltage metadata—already defined but not fully integrated + +## Developer Workflows + +### Testing +```bash +pytest # Automatically discovers tests in tests/test_parser.py +``` +- Tests require data fixtures in `data/` directory (e.g., `DATALOG_AIRDOS_GEO.TXT`) +- Parser tests parametrized by fixture files—each format should have at least one sample log +- No GUI testing (parsers are unit-testable independently) + +### Building & Distribution +```bash +pip install . # Development mode +python setup.py build sdist # Build source distribution +pytest && python setup.py build sdist # Full CI/CD flow (see .github/workflows/tests.yml) +``` +- Entry point: `dosview:main()` defined in `pyproject.toml` +- Desktop integration: `dosview.desktop` installed to `/usr/local/share/applications` post-install +- Icon: `media/icon_ust.png` bundled via `setup.py` custom `PostInstallCommand` + +### Running +```bash +dosview # CLI entry point +``` +- App auto-detects file format and loads appropriately +- Supports command-line file opening from system file manager + +## Important Constraints & Decisions + +### Why Parsers Don't Depend on Qt +Allows unit testing without initializing X11/display (critical for CI/CD headless environments). Import graph: `parsers.py` → `numpy/pandas` only; `__init__.py` imports `parsers` after Qt setup. + +### Multi-Format Detection Strategy +- Linear first-line scan (fast for large files) +- `Airdos04CLogParser` detected first (specificity: `$DOS` + `AIRDOS04C`) +- `OldLogParser` catches everything else (fallback: `$DOS`, `$AIRDOS`, or `$HIST` prefixes) +- Raises `ValueError("Neznámý typ logu...")` if no match—never silently fails + +### Known Limitations +- Telemetry fields defined but not wired to plots (see `PlotCanvas.telemetry_lines`) +- Spectrum plot hard-coded to 1024 channels (assumes all detectors standardize here) +- No support for real-time streaming (file-based only) + +## When Adding Features + +- **New detector format?** Extend `OldLogParser.detect()` or create `NewDetectorParser` subclass +- **New plot type?** Add to `PlotCanvas.plot()` before `self.show()` to avoid blocking +- **New metadata?** Update `metadata` dict in parser; PlotCanvas will have access via `self.data[3]` +- **New dependencies?** Add to `dependencies` list in `pyproject.toml` AND `requirements.txt` (both are used by CI) + +## Testing New Code + +Ensure parser tests pass with existing fixtures: +```bash +pytest tests/test_parser.py -v +``` + +For new parser format, commit sample log file to `data/` and verify: +- `test_any_parser_detects_fixture` finds your parser +- `test_parse_fixture_returns_consistent_shapes` validates output shapes diff --git a/dosview/__init__.py b/dosview/__init__.py index 00cc2d7..bcb9c94 100644 --- a/dosview/__init__.py +++ b/dosview/__init__.py @@ -33,6 +33,10 @@ get_parser_for_file, parse_file, ) +from .eeprom_widget import EepromManagerWidget +from .rtc_widget import RTCManagerWidget +from .airdos04 import Airdos04Hardware, Airdos04Addresses +from .loading_dialog import LoadingDialog, LoadingContext class LoadDataThread(QThread): @@ -105,490 +109,57 @@ def telemetry_toggle(self, key, value): if self.telemetry_lines[key] is not None: self.telemetry_lines[key].setVisible(value) +import ft260 +FT260HidDriver = ft260.FT260_I2C +# Enable verbose FT260 HID/I2C debugging +try: + ft260.set_debug(True) +except Exception as _e: + print(f"[dosview] Warning: could not enable ft260 debug: {_e}") -class FT260HidDriver(): +class AIRDOS04CTRL(QThread): """ - Key to symbols - ============== - - S (1 bit) : Start bit - P (1 bit) : Stop bit - Rd/Wr (1 bit) : Read/Write bit. Rd equals 1, Wr equals 0. - A, NA (1 bit) : Accept and reverse accept bit. - Addr (7 bits): I2C 7 bit address. Note that this can be expanded as usual to - get a 10 bit I2C address. - Comm (8 bits): Command byte, a data byte which often selects a register on - the device. - Data (8 bits): A plain data byte. Sometimes, I write DataLow, DataHigh - for 16 bit data. - Count (8 bits): A data byte containing the length of a block operation. - - [..]: Data sent by I2C device, as opposed to data sent by the host adapter. - - More detail documentation is at https://www.kernel.org/doc/Documentation/i2c/smbus-protocol - """ - - def __init__(self, port, device): - self.port = port - #self.smbus = smbus - self.driver_type = 'ft260_hid' - self.device = device - self.initialize_ftdi() - - - - def initialize_ftdi(self): - # TODO pripojeni k HID, nyni to mam jako self.device - - print(f'Device manufacturer: {self.device.get_manufacturer_string()}') - print(f'Product: {self.device.get_product_string()}') - print(f'Serial Number: {self.device.get_serial_number_string()}') - - self.device.set_nonblocking(0) - - self.reset_i2c() - #self.set_i2c_speed(100000) # 100 Khz - self.get_i2c_status() - - - def get_i2c_status(self): - d = self.device.get_feature_report(0xC0, 100) - - status = ['busy_chip', 'error', 'no_ack', 'arbitration_lost', 'idle', 'busy_bus'] - bits = [(d[1] & (1 << i)) >> i for i in range(8)] - status = dict(zip(status, bits)) - - baudrate = (d[2] | d[3]<<8)*1000 - status['baudrate'] = baudrate - - return status - - - def reset_i2c(self): - self.device.send_feature_report([0xA1, 0x20]) - - def set_i2c_speed(self, speed = 100000): - speed = int(speed/1000) - LSB = (speed & 0xff) - MSB = (speed>>8 & 0xff) - print(f"Nastavit speed na {speed} Hz: ", hex(LSB), hex(MSB)) - self.device.send_feature_report([0xA1, 0x22, LSB, MSB]) - - - def write_byte(self, address, value): - """ - SMBus Send Byte: i2c_smbus_write_byte() - ======================================== - - This operation is the reverse of Receive Byte: it sends a single byte - to a device. See Receive Byte for more information. - - S Addr Wr [A] Data [A] P - - Functionality flag: I2C_FUNC_SMBUS_WRITE_BYTE - """ - - payload = [0xD0, address, 0x06, 1, value] - self.device.write(payload) - - - def read_byte(self, address): - """ - SMBus Send Byte: i2c_smbus_write_byte() - ======================================== - - This operation is the reverse of Receive Byte: it sends a single byte - to a device. See Receive Byte for more information. - - S Addr Wr [A] Data [A] P - - Functionality flag: I2C_FUNC_SMBUS_WRITE_BYTE - """ - raise NotImplementedError - - def write_byte_data(self, address, register, value): - """ - SMBus Read Byte: i2c_smbus_read_byte_data() - ============================================ - - This reads a single byte from a device, from a designated register. - The register is specified through the Comm byte. - - S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P - - Functionality flag: I2C_FUNC_SMBUS_READ_BYTE_DATA - """ - - return self.device.write([0xD0, address, 0x06, 2, register, value]) - - - def read_byte_data(self, address, register): - """ - SMBus Read Byte: i2c_smbus_read_byte_data() - ============================================ - - This reads a single byte from a device, from a designated register. - The register is specified through the Comm byte. - - S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P - - Functionality flag: I2C_FUNC_SMBUS_READ_BYTE_DATA - """ - - - payload = [0xD0, address, 0x06, 0b01, register] - self.device.write(payload) - length = (1).to_bytes(2, byteorder='little') - self.device.write([0xC2, address, 0x06, length[0], length[1]]) - d = self.device.read(0xde) - - # TODO: Osetrit chyby v chybnem vycteni registru - return d[2] - - - def write_word_data(self, address, register, value): - """ - SMBus Write Word: i2c_smbus_write_word_data() - ============================================== - - This is the opposite of the Read Word operation. 16 bits - of data is written to a device, to the designated register that is - specified through the Comm byte. - - S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P - - Functionality flag: I2C_FUNC_SMBUS_WRITE_WORD_DATA - - Note the convenience function i2c_smbus_write_word_swapped is - available for writes where the two data bytes are the other way - around (not SMBus compliant, but very popular.) - """ - return self.device.write([0xD0, address, 0x06, 3, register, (value)&0xff, (value>>8)&0xff ]) - - def read_word_data(self, address, register): - """ - SMBus Read Word: i2c_smbus_read_word_data() - ============================================ - - This operation is very like Read Byte; again, data is read from a - device, from a designated register that is specified through the Comm - byte. But this time, the data is a complete word (16 bits). - - S Addr Wr [A] Comm [A] S Addr Rd [A] [DataLow] A [DataHigh] NA P - - Functionality flag: I2C_FUNC_SMBUS_READ_WORD_DATA - - Note the convenience function i2c_smbus_read_word_swapped is - available for reads where the two data bytes are the other way - around (not SMBus compliant, but very popular.) - """ - - payload = [0xD0, address, 0x06, 0b01, register] - self.device.write(payload) - length = (2).to_bytes(2, byteorder='little') - self.device.write([0xC2, address, 0x06, length[0], length[1]]) - d = self.device.read(0xde) - - # TODO: Osetrit chyby v chybnem vycteni registru - return d[2]<<8 | d[3] - - def write_block_data(self, address, register, value): - """ - SMBus Block Write: i2c_smbus_write_block_data() - ================================================ - - The opposite of the Block Read command, this writes up to 32 bytes to - a device, to a designated register that is specified through the - Comm byte. The amount of data is specified in the Count byte. - - S Addr Wr [A] Comm [A] Count [A] Data [A] Data [A] ... [A] Data [A] P - - Functionality flag: I2C_FUNC_SMBUS_WRITE_BLOCK_DATA - """ - raise NotImplementedError - - def read_block_data(self, address, register): - """ - SMBus Block Read: i2c_smbus_read_block_data() - ============================================== - - This command reads a block of up to 32 bytes from a device, from a - designated register that is specified through the Comm byte. The amount - of data is specified by the device in the Count byte. - - S Addr Wr [A] Comm [A] - S Addr Rd [A] [Count] A [Data] A [Data] A ... A [Data] NA P - - Functionality flag: I2C_FUNC_SMBUS_READ_BLOCK_DATA - """ - raise NotImplementedError - - def block_process_call(self, address, register, value): - """ - SMBus Block Write - Block Read Process Call - =========================================== - - SMBus Block Write - Block Read Process Call was introduced in - Revision 2.0 of the specification. - - This command selects a device register (through the Comm byte), sends - 1 to 31 bytes of data to it, and reads 1 to 31 bytes of data in return. - - S Addr Wr [A] Comm [A] Count [A] Data [A] ... - S Addr Rd [A] [Count] A [Data] ... A P - - Functionality flag: I2C_FUNC_SMBUS_BLOCK_PROC_CALL - """ - raise NotImplementedError - - ### I2C transactions not compatible with pure SMBus driver - def write_i2c_block(self, address, value): - """ - Simple send transaction - ====================== - - This corresponds to i2c_master_send. - - S Addr Wr [A] Data [A] Data [A] ... [A] Data [A] P - - More detail documentation is at: https://www.kernel.org/doc/Documentation/i2c/i2c-protocol - """ - raise NotImplementedError - - def read_i2c_block(self, address, length): - """ - Simple receive transaction - =========================== - - This corresponds to i2c_master_recv - - S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P - - More detail documentation is at: https://www.kernel.org/doc/Documentation/i2c/i2c-protocol - """ - - payload = [0xc2, address, 0x06, length, 0] - self.device.write(payload) - data = self.device.read(0xde) - - return data[2:data[1]+2] - - def write_i2c_block_data(self, address, register, value): - """ - I2C block transactions do not limit the number of bytes transferred - but the SMBus layer places a limit of 32 bytes. - - I2C Block Write: i2c_smbus_write_i2c_block_data() - ================================================== - - The opposite of the Block Read command, this writes bytes to - a device, to a designated register that is specified through the - Comm byte. Note that command lengths of 0, 2, or more bytes are - supported as they are indistinguishable from data. - - S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P - - Functionality flag: I2C_FUNC_SMBUS_WRITE_I2C_BLOCK - """ - - payload = [0xD0, address, 0x06, len(value) + 1, register] + value - self.device.write(payload) - - - def read_i2c_block_data(self, address, register, length): - """ - I2C Block Read: i2c_smbus_read_i2c_block_data() - ================================================= - - Reads a block of bytes from a specific register in a device. It's the direct - opposite of the Block Write command, primarily used for retrieving a series - of bytes from a given register. - - S Addr Wr [A] Comm [A] S Addr Rd [A] Data [A] Data [A] ... [A] Data [A] P - - The method respects SMBus limitations of 32 bytes for block transactions. - """ - - timeout = 500 - - register = (register).to_bytes(2, byteorder='little') - payload = [0xD4, address, 0x02, 2, register[0], register[1]] - self.device.write(payload) - length = (length).to_bytes(2, byteorder='little') - self.device.write([0xC2, address, 0x07, length[0], length[1]]) - d = self.device.read(0xde, timeout) - - print(d) - - return d[2:d[1]] - - def write_i2c_block_data(self, address, register, data): - """ - I2C Block Write: i2c_smbus_write_i2c_block_data() - ================================================= - - Writes a block of bytes to a specific register in a device. This command - is designed for direct I2C communication, allowing for command lengths of 0, - 2, or more bytes, which are indistinguishable from data. - - S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P - - Functionality flag: I2C_FUNC_SMBUS_WRITE_I2C_BLOCK - """ - - register = (register).to_bytes(2, byteorder='little') - payload = [0xD4, address, 0x06, 0, register[0], register[1]] + data - payload[3] = len(payload) - 4 - self.device.write(payload) - - return True + Qt thread pro komunikaci s AIRDOS04 detektorem přes HID/I2C. - - - -class eeprom(): - def __init__(self, bus, address): - self.bus = bus - self.address = address - - def read_serial_number(self): - serial_number = [] - #self.bus.write_byte_data(self.address+8, 0x08, 0x00) - self.bus.write_byte_data(0x58, 0x08, 0x00) - for _ in range(16): - serial_byte = self.bus.read_byte(0x58) - serial_number.append(serial_byte) - print("Serial byte: ", serial_byte) - - result_number = 0 - for b in serial_number: - result_number = (result_number << 8) | b - - #devices.append(address) - return result_number - - def read_eeprom(self, len): - serial_number = [] - self.bus.write_byte_data(self.address, 0x00, 0x00) - for _ in range(len): - serial_byte = self.bus.read_byte(self.address) - serial_number.append(serial_byte) - - result_number = 0 - for b in serial_number: - result_number = (result_number << 8) | b - - #devices.append(address) - #return result_number - return serial_number - - def write_to_eeprom(self, data, offset = 0): - mem_addr_b = offset & 0xff - mem_addr_a = (offset>>8) & 0xff - - self.bus.write_i2c_block_data(address, mem_addr_a, [mem_addr_b]+data) - - -class HIDI2CCommunicationThread(QThread): + Hardware operace jsou delegovány na Airdos04Hardware třídu. + Tento thread se stará o: + - HID připojení/odpojení + - Qt signály pro GUI + - Thread-safe volání hardware operací + """ connected = pyqtSignal(bool) connect = pyqtSignal(bool) sendAirdosStatus = pyqtSignal(dict) + sendEepromData = pyqtSignal(dict) # Signál pro EEPROM data + loadingStateChanged = pyqtSignal(bool, str) # (is_loading, message) - #VID = 0x0403 - #PID = 0x6030 + # USB HID identifikace VID = 0x1209 PID = 0x7aa0 - I2C_INTERFACE = 0 - - - addr_switch = 0x70 - addr_switch = 0x7c - addr_charger = 0x6a - addr_gauge = 0x55 - addr_rtc = 0x51 - addr_eeprom = 0x50 - addr_eepromsn = 0x58 - - addr_sht = 0x44 - addr_switch = 0x70 - addr_sdcard = 0x71 - addr_charger = 0x6a - addr_gauge = 0x55 - addr_rtc = 0x51 - addr_eeprom = 0x50 - addr_eepromsn = 0x58 - addr_altimet = 0x77 - addr_an_sht = 0x45 - addr_an_eeprom = 0x53 - addr_an_eepromsn = 0x5b basic_params = {} - - # Příkazy pro čtení teploty a vlhkosti - temperature_cmd = [0x24, 0x00] # Příkaz pro čtení teploty v režimu High Precision - humidity_cmd = [0x24, 0x16] # Příkaz pro čtení vlhkosti v režimu High Precision - serial_number_cmd = [0x37, 0x80] - - - dev = None ftdi = None + hw = None # Airdos04Hardware instance def __init__(self): QThread.__init__(self) - # Initialize HID communication here + self.hw = None # Will be set on connect + self.dev_uart = None def run(self): - # Implement HID communication logic here - - # Connect to HID device + # Main thread loop self.connected.emit(False) - while 1: + while True: pass - - - # Funkce pro čtení dat ze senzoru - def sht_read_sensor_data(self, address, cmd): - - register = (0x08).to_bytes(2, byteorder='little') - payload = [0xD4, address, 0x06, 2, cmd[0], cmd[1]] - self.dev.write(payload) - time.sleep(0.4) - length = (6).to_bytes(2, byteorder='little') - self.dev.write([0xC2, address, 0x06, length[0], length[1]]) - data = self.dev.read(0xde, 1000)[2:] - - print("... SHT data:", data) - raw_temperature = (data[0] << 8) + data[1] - raw_humidity = (data[3] << 8) + data[4] - temperature = -45 + 175 * (raw_temperature / 65535.0) # Výpočet teploty - humidity = 100 * (raw_humidity / 65535.0) # Výpočet vlhkosti - return temperature, humidity - - - def sht_read_sn(self, cmd): - self.ftdi.write_i2c_block_data(self.addr_sht, cmd[0], [cmd[1]]) - data = self.ftdi.read_i2c_block_data(self.addr_sht, 0, 6) - print(data) - serial_number = (data[0] << 24) | (data[1] << 16) | (data[3] << 8) | data[4] - return serial_number - - def set_i2c_direction_to_usb(self, usb = True): - # Přepnout I2C switch na I2C z USB - - if usb: - # Do usb se to prepne tak, ze bit[0] a bit[2] jsou rozdilne hodnoty, bit[1] a bit[3] jsou read-only - self.ftdi.write_byte_data(self.addr_switch, 0x01, 0b011) - else: - # I2C do ATMEGA se to prepne tak, ze bit[0] a bit[2] maji stejne hodnoty hodnoty - self.ftdi.write_byte_data(self.addr_switch, 0x01, 0b0000) @pyqtSlot() - def connectSlot(self, state = True, power_off = False): + def connectSlot(self, state=True, power_off=False): print("Connecting to HID device... ", state) if state: + self.loadingStateChanged.emit(True, "Connecting to device...") hid_interface_i2c = None hid_interface_uart = None @@ -609,207 +180,91 @@ def connectSlot(self, state = True, power_off = False): self.dev_uart.open_path(hid_interface_uart['path']) print("Connected to HID device", self.dev, self.dev_uart) + self.loadingStateChanged.emit(True, "Initializing device...") + self.dev.send_feature_report([0xA1, 0x20]) self.dev.send_feature_report([0xA1, 0x02, 0x01]) - self.ftdi = FT260HidDriver(0, self.dev) + # Bind the already-open HID interface to the FT260_I2C driver + self.ftdi = FT260HidDriver(hid_device=self.dev) + # Inicializace Airdos04Hardware - Qt-nezávislé rozhraní pro hardware + self.hw = Airdos04Hardware(self.ftdi) # Přepnout I2C switch na I2C z USB - self.set_i2c_direction_to_usb(True) - - - # self.ftdi.write_byte_data(self.addr_charger, 0x26, 0b10111000) # ????? - self.ftdi.write_byte_data(self.addr_charger, 0x18, 0b00011000) + self.hw.set_i2c_direction(to_usb=True) + # Povolit nabíjení + self.hw.enable_charging() + self.loadingStateChanged.emit(True, "Reading serial numbers...") + + # Vyčíst sériová čísla pomocí hw modulu print("AIRDOS SN ... ") - eeprom_data = self.ftdi.read_i2c_block_data(self.addr_eepromsn, 0x08, 18) - print(eeprom_data) - sn = 0 - for s in eeprom_data: - sn = (sn << 8) | s - print(hex(sn)) - self.basic_params['sn_batdatunit'] = hex(sn) + try: + self.basic_params['sn_batdatunit'] = self.hw.read_serial_number_batdatunit() + print(self.basic_params['sn_batdatunit']) + except Exception as e: + print(f"Error reading BatDatUnit SN: {e}") + self.basic_params['sn_batdatunit'] = "N/A" - eeprom_data = self.ftdi.read_i2c_block_data(self.addr_an_eepromsn, 0x08, 18) - print(eeprom_data) - sn = 0 - for s in eeprom_data: - sn = (sn << 8) | s - print(hex(sn)) - self.basic_params['sn_ustsipin'] = hex(sn) + try: + self.basic_params['sn_ustsipin'] = self.hw.read_serial_number_ustsipin() + print(self.basic_params['sn_ustsipin']) + except Exception as e: + print(f"Error reading USTSIPIN SN: {e}") + self.basic_params['sn_ustsipin'] = "N/A" - self.set_i2c_direction_to_usb(False) + self.hw.set_i2c_direction(to_usb=False) self.connected.emit(True) + + # Automaticky načíst data ze senzorů a EEPROM + self.get_all_data() else: + # Odpojení + if self.hw is not None: + self.hw.set_i2c_direction(to_usb=True) + + # Vypnout nabíječku pokud je požadováno + if power_off: + self.hw.disable_charging_and_poweroff() + + self.hw.set_i2c_direction(to_usb=False) + + if self.dev is not None: + self.dev.close() + if hasattr(self, 'dev_uart') and self.dev_uart is not None: + self.dev_uart.close() - self.set_i2c_direction_to_usb(True) - - # Vypnout nabijecku pokud je pozadovano - if power_off: - self.ftdi.write_byte_data(self.addr_charger, 0x18, 0b00011010) - self.set_i2c_direction_to_usb(False) - - self.dev.close() - self.dev_uart.close() self.dev = None + self.dev_uart = None self.ftdi = None + self.hw = None self.connected.emit(False) - def get_time(self): - # self.addr_rtc = 0x51 - r00 = self.ftdi.read_byte_data(self.addr_rtc, 0x00) - r01 = self.ftdi.read_byte_data(self.addr_rtc, 0x01) - r02 = self.ftdi.read_byte_data(self.addr_rtc, 0x02) - r03 = self.ftdi.read_byte_data(self.addr_rtc, 0x03) - r04 = self.ftdi.read_byte_data(self.addr_rtc, 0x04) - r05 = self.ftdi.read_byte_data(self.addr_rtc, 0x05) - r06 = self.ftdi.read_byte_data(self.addr_rtc, 0x06) - r07 = self.ftdi.read_byte_data(self.addr_rtc, 0x07) - - #r = self.ftdi.read_i2c_block_data(self.addr_rtc, 0x00, 8) - - sec100 = r00 & 0b1111 + ((r00 & 0b11110000) >> 4) * 10 - absdate = datetime.datetime.now(datetime.timezone.utc) - sec = r01 & 0b1111 + ((r01 & 0b01110000) >> 4) * 10 - minu= r02 & 0b1111 + ((r02 & 0b01110000) >> 4) * 10 - hour = r03 & 0b1111 + ((r03 & 0b11110000) >> 4) * 10 - hour += r04 & 0b1111 * 100 + ((r04 & 0b11110000) >> 4) * 1000 - hour += r05 & 0b1111 * 10000 + ((r05 & 0b11110000) >> 4) * 100000 - #hour = r03 + r04*100 + r05*10000 - - print("RTC data:", r00, r01, r02, r03, r04, r05, r06, r07) - print("RTC time: ", hour, minu, sec, sec100) - - date_delta = datetime.timedelta(hours=hour, minutes=minu, seconds=sec, milliseconds=sec100*10) + @pyqtSlot() + def get_airdos_status(self): + """Vyčte kompletní stav AIRDOS04 a emituje signál s daty.""" + if self.hw is None: + print("[I2C] Not connected; skipping status read") + return - return(absdate, date_delta) - - def reset_time(self): - reset_time = datetime.datetime.now(datetime.timezone.utc) + self.hw.set_i2c_direction(to_usb=True) - # self.ftdi.write_i2c_block_data(self.addr_rtc, 0x00, [0, 0, 0, 0, 0, 0, 0, 0]) + try: + # Použijeme Airdos04Hardware.to_dict() pro kompatibilitu s původním API + data = self.hw.to_dict() + # Přidáme základní parametry (SN načtené při připojení) + data.update(self.basic_params) + except Exception as e: + print(f"[I2C] Error reading status: {e}") + data = self.basic_params.copy() + finally: + self.hw.set_i2c_direction(to_usb=False) - self.ftdi.write_byte_data(self.addr_rtc, 0x00, 0) - self.ftdi.write_byte_data(self.addr_rtc, 0x01, 0) - self.ftdi.write_byte_data(self.addr_rtc, 0x02, 0) - self.ftdi.write_byte_data(self.addr_rtc, 0x03, 0) - self.ftdi.write_byte_data(self.addr_rtc, 0x04, 0) - self.ftdi.write_byte_data(self.addr_rtc, 0x05, 0) - self.ftdi.write_byte_data(self.addr_rtc, 0x06, 0) - self.ftdi.write_byte_data(self.addr_rtc, 0x07, 0) - - print("Time reseted at...", reset_time) - - - def get_battery(self): - ibus_adc = (self.ftdi.read_byte_data(self.addr_charger, 0x28) >> 1) * 2 - ibat_adc = (self.ftdi.read_byte_data(self.addr_charger, 0x2A) >> 2) * 4 - vbus_adc = (self.ftdi.read_byte_data(self.addr_charger, 0x2C) >> 2) * 3.97 / 1000 - vpmid_adc= (self.ftdi.read_byte_data(self.addr_charger, 0x2E) >> 2) * 3.97 / 1000 - vbat_adc = (self.ftdi.read_word_data(self.addr_charger, 0x30) >> 1) * 1.99 /1000 # VBAT ADC - vsys_adc = (self.ftdi.read_word_data(self.addr_charger, 0x32) >> 1) * 1.99 /1000 # VSYS ADC - tf_adc = (self.ftdi.read_word_data(self.addr_charger, 0x34) >> 0) * 0.0961 # TF ADC - tdie_adc = (self.ftdi.read_word_data(self.addr_charger, 0x36) >> 0) * 0.5 # TDIE ADC - - g_voltage = self.ftdi.read_word_data(self.addr_gauge, 0x08) - g_cur_avg = self.ftdi.read_word_data(self.addr_gauge, 0x0A) - g_cur_now = self.ftdi.read_word_data(self.addr_gauge, 0x10) - g_rem_cap = self.ftdi.read_word_data(self.addr_gauge, 0x04) - g_ful_cap = self.ftdi.read_word_data(self.addr_gauge, 0x06) - g_temp = self.ftdi.read_word_data(self.addr_gauge, 0x0C) - g_state = self.ftdi.read_word_data(self.addr_gauge, 0x02) - - - return { - 'IBUS_ADC': ibus_adc, - 'IBAT_ADC': ibat_adc, - 'VBUS_ADC': vbus_adc, - 'VPMID_ADC': vpmid_adc, - 'VBAT_ADC': vbat_adc, - 'VSYS_ADC': vsys_adc, - 'TS_ADC': tf_adc, - 'TDIE_ADC': tdie_adc - }, { - 'VOLTAGE': g_voltage, - 'CUR_AVG': g_cur_avg, - 'CUR_NOW': g_cur_now, - 'REM_CAP': g_rem_cap, - 'FUL_CAP': g_ful_cap, - 'TEMP': g_temp, - 'STATE': g_state - - } - - @pyqtSlot() - def get_airdos_status(self): - - self.set_i2c_direction_to_usb(True) - - abstime, sys_date = self.get_time() - charger, gauge = self.get_battery() - - data = self.basic_params.copy() - data.update({ - 'RTC': { - 'sys_time': sys_date, - 'abs_time': abstime, - 'sys_begin_time': abstime - sys_date - }, - 'CHARGER': charger, - 'GAUGE': gauge - }) - - a,b = self.sht_read_sensor_data(self.addr_sht, [0x24, 0x0b] ) - data['SHT'] = { - 'temperature': a, - 'humidity': b - } - - a, b = self.sht_read_sensor_data(self.addr_an_sht, [0x24, 0x0b] ) - data['AIRDOS_SHT'] = { - 'temperature': a, - 'humidity': b - } - - - data['ALTIMET'] = {} - data['ALTIMET']['calcoef'] = [] - for value in range(0xa0, 0xae, 2): - self.ftdi.write_byte(self.addr_altimet, value) - # time.sleep(0.2) - # self.ftdi.write_byte(self.addr_altimet, 0) - time.sleep(0.1) - dat = self.ftdi.read_i2c_block(self.addr_altimet, 2) - time.sleep(0.1) - dat = dat[0] << 8 | dat[1] - data['ALTIMET']['calcoef'].append(dat) - time.sleep(0.2) - - self.ftdi.write_byte(self.addr_altimet, 0b01001000) - time.sleep(0.2) - self.ftdi.write_byte(self.addr_altimet, 0) - time.sleep(0.2) - hum = self.ftdi.read_i2c_block(self.addr_altimet, 3) - time.sleep(0.2) - - self.ftdi.write_byte(self.addr_altimet, 0b01011000) - time.sleep(0.2) - self.ftdi.write_byte(self.addr_altimet, 0) - time.sleep(0.2) - temp = self.ftdi.read_i2c_block(self.addr_altimet, 3) - time.sleep(0.2) - - data['ALTIMET'].update({ - 'altitude': hum[0] << 16 | hum[1] << 8 | hum[2], - 'temperature': temp[0] << 16 | temp[1] << 8 | temp[2] - }) - - self.set_i2c_direction_to_usb(False) print("Posilam...", type(data)) print(data) self.sendAirdosStatus.emit(data) @@ -817,9 +272,64 @@ def get_airdos_status(self): @pyqtSlot() def reset_rtc_time(self): - self.set_i2c_direction_to_usb(True) - self.reset_time() - self.set_i2c_direction_to_usb(False) + """Resetuje RTC stopky na nulu.""" + if self.hw is None: + print("[I2C] Not connected; skipping RTC reset") + return + + self.hw.set_i2c_direction(to_usb=True) + try: + reset_time = self.hw.reset_rtc() + print(f"Time reset at: {reset_time}") + finally: + self.hw.set_i2c_direction(to_usb=False) + + @pyqtSlot() + def get_all_data(self): + """Načte všechna data - senzory i EEPROM.""" + self.loadingStateChanged.emit(True, "Načítání senzorů...") + self.get_airdos_status() + + self.loadingStateChanged.emit(True, "Načítání EEPROM...") + self.get_eeprom_data() + + self.loadingStateChanged.emit(False, "") + + @pyqtSlot() + def get_eeprom_data(self): + """Vyčte EEPROM data z detektoru a baterie a emituje signál.""" + if self.hw is None: + print("[I2C] Not connected; skipping EEPROM read") + return + + from .eeprom_schema import unpack_record, TOTAL_SIZE + + eeprom_data = {} + self.hw.set_i2c_direction(to_usb=True) + + try: + # EEPROM detektor + try: + det_data = self.hw.read_eeprom(TOTAL_SIZE, start_address=0, eeprom_address=self.hw.addr.eeprom) + det_record = unpack_record(det_data, verify_crc=False) + eeprom_data['detector'] = det_record.to_dict() + except Exception as e: + print(f"[EEPROM] Error reading detector EEPROM: {e}") + eeprom_data['detector'] = {'error': str(e)} + + # EEPROM baterie + try: + bat_data = self.hw.read_eeprom(TOTAL_SIZE, start_address=0, eeprom_address=self.hw.addr.eeprom_bat) + bat_record = unpack_record(bat_data, verify_crc=False) + eeprom_data['battery'] = bat_record.to_dict() + except Exception as e: + print(f"[EEPROM] Error reading battery EEPROM: {e}") + eeprom_data['battery'] = {'error': str(e)} + + finally: + self.hw.set_i2c_direction(to_usb=False) + + self.sendEepromData.emit(eeprom_data) class HIDUARTCommunicationThread(QThread): connected = pyqtSignal(bool) @@ -881,9 +391,11 @@ class AirdosConfigTab(QWidget): def __init__(self): super().__init__() - self.i2c_thread = HIDI2CCommunicationThread() + self.i2c_thread = AIRDOS04CTRL() self.i2c_thread.connected.connect(self.on_i2c_connected) self.i2c_thread.sendAirdosStatus.connect(self.on_airdos_status) + self.i2c_thread.sendEepromData.connect(self.on_eeprom_data) + self.i2c_thread.loadingStateChanged.connect(self.on_loading_state) self.i2c_thread.start() #self.uart_thread = HIDUARTCommunicationThread().start() @@ -919,8 +431,35 @@ def on_airdos_status(self, status): print("AIRDOS STATUS:") print(status) + self._update_tree_with_data(self.i2c_parameters_tree, status) + + def on_eeprom_data(self, eeprom_data): + """Handler pro EEPROM data.""" + print("EEPROM DATA:") + print(eeprom_data) + + self._update_tree_with_data(self.eeprom_tree, eeprom_data) + + def on_loading_state(self, is_loading: bool, message: str): + """Handler pro změnu stavu načítání.""" + if is_loading: + # Zobrazit loading dialog + if not hasattr(self, '_loading_dialog') or self._loading_dialog is None: + self._loading_dialog = LoadingDialog(self, "Loading", message) + self._loading_dialog.start() + else: + self._loading_dialog.set_message(message) + if not self._loading_dialog.isVisible(): + self._loading_dialog.start() + else: + # Skrýt loading dialog + if hasattr(self, '_loading_dialog') and self._loading_dialog is not None: + self._loading_dialog.stop() + self._loading_dialog = None - self.i2c_parameters_tree.clear() + def _update_tree_with_data(self, tree: QTreeWidget, data: dict): + """Aktualizuje tree widget s daty.""" + tree.clear() def add_properties_to_tree(item, properties): for key, value in properties.items(): @@ -928,19 +467,40 @@ def add_properties_to_tree(item, properties): parent_item = QTreeWidgetItem([key]) item.addChild(parent_item) add_properties_to_tree(parent_item, value) + elif isinstance(value, (list, tuple)): + parent_item = QTreeWidgetItem([key, f"[{len(value)} items]"]) + item.addChild(parent_item) + for i, v in enumerate(value): + if isinstance(v, dict): + child = QTreeWidgetItem([f"[{i}]"]) + parent_item.addChild(child) + add_properties_to_tree(child, v) + else: + child = QTreeWidgetItem([f"[{i}]", str(v)]) + parent_item.addChild(child) else: child_item = QTreeWidgetItem([key, str(value)]) item.addChild(child_item) - for key, value in status.items(): - print(key, value) + for key, value in data.items(): if isinstance(value, dict): parent_item = QTreeWidgetItem([key]) - self.i2c_parameters_tree.addTopLevelItem(parent_item) + tree.addTopLevelItem(parent_item) add_properties_to_tree(parent_item, value) + elif isinstance(value, (list, tuple)): + parent_item = QTreeWidgetItem([key, f"[{len(value)} items]"]) + tree.addTopLevelItem(parent_item) + for i, v in enumerate(value): + if isinstance(v, dict): + child = QTreeWidgetItem([f"[{i}]"]) + parent_item.addChild(child) + add_properties_to_tree(child, v) + else: + child = QTreeWidgetItem([f"[{i}]", str(v)]) + parent_item.addChild(child) else: - self.i2c_parameters_tree.addTopLevelItem(QTreeWidgetItem([key, str(value)])) - self.i2c_parameters_tree.expandAll() + tree.addTopLevelItem(QTreeWidgetItem([key, str(value)])) + tree.expandAll() def initUI(self): @@ -968,17 +528,48 @@ def initUI(self): i2c_layout_row_1.addWidget(self.i2c_power_off_button) i2c_layout.addLayout(i2c_layout_row_1) + # Senzory tree + sensors_label = QLabel("📊 Senzory") + sensors_label.setStyleSheet("font-weight: bold; margin-top: 5px;") + i2c_layout.addWidget(sensors_label) + self.i2c_parameters_tree = QTreeWidget() self.i2c_parameters_tree.setHeaderLabels(["Parameter", "Value"]) i2c_layout.addWidget(self.i2c_parameters_tree) - reload_button = QPushButton("Reload") - reload_button.clicked.connect(self.i2c_thread.get_airdos_status) - i2c_layout.addWidget(reload_button) + # EEPROM tree + eeprom_label = QLabel("💾 EEPROM") + eeprom_label.setStyleSheet("font-weight: bold; margin-top: 5px;") + i2c_layout.addWidget(eeprom_label) + + self.eeprom_tree = QTreeWidget() + self.eeprom_tree.setHeaderLabels(["Parameter", "Value"]) + i2c_layout.addWidget(self.eeprom_tree) + + # Řádek s akčními tlačítky + i2c_actions_row = QHBoxLayout() + + reload_button = QPushButton("🔄 Reload All") + reload_button.clicked.connect(self.i2c_thread.get_all_data) + i2c_actions_row.addWidget(reload_button) - reset_time_button = QPushButton("Reset time") - reset_time_button.clicked.connect(self.i2c_thread.reset_rtc_time) - i2c_layout.addWidget(reset_time_button) + rtc_button = QPushButton("⏱️ RTC Manager") + rtc_button.clicked.connect(self.open_rtc_manager) + i2c_actions_row.addWidget(rtc_button) + + i2c_layout.addLayout(i2c_actions_row) + + # Řádek s EEPROM manager tlačítky + i2c_eeprom_row = QHBoxLayout() + + eeprom_det_btn = QPushButton("📀 EEPROM (detector)") + eeprom_bat_btn = QPushButton("🔋 EEPROM (battery)") + eeprom_det_btn.clicked.connect(self.open_eeprom_manager_detector) + eeprom_bat_btn.clicked.connect(self.open_eeprom_manager_battery) + i2c_eeprom_row.addWidget(eeprom_det_btn) + i2c_eeprom_row.addWidget(eeprom_bat_btn) + + i2c_layout.addLayout(i2c_eeprom_row) uart_widget = QGroupBox("UART") uart_layout = QVBoxLayout() @@ -989,26 +580,166 @@ def initUI(self): uart_disconnect_button = QPushButton("Disconnect") uart_layout.addWidget(uart_connect_button) uart_layout.addWidget(uart_disconnect_button) - - data_memory_widget = QGroupBox("Data memory") - data_memory_layout = QVBoxLayout() - data_memory_layout.setAlignment(Qt.AlignTop) - data_memory_widget.setLayout(data_memory_layout) - - data_memory_connect_button = QPushButton("Connect") - data_memory_disconnect_button = QPushButton("Disconnect") - data_memory_layout.addWidget(data_memory_connect_button) - data_memory_layout.addWidget(data_memory_disconnect_button) - splitter.addWidget(i2c_widget) splitter.addWidget(uart_widget) - splitter.addWidget(data_memory_widget) layout = QVBoxLayout() layout.addWidget(splitter) self.setLayout(layout) + def _open_eeprom_manager(self, read_addr: int): + def _log_eeprom(kind, message, data=None, *, full=False): + colors = {"read": "\x1b[32m", "write": "\x1b[33m", "info": "\x1b[36m"} + prefix = f"[EEPROM][{kind.upper()}]" + color = colors.get(kind, "") + reset = "\x1b[0m" if color else "" + print(f"{color}{prefix} {message}{reset}") + if data: + if full or len(data) <= 64: + preview = " ".join(f"{b:02X}" for b in data) + ellipsis = "" + else: + preview = " ".join(f"{b:02X}" for b in data[:32]) + ellipsis = " ..." + print(f"{color}{prefix} DATA={preview}{ellipsis}{reset}") + + if not self.i2c_thread or not self.i2c_thread.hw: + # Graceful fallback: demo mode without device + def read_device() -> bytes: + # Return empty 101-byte block (unprogrammed EEPROM = 0xFF) + _log_eeprom("info", "I2C není připojeno; spouštím demo mode") + _log_eeprom("read", "Demo mode: returning synthetic 0xFF block", data=b'\xFF' * 16) + return b'\xFF' * 101 + def write_device(blob: bytes) -> None: + _log_eeprom( + "write", f"Demo mode: would write {len(blob)} bytes", data=bytes(blob[:16]) + ) + else: + hw = self.i2c_thread.hw + + def read_device() -> bytes: + try: + hw.set_i2c_direction(to_usb=True) + _log_eeprom("read", f"Reading 101 bytes from EEPROM addr=0x{read_addr:02X}") + + # Debug: vyčíst SN + try: + sn = hw.read_serial_number(hw.addr.eeprom_sn) + print(f"EEPROM SN: {hex(sn)}") + except Exception as e: + print(f"Warning: Could not read EEPROM SN: {e}") + + # Vyčíst data z EEPROM pomocí Airdos04Hardware + data = hw.read_eeprom(101, start_address=0, eeprom_address=read_addr) + _log_eeprom( + "read", + f"Total read {len(data)} bytes; sample={list(data[:8])}", + data=bytes(data[:16]), + ) + _log_eeprom("read", "Read sequence (all bytes)", data=bytes(data), full=True) + return data + finally: + hw.set_i2c_direction(to_usb=False) + + def write_device(blob: bytes) -> None: + try: + hw.set_i2c_direction(to_usb=True) + _log_eeprom("write", f"Writing {len(blob)} bytes to addr=0x{read_addr:02X}", data=bytes(blob[:16])) + _log_eeprom("write", "Write sequence (all bytes)", data=bytes(blob), full=True) + + success = hw.write_eeprom(blob, start_address=0, eeprom_address=read_addr) + if success: + _log_eeprom("write", "Write completed successfully") + else: + _log_eeprom("write", "Write failed!") + finally: + hw.set_i2c_direction(to_usb=False) + + dlg = QDialog(self) + dlg.setWindowTitle(f"EEPROM Manager (addr=0x{read_addr:02X})") + v = QVBoxLayout(dlg) + + w = EepromManagerWidget( + read_device=read_device, + write_device=write_device, + io_context=self.i2c_thread, + ) + v.addWidget(w) + btn_close = QPushButton("Zavřít") + btn_close.clicked.connect(dlg.accept) + v.addWidget(btn_close) + dlg.resize(900, 600) + dlg.exec_() + + def open_eeprom_manager_detector(self): + """Otevře EEPROM manager pro analogovou desku (USTSIPIN).""" + if self.i2c_thread.hw: + self._open_eeprom_manager(self.i2c_thread.hw.addr.an_eeprom) + else: + self._open_eeprom_manager(0x53) # fallback address + + def open_eeprom_manager_battery(self): + """Otevře EEPROM manager pro BatDatUnit.""" + if self.i2c_thread.hw: + self._open_eeprom_manager(self.i2c_thread.hw.addr.eeprom) + else: + self._open_eeprom_manager(0x50) # fallback address + + def open_rtc_manager(self): + """Otevře RTC manager pro správu hodin detektoru.""" + if not self.i2c_thread or not self.i2c_thread.hw: + # Demo mode + QMessageBox.warning( + self, + "RTC Manager", + "I2C není připojeno. Připojte se k detektoru." + ) + return + + hw = self.i2c_thread.hw + + def read_rtc(): + try: + hw.set_i2c_direction(to_usb=True) + return hw.read_rtc() + finally: + hw.set_i2c_direction(to_usb=False) + + def reset_rtc(): + try: + hw.set_i2c_direction(to_usb=True) + return hw.reset_rtc() + finally: + hw.set_i2c_direction(to_usb=False) + + def sync_rtc(): + # Zapíše kalibrační bod do EEPROM (sync_time, sync_rtc_seconds) + try: + hw.set_i2c_direction(to_usb=True) + return hw.sync_rtc() + finally: + hw.set_i2c_direction(to_usb=False) + + dlg = QDialog(self) + dlg.setWindowTitle("RTC Manager - AIRDOS04") + v = QVBoxLayout(dlg) + + w = RTCManagerWidget( + read_rtc=read_rtc, + reset_rtc=reset_rtc, + sync_rtc=sync_rtc + ) + w.show_raw_registers(True) + v.addWidget(w) + + btn_close = QPushButton("Zavřít") + btn_close.clicked.connect(dlg.accept) + v.addWidget(btn_close) + + dlg.resize(550, 550) + dlg.exec_() + class DataSpectrumView(QWidget): @@ -1216,7 +947,7 @@ def upload(self): files = {"image": path} multi_part = self.construct_multipart(data, files) if multi_part: - url = QtCore.QUrl("http://127.0.0.1:8100/api/record/") + url = Qt.QUrl("http://127.0.0.1:8100/api/record/") request = QtNetwork.QNetworkRequest(url) reply = self._manager.post(request, multi_part) multi_part.setParent(reply) diff --git a/dosview/airdos04.py b/dosview/airdos04.py new file mode 100644 index 0000000..c462542 --- /dev/null +++ b/dosview/airdos04.py @@ -0,0 +1,979 @@ +""" +AIRDOS04 Hardware Controller +============================ + +Qt-nezávislý modul pro ovládání hardware detektoru AIRDOS04 přes I2C. +Podporuje SMBus-kompatibilní rozhraní (např. FT260_I2C, smbus2). + +Použití +------- + from airdos04 import Airdos04Hardware + + # i2c_bus = FT260_I2C(...) nebo smbus2.SMBus(...) + hw = Airdos04Hardware(i2c_bus) + + # Vyčtení RTC + abs_time, elapsed = hw.read_rtc() + + # Reset RTC + hw.reset_rtc() + + # Vyčtení senzorů + status = hw.read_all_sensors() +""" + +from __future__ import annotations + +import datetime +import time +from dataclasses import dataclass, field +from typing import Any, Callable, Dict, List, Optional, Protocol, Tuple + + +class I2CBus(Protocol): + """ + Protokol pro SMBus-kompatibilní I2C rozhraní. + + Kompatibilní s: + - ft260.FT260_I2C + - smbus2.SMBus + """ + + def write_byte(self, address: int, value: int) -> None: ... + def write_byte_data(self, address: int, register: int, value: int) -> None: ... + def read_byte_data(self, address: int, register: int) -> int: ... + def read_word_data(self, address: int, register: int) -> int: ... + def write_i2c_block(self, address: int, data: List[int]) -> None: ... + def read_i2c_block(self, address: int, length: int) -> List[int]: ... + def read_i2c_block_data(self, address: int, register: int, length: int) -> List[int]: ... + def write_i2c_block_data(self, address: int, register: int, data: List[int]) -> bool: ... + + +@dataclass +class Airdos04Addresses: + """I2C adresy jednotlivých komponent AIRDOS04.""" + + # Hlavní deska (BatDatUnit) + sht: int = 0x44 # SHT4x teplotní/vlhkostní senzor + switch: int = 0x70 # I2C switch (USB/MCU) + sdcard: int = 0x71 # SD card controller (?) + charger: int = 0x6A # BQ25180 nabíječka + gauge: int = 0x55 # MAX17048 fuel gauge + rtc: int = 0x51 # PCF8563 RTC (stopky) + eeprom: int = 0x50 # AT24CS64 EEPROM data + eeprom_sn: int = 0x58 # AT24CS64 EEPROM serial number + altimet: int = 0x77 # MS5611 barometr/výškoměr + + # Analogová deska (USTSIPIN) + an_sht: int = 0x45 # SHT4x na analogové desce + an_eeprom: int = 0x53 # EEPROM analogové desky + an_eeprom_sn: int = 0x5B # EEPROM SN analogové desky + + +@dataclass +class RTCTime: + """Struktura pro čas z RTC.""" + absolute_time: datetime.datetime # Absolutní čas (init_time + elapsed) + elapsed: datetime.timedelta # Uplynulý čas z RTC registrů + start_time: datetime.datetime # Čas vynulování RTC (init_time) + + # Pole s výchozími hodnotami - odpovídají EEPROM struktuře + init_time: int = 0 # Unix timestamp kdy RTC bylo na 0 + raw_registers: Tuple[int, ...] = field(default_factory=tuple) # Surová data z registrů (pro debug) + sync_time: int = 0 # Unix timestamp poslední synchronizace + sync_rtc_seconds: int = 0 # Hodnota RTC v sekundách při synchronizaci + + +@dataclass +class BatteryStatus: + """Stav baterie a nabíječky.""" + + # Nabíječka (BQ25180) + ibus_adc: float = 0.0 # Vstupní proud [mA] + ibat_adc: float = 0.0 # Nabíjecí proud [mA] + vbus_adc: float = 0.0 # Vstupní napětí [V] + vpmid_adc: float = 0.0 # PMID napětí [V] + vbat_adc: float = 0.0 # Napětí baterie [V] + vsys_adc: float = 0.0 # Systémové napětí [V] + ts_adc: float = 0.0 # Teplota (termistor) [°C] + tdie_adc: float = 0.0 # Teplota čipu [°C] + + # Fuel gauge (MAX17048) + voltage: int = 0 # Napětí [raw] + current_avg: int = 0 # Průměrný proud [raw] + current_now: int = 0 # Okamžitý proud [raw] + remaining_capacity: int = 0 # Zbývající kapacita [raw] + full_capacity: int = 0 # Plná kapacita [raw] + temperature: int = 0 # Teplota [raw] + state: int = 0 # Stav [raw] + + +@dataclass +class SHTReading: + """Čtení z SHT4x senzoru.""" + temperature: float = 0.0 # [°C] + humidity: float = 0.0 # [%RH] + + +@dataclass +class AltimeterReading: + """Čtení z MS5611 barometru.""" + pressure_raw: int = 0 + temperature_raw: int = 0 + calibration_coefficients: List[int] = field(default_factory=list) + + +@dataclass +class Airdos04Status: + """Kompletní stav AIRDOS04 detektoru.""" + + # Identifikace + serial_number_batdatunit: str = "" + serial_number_ustsipin: str = "" + + # Čas + rtc: Optional[RTCTime] = None + + # Napájení + battery: Optional[BatteryStatus] = None + + # Senzory + sht_batdatunit: Optional[SHTReading] = None + sht_ustsipin: Optional[SHTReading] = None + altimeter: Optional[AltimeterReading] = None + + +class Airdos04Hardware: + """ + Třída pro ovládání hardware AIRDOS04 detektoru přes I2C. + + Tato třída je Qt-nezávislá a může být použita samostatně nebo + jako součást většího systému. + + Parameters + ---------- + i2c_bus : I2CBus + SMBus-kompatibilní I2C rozhraní (FT260_I2C, smbus2.SMBus, ...) + addresses : Airdos04Addresses, optional + Přizpůsobené I2C adresy (výchozí hodnoty pro AIRDOS04) + switch_callback : callable, optional + Callback pro přepínání I2C směru (USB/MCU). Signature: (to_usb: bool) -> None + """ + + def __init__( + self, + i2c_bus: I2CBus, + addresses: Optional[Airdos04Addresses] = None, + switch_callback: Optional[Callable[[bool], None]] = None, + ): + self.bus = i2c_bus + self.addr = addresses or Airdos04Addresses() + self._switch_callback = switch_callback + + # ========================================================================= + # I2C Switch Management + # ========================================================================= + + def set_i2c_direction(self, to_usb: bool) -> None: + """ + Přepne I2C switch mezi USB a MCU. + + Parameters + ---------- + to_usb : bool + True = I2C směřuje k USB (FT260), False = k MCU (ATmega) + """ + time.sleep(0.05) + if to_usb: + # Do USB se přepne tak, že bit[0] a bit[2] mají rozdílné hodnoty + self.bus.write_byte_data(self.addr.switch, 0x01, 0b011) + else: + # I2C do ATMEGA - bit[0] a bit[2] mají stejné hodnoty + self.bus.write_byte_data(self.addr.switch, 0x01, 0b0000) + time.sleep(0.05) + + if self._switch_callback: + self._switch_callback(to_usb) + + # ========================================================================= + # RTC Operations (PCF8563 ve stopwatch režimu) + # ========================================================================= + + def read_rtc_raw(self) -> Tuple[datetime.timedelta, Tuple[int, ...]]: + """ + Vyčte surový čas z RTC registrů. + + Returns + ------- + Tuple[timedelta, Tuple[int, ...]] + Uplynulý čas jako timedelta a surové registry. + """ + # Vyčtení registrů 0x00-0x07 + regs = [] + for reg in range(8): + regs.append(self.bus.read_byte_data(self.addr.rtc, reg)) + + # Dekódování BCD hodnot + r00, r01, r02, r03, r04, r05, r06, r07 = regs + + sec100 = (r00 & 0x0F) + ((r00 & 0xF0) >> 4) * 10 + sec = (r01 & 0x0F) + ((r01 & 0x70) >> 4) * 10 + minu = (r02 & 0x0F) + ((r02 & 0x70) >> 4) * 10 + + # Hodiny jsou rozloženy přes více registrů + hour = (r03 & 0x0F) + ((r03 & 0xF0) >> 4) * 10 + hour += (r04 & 0x0F) * 100 + ((r04 & 0xF0) >> 4) * 1000 + hour += (r05 & 0x0F) * 10000 + ((r05 & 0xF0) >> 4) * 100000 + + elapsed = datetime.timedelta( + hours=hour, + minutes=minu, + seconds=sec, + milliseconds=sec100 * 10 + ) + + return elapsed, tuple(regs) + + def read_rtc(self, eeprom_address: int = None) -> RTCTime: + """ + Vyčte čas z RTC (PCF8563 ve stopwatch režimu). + + Absolutní čas se vypočítá jako init_time + elapsed, + kde init_time je Unix timestamp kdy bylo RTC na 0 (z EEPROM). + + Parameters + ---------- + eeprom_address : int, optional + I2C adresa EEPROM (výchozí: addr.eeprom) + + Returns + ------- + RTCTime + Struktura s absolutním časem, uplynulým časem a startovním časem. + """ + # Vyčtení RTC registrů + elapsed, raw_regs = self.read_rtc_raw() + + # Vyčtení RTC sync dat z EEPROM + init_time = 0 + sync_time = 0 + sync_rtc_seconds = 0 + + try: + rtc_sync = self.get_rtc_sync_data(eeprom_address) + if rtc_sync: + init_time, sync_time, sync_rtc_seconds = rtc_sync + except Exception: + # Pokud se nepodaří vyčíst EEPROM, použijeme fallback + pass + + # Výpočet absolutního času + # Preferujeme sync_time (přesnější kalibrace), fallback na init_time + reference_time = sync_time if sync_time > 0 else init_time + + if reference_time > 0: + # reference_time je Unix timestamp času kdy RTC bylo na 0 + start_time = datetime.datetime.fromtimestamp(reference_time, tz=datetime.timezone.utc) + absolute_time = start_time + elapsed + else: + # Fallback - použijeme systémový čas + absolute_time = datetime.datetime.now(datetime.timezone.utc) + start_time = absolute_time - elapsed + + return RTCTime( + absolute_time=absolute_time, + elapsed=elapsed, + start_time=start_time, + init_time=init_time, + raw_registers=raw_regs, + sync_time=sync_time, + sync_rtc_seconds=sync_rtc_seconds + ) + + def get_rtc_sync_data(self, eeprom_address: int = None) -> Optional[Tuple[int, int, int]]: + """ + Vyčte RTC synchronizační data z EEPROM. + + Vrací: + - init_time: Unix timestamp kdy RTC bylo na 0 + - sync_time: Unix timestamp poslední synchronizace + - sync_rtc_seconds: Hodnota RTC v sekundách při synchronizaci + + Returns + ------- + Optional[Tuple[int, int, int]] + (init_time, sync_time, sync_rtc_seconds) nebo None pokud nejsou platná data + """ + from .eeprom_schema import unpack_record, TOTAL_SIZE + + if eeprom_address is None: + eeprom_address = self.addr.eeprom + + try: + data = self.read_eeprom(TOTAL_SIZE, start_address=0, eeprom_address=eeprom_address) + record = unpack_record(data, verify_crc=False) + + init_time = record.init_time + sync_time = record.sync_time + sync_rtc_seconds = record.sync_rtc_seconds + + if init_time > 0 or sync_time > 0: + return (init_time, sync_time, sync_rtc_seconds) + + return None + except Exception: + return None + + def sync_rtc(self, eeprom_address: int = None) -> datetime.datetime: + """ + Synchronizuje RTC čas se systémovým časem (pouze zápis do EEPROM). + + Nemění nic v RTC čipu! Pouze zapíše kalibrační bod do EEPROM: + - init_time: NEMĚNÍ SE (zůstává původní) + - sync_time: aktuální timestamp - aktuální RTC hodnota (čas kdy RTC bylo 0) + - sync_rtc_seconds: aktuální RTC hodnota v sekundách + + Parameters + ---------- + eeprom_address : int, optional + I2C adresa EEPROM (výchozí: addr.eeprom) + + Returns + ------- + datetime.datetime + Čas synchronizace (UTC). + """ + from .eeprom_schema import unpack_record, pack_record, TOTAL_SIZE + + if eeprom_address is None: + eeprom_address = self.addr.eeprom + + print("[sync_rtc] Začátek synchronizace RTC") + + # Vyčti aktuální RTC hodnotu + elapsed, _ = self.read_rtc_raw() + sync_rtc_seconds = int(elapsed.total_seconds()) + print(f"[sync_rtc] RTC elapsed: {elapsed}, v sekundách: {sync_rtc_seconds}") + + # Aktuální timestamp + now = datetime.datetime.now(datetime.timezone.utc) + current_timestamp = int(now.timestamp()) + print(f"[sync_rtc] Aktuální čas UTC: {now}, timestamp: {current_timestamp}") + + # sync_time = čas kdy RTC bylo 0 = aktuální timestamp - RTC hodnota + sync_time = current_timestamp - sync_rtc_seconds + print(f"[sync_rtc] Vypočtený sync_time: {sync_time} (UTC: {datetime.datetime.fromtimestamp(sync_time, tz=datetime.timezone.utc)})") + + # Vyčti aktuální EEPROM záznam + try: + print(f"[sync_rtc] Čtení EEPROM z adresy 0x{eeprom_address:02X}") + data = self.read_eeprom(TOTAL_SIZE, start_address=0, eeprom_address=eeprom_address) + print(f"[sync_rtc] EEPROM data vyčteno, velikost: {len(data)} bytů") + record = unpack_record(data, verify_crc=False) + print(f"[sync_rtc] init_time (NEMĚNÍ SE): {record.init_time}") + except Exception as e: + # Pokud se nepodaří vyčíst, vytvoříme nový záznam + print(f"[sync_rtc] Chyba při čtení EEPROM: {e}, vytváříme nový záznam") + from .eeprom_schema import EepromRecord + record = EepromRecord() + + # Aktualizace RTC sync dat (init_time se NEMĚNÍ!) + record.sync_time = sync_time + record.sync_rtc_seconds = sync_rtc_seconds + print(f"[sync_rtc] Záznam aktualizován: sync_time={sync_time}, sync_rtc_seconds={sync_rtc_seconds}") + + # Zápis do EEPROM + print(f"[sync_rtc] Zápis do EEPROM na adresu 0x{eeprom_address:02X}") + payload = pack_record(record, with_crc=True) + success = self.write_eeprom(payload, start_address=0, eeprom_address=eeprom_address) + + if not success: + print("[sync_rtc] CHYBA: Nepodařilo se zapsat RTC sync do EEPROM") + raise IOError("Nepodařilo se zapsat RTC sync do EEPROM") + + print(f"[sync_rtc] Synchronizace úspěšná! Čas: {now}") + return now + + def reset_rtc(self, eeprom_address: int = None) -> datetime.datetime: + """ + Resetuje RTC stopky na nulu a zapíše timestamp do EEPROM. + + 1. Vynuluje RTC čítač v čipu + 2. Zapíše do EEPROM: + - init_time: aktuální timestamp (čas vynulování) + - sync_time: aktuální timestamp (stejný, protože RTC=0) + - sync_rtc_seconds: 0 + + Parameters + ---------- + eeprom_address : int, optional + I2C adresa EEPROM (výchozí: addr.eeprom) + + Returns + ------- + datetime.datetime + Čas, kdy byl reset proveden (UTC). + """ + from .eeprom_schema import unpack_record, pack_record, TOTAL_SIZE + + if eeprom_address is None: + eeprom_address = self.addr.eeprom + + reset_time = datetime.datetime.now(datetime.timezone.utc) + reset_timestamp = int(reset_time.timestamp()) + + # Vynulování registrů 0x00-0x07 v RTC čipu + for reg in range(8): + self.bus.write_byte_data(self.addr.rtc, reg, 0) + + # Vyčti aktuální EEPROM záznam + try: + data = self.read_eeprom(TOTAL_SIZE, start_address=0, eeprom_address=eeprom_address) + record = unpack_record(data, verify_crc=False) + except Exception: + from .eeprom_schema import EepromRecord + record = EepromRecord() + + # Zápis timestampu resetu do EEPROM + record.init_time = reset_timestamp + record.sync_time = reset_timestamp # Při resetu je RTC=0, takže sync_time = init_time + record.sync_rtc_seconds = 0 + + # Zápis do EEPROM + payload = pack_record(record, with_crc=True) + success = self.write_eeprom(payload, start_address=0, eeprom_address=eeprom_address) + + if not success: + raise IOError("Nepodařilo se zapsat RTC reset do EEPROM") + + return reset_time + + def read_rtc_register(self, register: int) -> int: + """Vyčte jeden registr z RTC.""" + return self.bus.read_byte_data(self.addr.rtc, register) + + def write_rtc_register(self, register: int, value: int) -> None: + """Zapíše jeden registr do RTC.""" + self.bus.write_byte_data(self.addr.rtc, register, value) + + # ========================================================================= + # Battery & Charger Operations + # ========================================================================= + + def read_battery_status(self) -> BatteryStatus: + """ + Vyčte stav baterie z nabíječky (BQ25180) a fuel gauge (MAX17048). + + Returns + ------- + BatteryStatus + Kompletní stav baterie a nabíječky. + """ + # BQ25180 nabíječka + ibus_adc = (self.bus.read_byte_data(self.addr.charger, 0x28) >> 1) * 2 + ibat_adc = (self.bus.read_byte_data(self.addr.charger, 0x2A) >> 2) * 4 + vbus_adc = (self.bus.read_byte_data(self.addr.charger, 0x2C) >> 2) * 3.97 / 1000 + vpmid_adc = (self.bus.read_byte_data(self.addr.charger, 0x2E) >> 2) * 3.97 / 1000 + vbat_adc = (self.bus.read_word_data(self.addr.charger, 0x30) >> 1) * 1.99 / 1000 + vsys_adc = (self.bus.read_word_data(self.addr.charger, 0x32) >> 1) * 1.99 / 1000 + ts_adc = (self.bus.read_word_data(self.addr.charger, 0x34) >> 0) * 0.0961 + tdie_adc = (self.bus.read_word_data(self.addr.charger, 0x36) >> 0) * 0.5 + + # MAX17048 fuel gauge + g_voltage = self.bus.read_word_data(self.addr.gauge, 0x08) + g_cur_avg = self.bus.read_word_data(self.addr.gauge, 0x0A) + g_cur_now = self.bus.read_word_data(self.addr.gauge, 0x10) + g_rem_cap = self.bus.read_word_data(self.addr.gauge, 0x04) + g_ful_cap = self.bus.read_word_data(self.addr.gauge, 0x06) + g_temp = self.bus.read_word_data(self.addr.gauge, 0x0C) + g_state = self.bus.read_word_data(self.addr.gauge, 0x02) + + return BatteryStatus( + ibus_adc=ibus_adc, + ibat_adc=ibat_adc, + vbus_adc=vbus_adc, + vpmid_adc=vpmid_adc, + vbat_adc=vbat_adc, + vsys_adc=vsys_adc, + ts_adc=ts_adc, + tdie_adc=tdie_adc, + voltage=g_voltage, + current_avg=g_cur_avg, + current_now=g_cur_now, + remaining_capacity=g_rem_cap, + full_capacity=g_ful_cap, + temperature=g_temp, + state=g_state, + ) + + def set_charger_config(self, register: int, value: int) -> None: + """Nastaví konfigurační registr nabíječky.""" + self.bus.write_byte_data(self.addr.charger, register, value) + + def enable_charging(self) -> None: + """Povolí nabíjení (výchozí konfigurace).""" + self.bus.write_byte_data(self.addr.charger, 0x18, 0b00011000) + + def disable_charging_and_poweroff(self) -> None: + """Zakáže nabíjení a vypne napájení.""" + self.bus.write_byte_data(self.addr.charger, 0x18, 0b00011010) + + # ========================================================================= + # SHT4x Temperature/Humidity Sensor + # ========================================================================= + + def read_sht(self, address: int, command: List[int] = None) -> SHTReading: + """ + Vyčte teplotu a vlhkost z SHT4x senzoru. + + Parameters + ---------- + address : int + I2C adresa SHT senzoru (0x44 nebo 0x45) + command : list, optional + Příkaz pro měření (výchozí: high precision [0x24, 0x0B]) + + Returns + ------- + SHTReading + Teplota a vlhkost. + """ + if command is None: + command = [0x24, 0x0B] # High precision, no heater + + # Odeslání příkazu + self.bus.write_i2c_block(address, command) + time.sleep(0.02) # Čekání na měření + + # Vyčtení dat (6 bytů: 2B temp + CRC + 2B hum + CRC) + data = self.bus.read_i2c_block(address, 6) + + if len(data) < 6: + return SHTReading(temperature=0.0, humidity=0.0) + + raw_temperature = (data[0] << 8) + data[1] + raw_humidity = (data[3] << 8) + data[4] + + temperature = -45 + 175 * (raw_temperature / 65535.0) + humidity = 100 * (raw_humidity / 65535.0) + + return SHTReading(temperature=temperature, humidity=humidity) + + def read_sht_batdatunit(self) -> SHTReading: + """Vyčte SHT4x na BatDatUnit desce.""" + return self.read_sht(self.addr.sht) + + def read_sht_ustsipin(self) -> SHTReading: + """Vyčte SHT4x na USTSIPIN (analogové) desce.""" + return self.read_sht(self.addr.an_sht) + + def read_sht_serial_number(self, address: int) -> int: + """Vyčte sériové číslo SHT4x senzoru.""" + self.bus.write_i2c_block(address, [0x89]) + time.sleep(0.01) + data = self.bus.read_i2c_block(address, 6) + serial_number = (data[0] << 24) | (data[1] << 16) | (data[3] << 8) | data[4] + return serial_number + + # ========================================================================= + # MS5611 Barometer/Altimeter + # ========================================================================= + + def read_altimeter(self) -> AltimeterReading: + """ + Vyčte data z MS5611 barometru/výškoměru. + + Returns + ------- + AltimeterReading + Tlak, teplota a kalibrační koeficienty. + """ + # Vyčtení kalibračních koeficientů z PROM + cal_coefs = [] + for addr in range(0xA0, 0xAE, 2): + self.bus.write_byte(self.addr.altimet, addr) + time.sleep(0.1) + data = self.bus.read_i2c_block(self.addr.altimet, 2) + time.sleep(0.1) + if len(data) >= 2: + coef = (data[0] << 8) | data[1] + cal_coefs.append(coef) + else: + cal_coefs.append(0) + + time.sleep(0.2) + + # Spuštění konverze tlaku (OSR=4096) + self.bus.write_byte(self.addr.altimet, 0b01001000) + time.sleep(0.2) + self.bus.write_byte(self.addr.altimet, 0) + time.sleep(0.2) + pressure_data = self.bus.read_i2c_block(self.addr.altimet, 3) + if len(pressure_data) < 3: + pressure_data = (pressure_data + [0, 0, 0])[:3] + time.sleep(0.2) + + # Spuštění konverze teploty (OSR=4096) + self.bus.write_byte(self.addr.altimet, 0b01011000) + time.sleep(0.2) + self.bus.write_byte(self.addr.altimet, 0) + time.sleep(0.2) + temp_data = self.bus.read_i2c_block(self.addr.altimet, 3) + if len(temp_data) < 3: + temp_data = (temp_data + [0, 0, 0])[:3] + + pressure_raw = (int(pressure_data[0]) << 16) | (int(pressure_data[1]) << 8) | int(pressure_data[2]) + temp_raw = (int(temp_data[0]) << 16) | (int(temp_data[1]) << 8) | int(temp_data[2]) + + return AltimeterReading( + pressure_raw=pressure_raw, + temperature_raw=temp_raw, + calibration_coefficients=cal_coefs + ) + + # ========================================================================= + # EEPROM Operations + # ========================================================================= + + def read_serial_number(self, eeprom_sn_address: int = None) -> int: + """ + Vyčte sériové číslo z EEPROM (AT24CS64). + + AT24CS64 má 128-bit SN na speciální adrese 0x0800. + Čtení vyžaduje 2-byte word address (MSB first). + + Parameters + ---------- + eeprom_sn_address : int, optional + Adresa SN EEPROM (výchozí: addr.eeprom_sn = 0x58) + + Returns + ------- + int + Sériové číslo jako 128-bit integer. + """ + if eeprom_sn_address is None: + eeprom_sn_address = self.addr.eeprom_sn + + # Nastavení word address 0x0800 (MSB first: 0x08, 0x00) + self.bus.write_i2c_block(eeprom_sn_address, [0x08, 0x00]) + + # Čtení 16 bajtů SN + data = self.bus.read_i2c_block(eeprom_sn_address, 16) + + result = 0 + for byte in data: + result = (result << 8) | byte + + return result + + def read_serial_number_hex(self, eeprom_sn_address: int = None) -> str: + """Vyčte sériové číslo jako hex string.""" + return hex(self.read_serial_number(eeprom_sn_address)) + + def read_serial_number_batdatunit(self) -> str: + """Vyčte SN hlavní desky (BatDatUnit).""" + return self.read_serial_number_hex(self.addr.eeprom_sn) + + def read_serial_number_ustsipin(self) -> str: + """Vyčte SN analogové desky (USTSIPIN).""" + return self.read_serial_number_hex(self.addr.an_eeprom_sn) + + def read_eeprom( + self, + length: int, + start_address: int = 0, + eeprom_address: int = None + ) -> bytes: + """ + Vyčte data z EEPROM. + + Parameters + ---------- + length : int + Počet bytů k vyčtení. + start_address : int + Počáteční adresa v EEPROM (2-byte word address). + eeprom_address : int, optional + I2C adresa EEPROM (výchozí: addr.eeprom) + + Returns + ------- + bytes + Vyčtená data. + """ + if eeprom_address is None: + eeprom_address = self.addr.eeprom + + PAGE_SIZE = 32 + total = bytearray() + offset = start_address + + while len(total) < length: + to_read = min(PAGE_SIZE, length - len(total)) + # Nastavení pointeru (big-endian pro AT24CS64) + addr_hi = (offset >> 8) & 0xFF + addr_lo = offset & 0xFF + self.bus.write_i2c_block(eeprom_address, [addr_hi, addr_lo]) + chunk = self.bus.read_i2c_block(eeprom_address, to_read) + if not chunk: + break + total.extend(chunk[:to_read]) + offset += len(chunk[:to_read]) + + return bytes(total) + + def write_eeprom( + self, + data: bytes, + start_address: int = 0, + eeprom_address: int = None, + max_retries: int = 100, + verify: bool = True + ) -> bool: + """ + Zapíše data do EEPROM AT24CS64. + + EEPROM má stránky o velikosti 32 bajtů. Zápis nesmí překročit + hranici stránky, jinak dojde k zacyklení na začátek stránky. + + Parameters + ---------- + data : bytes + Data k zápisu. + start_address : int + Počáteční adresa v EEPROM (0x0000-0x1FFF). + eeprom_address : int, optional + I2C adresa EEPROM (výchozí: addr.eeprom = 0x50) + max_retries : int + Maximální počet pokusů pro ACK polling (výchozí: 100). + verify : bool + Ověřit zapsaná data zpětným čtením (výchozí: True). + + Returns + ------- + bool + True pokud zápis proběhl úspěšně. + + Notes + ----- + Po každém zápisu stránky probíhá interní programovací cyklus (~5 ms), + během kterého EEPROM neodpovídá na I2C. Používáme ACK polling + pro detekci dokončení. + + Příklad + ------- + >>> hw.write_eeprom(b"Hello World!", start_address=0x100) + True + """ + if eeprom_address is None: + eeprom_address = self.addr.eeprom + + PAGE_SIZE = 32 + MAX_WRITE_SIZE = 16 # Bezpečná velikost pro jeden zápis (FT260 limit) + + data = bytes(data) + addr = start_address + offset = 0 + + while offset < len(data): + # Kolik místa zbývá do konce aktuální stránky + page_offset = addr % PAGE_SIZE + page_remaining = PAGE_SIZE - page_offset + + # Kolik dat zapíšeme v tomto cyklu + bytes_to_write = min(page_remaining, MAX_WRITE_SIZE, len(data) - offset) + + chunk = list(data[offset:offset + bytes_to_write]) + + # Sestavení I2C zprávy: [ADDR_MSB, ADDR_LSB, DATA...] + addr_hi = (addr >> 8) & 0xFF + addr_lo = addr & 0xFF + payload = [addr_hi, addr_lo] + chunk + + # Zápis do EEPROM + self.bus.write_i2c_block(eeprom_address, payload) + + # ACK polling - čekání na dokončení programovacího cyklu + # EEPROM neodpovídá během interního zápisu (~5 ms) + write_complete = False + for _ in range(max_retries): + time.sleep(0.001) # 1 ms mezi pokusy + try: + # Pokus o čtení - pokud EEPROM odpoví, zápis je dokončen + self.bus.read_i2c_block(eeprom_address, 1) + write_complete = True + break + except Exception: + continue + + if not write_complete: + return False # Timeout - EEPROM neodpověděla + + # Verifikace zapsaných dat + if verify: + readback = self._eeprom_read_chunk(eeprom_address, addr, bytes_to_write) + if readback != chunk: + return False # Data se neshodují + + addr += bytes_to_write + offset += bytes_to_write + + return True + + def _eeprom_read_chunk(self, eeprom_address: int, addr: int, n: int) -> List[int]: + """Pomocná metoda pro čtení EEPROM chunku.""" + addr_hi = (addr >> 8) & 0xFF + addr_lo = addr & 0xFF + self.bus.write_i2c_block(eeprom_address, [addr_hi, addr_lo]) + return list(self.bus.read_i2c_block(eeprom_address, n)) + + # ========================================================================= + # High-Level Status Reading + # ========================================================================= + + def read_all_sensors(self) -> Airdos04Status: + """ + Vyčte kompletní stav všech senzorů AIRDOS04. + + Returns + ------- + Airdos04Status + Kompletní stav detektoru. + """ + status = Airdos04Status() + + # Sériová čísla + try: + status.serial_number_batdatunit = self.read_serial_number_batdatunit() + except Exception: + pass + + try: + status.serial_number_ustsipin = self.read_serial_number_ustsipin() + except Exception: + pass + + # RTC + try: + status.rtc = self.read_rtc() + except Exception: + pass + + # Baterie + try: + status.battery = self.read_battery_status() + except Exception: + pass + + # SHT senzory + try: + status.sht_batdatunit = self.read_sht_batdatunit() + except Exception: + pass + + try: + status.sht_ustsipin = self.read_sht_ustsipin() + except Exception: + pass + + # Výškoměr + try: + status.altimeter = self.read_altimeter() + except Exception: + pass + + return status + + def to_dict(self, status: Airdos04Status = None) -> Dict[str, Any]: + """ + Převede stav do slovníku (kompatibilní s původním API). + + Parameters + ---------- + status : Airdos04Status, optional + Stav k převodu (pokud None, vyčte aktuální). + + Returns + ------- + dict + Slovník se stavem detektoru. + """ + if status is None: + status = self.read_all_sensors() + + result = { + 'sn_batdatunit': status.serial_number_batdatunit, + 'sn_ustsipin': status.serial_number_ustsipin, + } + + if status.rtc: + result['RTC'] = { + 'sys_time': status.rtc.elapsed, + 'abs_time': status.rtc.absolute_time, + 'sys_begin_time': status.rtc.start_time, + } + + if status.battery: + result['CHARGER'] = { + 'IBUS_ADC': status.battery.ibus_adc, + 'IBAT_ADC': status.battery.ibat_adc, + 'VBUS_ADC': status.battery.vbus_adc, + 'VPMID_ADC': status.battery.vpmid_adc, + 'VBAT_ADC': status.battery.vbat_adc, + 'VSYS_ADC': status.battery.vsys_adc, + 'TS_ADC': status.battery.ts_adc, + 'TDIE_ADC': status.battery.tdie_adc, + } + result['GAUGE'] = { + 'VOLTAGE': status.battery.voltage, + 'CUR_AVG': status.battery.current_avg, + 'CUR_NOW': status.battery.current_now, + 'REM_CAP': status.battery.remaining_capacity, + 'FUL_CAP': status.battery.full_capacity, + 'TEMP': status.battery.temperature, + 'STATE': status.battery.state, + } + + if status.sht_batdatunit: + result['SHT'] = { + 'temperature': status.sht_batdatunit.temperature, + 'humidity': status.sht_batdatunit.humidity, + } + + if status.sht_ustsipin: + result['AIRDOS_SHT'] = { + 'temperature': status.sht_ustsipin.temperature, + 'humidity': status.sht_ustsipin.humidity, + } + + if status.altimeter: + result['ALTIMET'] = { + 'calcoef': status.altimeter.calibration_coefficients, + 'altitude': status.altimeter.pressure_raw, + 'temperature': status.altimeter.temperature_raw, + } + + return result + + def scan_i2c_bus(self, start: int = 0x03, end: int = 0x77) -> list[int]: + """Skenuje I2C sběrnici a vrací seznam nalezených adres. + + Args: + start: Počáteční adresa (default 0x03) + end: Koncová adresa (default 0x77) + + Returns: + Seznam nalezených I2C adres + """ + found = [] + for addr in range(start, end + 1): + try: + # Pokus o čtení 1 bajtu z adresy + data = self.bus.read_i2c_block_data(addr, 0, 1) + if data is not None: + found.append(addr) + except Exception: + # Zařízení na této adrese neodpovědělo + pass + return found diff --git a/dosview/airdos04_info.py b/dosview/airdos04_info.py new file mode 100644 index 0000000..50239db --- /dev/null +++ b/dosview/airdos04_info.py @@ -0,0 +1,399 @@ +#!/usr/bin/env python3 +"""CLI nástroj pro vyčtení informací z detektoru AIRDOS04. + +Použití: + python -m dosview.airdos04_info + # nebo po instalaci: + airdos04-info +""" +from __future__ import annotations + +import argparse +import sys +from datetime import timedelta + +try: + import hid +except ImportError: + hid = None + +try: + import ft260 + FT260_I2C = ft260.FT260_I2C +except ImportError: + ft260 = None + FT260_I2C = None + +from .airdos04 import Airdos04Hardware, Airdos04Addresses + + +# FT260 USB identifiers +FT260_VID = 0x1209 +FT260_PID = 0x7aa0 + + +def find_ft260_device(): + """Najde FT260 HID zařízení.""" + if hid is None: + print("❌ Modul 'hid' není nainstalován. Nainstalujte: pip install hidapi") + return None + + devices = hid.enumerate(FT260_VID, FT260_PID) + if not devices: + print("❌ FT260 zařízení nenalezeno") + print(" Ujistěte se, že je detektor AIRDOS04 připojen přes USB") + + # Zobrazit všechna HID zařízení pro debug + all_devices = hid.enumerate() + if all_devices: + print("\n Nalezená HID zařízení:") + for d in all_devices[:10]: # Omezíme na 10 + vid = d.get('vendor_id', 0) + pid = d.get('product_id', 0) + prod = d.get('product_string', 'N/A') + print(f" - VID:0x{vid:04X} PID:0x{pid:04X} '{prod}'") + return None + + # Hledáme interface 0 (I2C) + for dev_info in devices: + if dev_info.get('interface_number', -1) == 0: + dev = hid.device() + dev.open_path(dev_info['path']) + + # Inicializace FT260 - I2C reset a nastavení módu + dev.send_feature_report([0xA1, 0x20]) # I2C reset + dev.send_feature_report([0xA1, 0x02, 0x01]) # I2C enable + + return dev + + # Fallback - první zařízení + dev = hid.device() + dev.open_path(devices[0]['path']) + dev.send_feature_report([0xA1, 0x20]) + dev.send_feature_report([0xA1, 0x02, 0x01]) + return dev + + +def format_time(seconds: float) -> str: + """Formátuje čas v sekundách na čitelný řetězec.""" + td = timedelta(seconds=int(seconds)) + days = td.days + hours, remainder = divmod(td.seconds, 3600) + minutes, secs = divmod(remainder, 60) + + parts = [] + if days > 0: + parts.append(f"{days}d") + if hours > 0 or days > 0: + parts.append(f"{hours}h") + if minutes > 0 or hours > 0 or days > 0: + parts.append(f"{minutes}m") + parts.append(f"{secs}s") + + return " ".join(parts) + + +def print_header(title: str): + """Vytiskne nadpis sekce.""" + print() + print(f"{'─' * 50}") + print(f" {title}") + print(f"{'─' * 50}") + + +def print_row(label: str, value, unit: str = ""): + """Vytiskne řádek s hodnotou.""" + if value is None: + value_str = "N/A" + elif isinstance(value, float): + value_str = f"{value:.2f}" + else: + value_str = str(value) + + if unit: + value_str = f"{value_str} {unit}" + + print(f" {label:<30} {value_str}") + + +def main(): + parser = argparse.ArgumentParser( + description="Vyčte informace z detektoru AIRDOS04 přes FT260 I2C bridge" + ) + parser.add_argument( + "-v", "--verbose", + action="store_true", + help="Podrobný výstup" + ) + parser.add_argument( + "--json", + action="store_true", + help="Výstup ve formátu JSON" + ) + parser.add_argument( + "--no-sensors", + action="store_true", + help="Přeskočit čtení senzorů (rychlejší)" + ) + parser.add_argument( + "--write-test", + action="store_true", + help="Provést testovací zápis do EEPROM (adresa 0x0100)" + ) + parser.add_argument( + "--write-data", + type=str, + metavar="HEX", + help="Zapsat hex data do EEPROM (např. '48454C4C4F' pro 'HELLO')" + ) + parser.add_argument( + "--write-addr", + type=lambda x: int(x, 0), + default=0x0100, + metavar="ADDR", + help="Adresa pro zápis do EEPROM (výchozí: 0x0100)" + ) + args = parser.parse_args() + + # Kontrola závislostí + if FT260_I2C is None: + print("❌ Modul 'ft260' není nainstalován.") + print(" Nainstalujte: pip install PyFT260") + sys.exit(1) + + # Připojení k zařízení + print("🔍 Hledám FT260 zařízení...") + dev = find_ft260_device() + if dev is None: + sys.exit(1) + + try: + print("✅ FT260 nalezeno, připojuji...") + ftdi = FT260_I2C(hid_device=dev) + hw = Airdos04Hardware(ftdi) + + # Přepnout I2C směr na USB + hw.set_i2c_direction(to_usb=True) + + # Zpracování zápisu do EEPROM + if args.write_test or args.write_data: + write_addr = args.write_addr + + if args.write_data: + # Převod hex stringu na bajty + try: + write_data = bytes.fromhex(args.write_data) + except ValueError: + print(f"❌ Neplatná hex data: {args.write_data}") + sys.exit(1) + else: + # Testovací data + write_data = b"AIRDOS04 Test " + bytes([0x00, 0x01, 0x02, 0x03]) + + print(f"\n📝 Zápis do EEPROM:") + print(f" Adresa: 0x{write_addr:04X}") + print(f" Délka: {len(write_data)} bajtů") + print(f" Data: {write_data.hex().upper()}") + + # Přečíst původní data + print(f"\n Původní data na adrese 0x{write_addr:04X}:") + original = hw.read_eeprom(len(write_data), start_address=write_addr) + print(f" {original.hex().upper()}") + + # Zápis + print(f"\n Zapisuji...") + success = hw.write_eeprom(write_data, start_address=write_addr) + + if success: + print(f" ✅ Zápis úspěšný!") + # Ověření + verify = hw.read_eeprom(len(write_data), start_address=write_addr) + print(f" Ověření: {verify.hex().upper()}") + if verify == write_data: + print(f" ✅ Data ověřena!") + else: + print(f" ❌ Data se neshodují!") + else: + print(f" ❌ Zápis selhal!") + + print() + + if args.json: + # JSON výstup + import json + status = hw.get_full_status(include_sensors=not args.no_sensors) + print(json.dumps(status.to_dict(), indent=2, default=str)) + else: + # Textový výstup + print_info(hw, verbose=args.verbose, include_sensors=not args.no_sensors) + + except Exception as e: + print(f"❌ Chyba: {e}") + if args.verbose: + import traceback + traceback.print_exc() + sys.exit(1) + finally: + hw.set_i2c_direction(to_usb=False) + dev.close() + + +def print_info(hw: Airdos04Hardware, verbose: bool = False, include_sensors: bool = True): + """Vytiskne informace o detektoru.""" + + print() + print("=" * 50) + print(" AIRDOS04 Detector Information") + print("=" * 50) + + # ─── Sériová čísla ─── + print_header("📋 Identifikace") + + try: + sn_batdat = hw.read_serial_number_batdatunit() + print_row("SN BATDATUNIT", sn_batdat) + except Exception as e: + print_row("SN BATDATUNIT", f"Chyba: {e}") + + try: + sn_ustsipin = hw.read_serial_number_ustsipin() + print_row("SN USTSIPIN", sn_ustsipin) + except Exception as e: + print_row("SN USTSIPIN", f"Chyba: {e}") + + # ─── RTC / Stopky ─── + print_header("⏱️ RTC (Stopky)") + + try: + rtc = hw.read_rtc() + total_secs = rtc.elapsed.total_seconds() + print_row("Celkový čas", format_time(total_secs)) + print_row("Sekundy (raw)", total_secs, "s") + print_row("Start time", str(rtc.start_time)) + print_row("Aktuální čas", str(rtc.absolute_time)) + if verbose and rtc.raw_registers: + regs = " ".join(f"{r:02X}" for r in rtc.raw_registers) + print_row("Raw registry", regs) + except Exception as e: + print_row("RTC", f"Chyba: {e}") + + # ─── Baterie ─── + print_header("🔋 Baterie") + + try: + battery = hw.read_battery_status() + + # Fuel gauge (MAX17048) + if battery.voltage: + # Převod raw hodnoty na V (MAX17048: 78.125µV/LSB) + voltage_v = battery.voltage * 78.125 / 1000000 + print_row("Napětí (raw)", battery.voltage) + print_row("Napětí", voltage_v, "V") + if battery.remaining_capacity: + print_row("Zbývající kapacita", battery.remaining_capacity) + if battery.full_capacity: + print_row("Plná kapacita", battery.full_capacity) + if battery.temperature: + print_row("Teplota", battery.temperature) + if battery.current_avg: + print_row("Průměrný proud", battery.current_avg) + if battery.state: + print_row("Stav", battery.state) + + # Charger (BQ25180) ADC values + if verbose: + if battery.vbat_adc: + print_row("VBAT ADC", battery.vbat_adc, "V") + if battery.vbus_adc: + print_row("VBUS ADC", battery.vbus_adc, "V") + if battery.ibat_adc: + print_row("IBAT ADC", battery.ibat_adc, "mA") + if battery.tdie_adc: + print_row("Teplota čipu", battery.tdie_adc, "°C") + + except Exception as e: + print_row("Baterie", f"Chyba: {e}") + + # ─── Senzory ─── + if include_sensors: + print_header("🌡️ Senzory prostředí") + + # SHT senzory + sht_addresses = [ + ("BATDATUNIT", hw.addr.sht), + ("USTSIPIN", hw.addr.an_sht), + ] + for name, addr in sht_addresses: + try: + sht = hw.read_sht(addr) + label_prefix = f"SHT {name} (0x{addr:02X})" + print_row(f"{label_prefix} Teplota", sht.temperature, "°C") + print_row(f"{label_prefix} Vlhkost", sht.humidity, "%RH") + except Exception as e: + if verbose: + print_row(f"SHT {name} (0x{addr:02X})", f"Chyba: {e}") + + # Altimetr MS5611 + try: + alt = hw.read_altimeter() + print_row("MS5611 Tlak (raw)", alt.pressure_raw) + print_row("MS5611 Teplota (raw)", alt.temperature_raw) + if verbose and alt.calibration_coefficients: + coeffs = ", ".join(str(c) for c in alt.calibration_coefficients) + print_row("MS5611 Kalib. koef.", coeffs) + except Exception as e: + if verbose: + print_row("MS5611", f"Chyba: {e}") + + # ─── I2C adresy ─── + if verbose: + print_header("📍 I2C Adresy (konfigurace)") + print_row("RTC (PCF8563)", f"0x{hw.addr.rtc:02X}") + print_row("Charger (BQ25180)", f"0x{hw.addr.charger:02X}") + print_row("Fuel gauge (MAX17048)", f"0x{hw.addr.gauge:02X}") + print_row("SHT BATDATUNIT", f"0x{hw.addr.sht:02X}") + print_row("SHT USTSIPIN", f"0x{hw.addr.an_sht:02X}") + print_row("MS5611", f"0x{hw.addr.altimet:02X}") + print_row("I2C Switch", f"0x{hw.addr.switch:02X}") + print_row("EEPROM data", f"0x{hw.addr.eeprom:02X}") + print_row("EEPROM SN", f"0x{hw.addr.eeprom_sn:02X}") + print_row("AN EEPROM data", f"0x{hw.addr.an_eeprom:02X}") + print_row("AN EEPROM SN", f"0x{hw.addr.an_eeprom_sn:02X}") + + # ─── I2C Scan ─── + if verbose: + print_header("🔍 I2C Scan") + try: + found = hw.scan_i2c_bus() + if found: + addrs_str = ", ".join(f"0x{a:02X}" for a in sorted(found)) + print(f" Nalezená zařízení: {addrs_str}") + else: + print(" Žádná zařízení nenalezena") + except Exception as e: + print(f" Chyba při skenování: {e}") + + # ─── EEPROM Dump ─── + if verbose: + print_header("💾 EEPROM Obsah (prvních 512 bajtů)") + try: + eeprom_data = hw.read_eeprom(512, start_address=0) + # Hexdump formát + for offset in range(0, len(eeprom_data), 16): + chunk = eeprom_data[offset:offset+16] + hex_part = " ".join(f"{b:02X}" for b in chunk) + # ASCII část (tisknutelné znaky, jinak '.') + ascii_part = "".join(chr(b) if 32 <= b < 127 else '.' for b in chunk) + print(f" {offset:04X}: {hex_part:<48} |{ascii_part}|") + except Exception as e: + print(f" Chyba při čtení EEPROM: {e}") + + print() + print("=" * 50) + print(" ✅ Hotovo") + print("=" * 50) + print() + + +if __name__ == "__main__": + main() diff --git a/dosview/eeprom_schema.py b/dosview/eeprom_schema.py new file mode 100644 index 0000000..8c5a848 --- /dev/null +++ b/dosview/eeprom_schema.py @@ -0,0 +1,201 @@ +"""EEPROM layout schema, packing/unpacking, and CRC helpers. + +This is the single source of truth for both Python handling and the C++ +header generator. Packing uses little-endian, packed layout (no padding). +""" +from __future__ import annotations + +import enum +import struct +import zlib +from dataclasses import dataclass +from typing import Iterable, Tuple + + +class DeviceType(enum.IntEnum): + AIRDOS04 = 0 + BATDATUNIT01 = 1 + LABDOS01 = 2 + + +# Little-endian, packed, no padding. Calib uses float (4 bytes) for MCU +# compatibility. +# RTC: init_time, sync_time, sync_rtc_seconds (3× uint32) +STRUCT_FORMAT = " dict: + """Převede záznam na slovník pro JSON zobrazení.""" + import datetime + + # RTC synchronizační data + init_time_str = None + if self.init_time > 0: + try: + init_time_str = datetime.datetime.fromtimestamp(self.init_time, tz=datetime.timezone.utc).isoformat() + except (OSError, ValueError): + pass + + sync_time_str = None + if self.sync_time > 0: + try: + sync_time_str = datetime.datetime.fromtimestamp(self.sync_time, tz=datetime.timezone.utc).isoformat() + except (OSError, ValueError): + pass + + # Kalibrace timestamp + calib_time = None + if self.calib_ts > 0: + try: + calib_time = datetime.datetime.fromtimestamp(self.calib_ts, tz=datetime.timezone.utc).isoformat() + except (OSError, ValueError): + pass + + return { + 'format_version': self.format_version, + 'device_type': self.device_type.name if isinstance(self.device_type, DeviceType) else str(self.device_type), + 'crc32': f"0x{self.crc32:08X}", + 'hw_revision': f"{self.hw_rev_major}.{self.hw_rev_minor}", + 'device_id': self.device_id, + 'config_flags': f"0x{self.config_flags:08X}", + 'rtc_flags': f"0x{self.rtc_flags:02X}", + 'rtc_sync': { + 'init_time': self.init_time, + 'init_time_str': init_time_str, + 'sync_time': self.sync_time, + 'sync_time_str': sync_time_str, + 'sync_rtc_seconds': self.sync_rtc_seconds, + }, + 'calibration': { + 'a0': self.calib[0], + 'a1': self.calib[1], + 'a2': self.calib[2], + 'timestamp': self.calib_ts, + 'time': calib_time, + }, + } + + def pack(self, with_crc: bool = True) -> bytes: + payload = _pack_payload(self, crc_override=0) + if with_crc: + crc = compute_crc32(payload) + payload = _inject_crc(payload, crc) + return payload + + @classmethod + def unpack(cls, blob: bytes, verify_crc: bool = False) -> "EepromRecord": + if len(blob) < TOTAL_SIZE: + raise ValueError(f"Blob too short: {len(blob)} < {TOTAL_SIZE}") + unpacked = STRUCT.unpack_from(blob) + device_id_bytes = unpacked[5] + # RTC sync fields: index 8, 9, 10 + init_time = unpacked[8] + sync_time = unpacked[9] + sync_rtc_seconds = unpacked[10] + # Calib: index 11, 12, 13 + calib_values = unpacked[11:14] + record = cls( + format_version=unpacked[0], + device_type=DeviceType(unpacked[1]), + crc32=unpacked[2], + hw_rev_major=unpacked[3], + hw_rev_minor=unpacked[4], + device_id=_decode_device_id(device_id_bytes), + config_flags=unpacked[6], + rtc_flags=unpacked[7], + init_time=init_time, + sync_time=sync_time, + sync_rtc_seconds=sync_rtc_seconds, + calib=tuple(calib_values), + calib_ts=unpacked[14], + ) + if verify_crc: + expected = compute_crc32(blob) + if expected != record.crc32: + raise ValueError( + f"CRC mismatch: stored=0x{record.crc32:08X}, computed=0x{expected:08X}" + ) + return record + + +def compute_crc32(blob: bytes) -> int: + """Compute CRC32 (IEEE) over the blob with the CRC field zeroed.""" + masked = _mask_crc(blob) + return zlib.crc32(masked, 0xFFFFFFFF) ^ 0xFFFFFFFF + + +def _mask_crc(blob: bytes) -> bytes: + return blob[:CRC_OFFSET] + b"\x00" * CRC_SIZE + blob[CRC_OFFSET + CRC_SIZE :] + + +def _inject_crc(blob: bytes, crc: int) -> bytes: + return ( + blob[:CRC_OFFSET] + + int(crc & 0xFFFFFFFF).to_bytes(4, byteorder="little") + + blob[CRC_OFFSET + CRC_SIZE :] + ) + + +def _encode_device_id(device_id: str) -> bytes: + raw = (device_id or "").encode("ascii", errors="ignore")[:10] + return raw.ljust(10, b"\x00") + + +def _decode_device_id(data: bytes) -> str: + return data.split(b"\x00", 1)[0].decode("ascii", errors="ignore") + + +def _normalize_calib(calib: Iterable[float]) -> Tuple[float, float, float]: + values = list(calib)[:3] + if len(values) < 3: + values.extend([0.0] * (3 - len(values))) + return tuple(float(v) for v in values) + + +def _pack_payload(record: EepromRecord, crc_override: int) -> bytes: + calib_values = _normalize_calib(record.calib) + device_id_bytes = _encode_device_id(record.device_id) + return STRUCT.pack( + int(record.format_version) & 0xFFFF, + int(record.device_type) & 0xFFFF, + int(crc_override) & 0xFFFFFFFF, + int(record.hw_rev_major) & 0xFF, + int(record.hw_rev_minor) & 0xFF, + device_id_bytes, + int(record.config_flags) & 0xFFFFFFFF, + int(record.rtc_flags) & 0xFF, + int(record.init_time) & 0xFFFFFFFF, + int(record.sync_time) & 0xFFFFFFFF, + int(record.sync_rtc_seconds) & 0xFFFFFFFF, + *calib_values, + int(record.calib_ts) & 0xFFFFFFFF, + ) + + +def pack_record(record: EepromRecord, with_crc: bool = True) -> bytes: + return record.pack(with_crc=with_crc) + + +def unpack_record(blob: bytes, verify_crc: bool = False) -> EepromRecord: + return EepromRecord.unpack(blob, verify_crc=verify_crc) diff --git a/dosview/eeprom_widget.py b/dosview/eeprom_widget.py new file mode 100644 index 0000000..af7995d --- /dev/null +++ b/dosview/eeprom_widget.py @@ -0,0 +1,442 @@ +"""PyQt5 widget for viewing/editing EEPROM content. + +This widget stays reusable: parent provides callbacks for device IO. +Single column editor with load/save functionality. +""" +from __future__ import annotations + +from pathlib import Path +from typing import Any, Callable, Optional + +from PyQt5 import QtCore, QtWidgets + +from .eeprom_schema import ( + DeviceType, + EepromRecord, + TOTAL_SIZE, + compute_crc32, + pack_record, + unpack_record, +) +from .loading_dialog import LoadingContext + + +IntReader = Callable[[], bytes] +IntWriter = Callable[[bytes], None] + + +class EepromManagerWidget(QtWidgets.QWidget): + def __init__( + self, + parent: Optional[QtWidgets.QWidget] = None, + read_device: Optional[IntReader] = None, + write_device: Optional[IntWriter] = None, + io_context: Optional[Any] = None, + ) -> None: + super().__init__(parent) + self._read_device = read_device + self._write_device = write_device + self._io_context = io_context + self._widgets = {} + self._build_ui() + + # UI construction ----------------------------------------------------- + def _build_ui(self) -> None: + layout = QtWidgets.QVBoxLayout(self) + + # Buttons + buttons = QtWidgets.QHBoxLayout() + self.btn_load_device = QtWidgets.QPushButton("📋 Load from Device") + self.btn_write_device = QtWidgets.QPushButton("💾 Write to Device") + self.btn_load_file = QtWidgets.QPushButton("📋 Load from File") + self.btn_save_file = QtWidgets.QPushButton("💾 Save to File") + + for btn in ( + self.btn_load_device, + self.btn_write_device, + self.btn_load_file, + self.btn_save_file, + ): + buttons.addWidget(btn) + buttons.addStretch(1) + layout.addLayout(buttons) + + # Scroll area pro formulář + scroll = QtWidgets.QScrollArea() + scroll.setWidgetResizable(True) + scroll_content = QtWidgets.QWidget() + scroll.setWidget(scroll_content) + + form_layout = QtWidgets.QFormLayout(scroll_content) + form_layout.setLabelAlignment(QtCore.Qt.AlignRight) + + # === Basic information === + form_layout.addRow(self._make_section_label("Basic Information")) + + self._widgets["format_version"] = self._make_int_field(minv=0, maxv=65535) + form_layout.addRow("Format version:", self._widgets["format_version"]) + + self._widgets["device_type"] = self._make_device_type_field() + form_layout.addRow("Device type:", self._widgets["device_type"]) + + self._widgets["crc32"] = self._make_line_edit(readonly=True) + form_layout.addRow("CRC32:", self._widgets["crc32"]) + + # === Hardware === + form_layout.addRow(self._make_section_label("Hardware")) + + hw_layout = QtWidgets.QHBoxLayout() + self._widgets["hw_rev_major"] = self._make_int_field(minv=0, maxv=255) + self._widgets["hw_rev_minor"] = self._make_int_field(minv=0, maxv=255) + hw_layout.addWidget(self._widgets["hw_rev_major"]) + hw_layout.addWidget(QtWidgets.QLabel(".")) + hw_layout.addWidget(self._widgets["hw_rev_minor"]) + hw_layout.addStretch(1) + form_layout.addRow("HW revision:", hw_layout) + + self._widgets["device_id"] = self._make_line_edit(max_length=10) + form_layout.addRow("Device ID (max 10 chars):", self._widgets["device_id"]) + + # === Configuration === + form_layout.addRow(self._make_section_label("Configuration")) + + self._widgets["config_flags"] = self._make_binary_field(bits=32) + form_layout.addRow("Config flags (bin):", self._widgets["config_flags"]) + + self._widgets["rtc_flags"] = self._make_binary_field(bits=8) + form_layout.addRow("RTC flags (bin):", self._widgets["rtc_flags"]) + + # === RTC synchronization === + form_layout.addRow(self._make_section_label("RTC Synchronization")) + + rtc_info = QtWidgets.QLabel("Timestamps for RTC clock synchronization") + rtc_info.setStyleSheet("color: gray; font-size: 10px;") + form_layout.addRow("", rtc_info) + + # Init time (kdy RTC bylo na 0) + self._widgets["init_time"] = self._make_line_edit() + self._widgets["init_time"].setPlaceholderText("Unix timestamp (s)") + form_layout.addRow("Init time:", self._widgets["init_time"]) + + self._widgets["init_time_label"] = QtWidgets.QLabel("") + self._widgets["init_time_label"].setStyleSheet("color: #666; font-style: italic;") + form_layout.addRow("", self._widgets["init_time_label"]) + + # Sync time (čas poslední synchronizace) + self._widgets["sync_time"] = self._make_line_edit() + self._widgets["sync_time"].setPlaceholderText("Unix timestamp (s)") + form_layout.addRow("Sync time:", self._widgets["sync_time"]) + + self._widgets["sync_time_label"] = QtWidgets.QLabel("") + self._widgets["sync_time_label"].setStyleSheet("color: #666; font-style: italic;") + form_layout.addRow("", self._widgets["sync_time_label"]) + + # Sync RTC seconds (RTC value at synchronization) + self._widgets["sync_rtc_seconds"] = self._make_line_edit() + self._widgets["sync_rtc_seconds"].setPlaceholderText("RTC seconds at sync") + form_layout.addRow("Sync RTC seconds:", self._widgets["sync_rtc_seconds"]) + + # === keV calibration === + form_layout.addRow(self._make_section_label("keV Calibration")) + + calib_info = QtWidgets.QLabel("Polynomial coefficients: keV = a₀ + a₁·ch + a₂·ch²") + calib_info.setStyleSheet("color: gray; font-size: 10px;") + form_layout.addRow("", calib_info) + + self._widgets["calib"] = [] + calib_labels = ["a₀ (offset) [keV]:", "a₁ (linear) [keV/ch]:", "a₂ (quadratic) [keV/ch²]:"] + for i, label in enumerate(calib_labels): + field = self._make_double_field() + self._widgets["calib"].append(field) + form_layout.addRow(label, field) + + self._widgets["calib_ts"] = self._make_line_edit() + self._widgets["calib_ts"].setPlaceholderText("Unix timestamp") + form_layout.addRow("Calibration timestamp:", self._widgets["calib_ts"]) + + layout.addWidget(scroll) + + # Status bar + self.status_label = QtWidgets.QLabel("Ready") + self.status_label.setStyleSheet("padding: 5px; background: #f0f0f0; border-radius: 3px;") + layout.addWidget(self.status_label) + + # Připojení signálů + self.btn_load_device.clicked.connect(self._on_load_device) + self.btn_write_device.clicked.connect(self._on_write_device) + self.btn_load_file.clicked.connect(self._on_load_file) + self.btn_save_file.clicked.connect(self._on_save_file) + + def _make_section_label(self, text: str) -> QtWidgets.QLabel: + label = QtWidgets.QLabel(f"{text}") + label.setStyleSheet("margin-top: 10px; color: #333;") + return label + + # Field factories ----------------------------------------------------- + def _make_line_edit(self, readonly: bool = False, max_length: Optional[int] = None) -> QtWidgets.QLineEdit: + le = QtWidgets.QLineEdit() + le.setReadOnly(readonly) + if max_length: + le.setMaxLength(max_length) + return le + + def _make_int_field(self, minv: int = 0, maxv: int = 0xFFFFFFFF) -> QtWidgets.QSpinBox: + sb = QtWidgets.QSpinBox() + max_qt = min(maxv, 2147483647) + min_qt = max(minv, -2147483648) + sb.setRange(min_qt, max_qt) + sb.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons) + return sb + + def _make_double_field(self) -> QtWidgets.QDoubleSpinBox: + dsb = QtWidgets.QDoubleSpinBox() + dsb.setRange(-1e9, 1e9) + dsb.setDecimals(6) + dsb.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons) + return dsb + + def _make_binary_field(self, bits: int = 32) -> QtWidgets.QLineEdit: + """Pole pro binární hodnotu.""" + le = QtWidgets.QLineEdit() + le.setPlaceholderText("0" * bits) + font = le.font() + font.setFamily("monospace") + le.setFont(font) + le.setMaxLength(bits) + return le + + def _make_device_type_field(self) -> QtWidgets.QComboBox: + cb = QtWidgets.QComboBox() + for dt in DeviceType: + cb.addItem(dt.name, int(dt)) + return cb + + def _format_timestamp(self, ts: int) -> str: + """Formátuje Unix timestamp na čitelný čas.""" + if ts <= 0: + return "" + try: + import datetime + dt = datetime.datetime.fromtimestamp(ts, tz=datetime.timezone.utc) + return dt.strftime("%Y-%m-%d %H:%M:%S UTC") + except (OSError, ValueError): + return "Neplatný čas" + + # Data population ----------------------------------------------------- + def _populate(self, record: EepromRecord) -> None: + w = self._widgets + w["format_version"].setValue(int(record.format_version)) + + idx = w["device_type"].findData(int(record.device_type)) + if idx >= 0: + w["device_type"].setCurrentIndex(idx) + + w["crc32"].setText(f"0x{record.crc32:08X}") + w["hw_rev_major"].setValue(int(record.hw_rev_major)) + w["hw_rev_minor"].setValue(int(record.hw_rev_minor)) + w["device_id"].setText(record.device_id) + + # Binární zobrazení flagů + w["config_flags"].setText(f"{record.config_flags:032b}") + w["rtc_flags"].setText(f"{record.rtc_flags:08b}") + + # RTC synchronizace - samostatné položky + w["init_time"].setText(str(record.init_time)) + w["init_time_label"].setText(self._format_timestamp(record.init_time)) + + w["sync_time"].setText(str(record.sync_time)) + w["sync_time_label"].setText(self._format_timestamp(record.sync_time)) + + w["sync_rtc_seconds"].setText(str(record.sync_rtc_seconds)) + + # Kalibrační konstanty + for widget, val in zip(w["calib"], record.calib): + widget.setValue(float(val)) + + w["calib_ts"].setText(str(int(record.calib_ts))) + + # Handlers ------------------------------------------------------------ + def _on_load_device(self) -> None: + if not self._read_device: + self._set_status("❌ Read function not connected") + return + try: + with LoadingContext(self, "Loading EEPROM", "Reading data from device..."): + data = self._read_device() + record = unpack_record(data, verify_crc=False) + self._populate(record) + self._set_status("✅ Loaded from device") + except Exception as exc: + self._set_status(f"❌ Read error: {exc}") + + def _on_write_device(self) -> None: + if not self._write_device: + self._set_status("❌ Write function not connected") + return + try: + record = self._collect_record() + payload = pack_record(record, with_crc=True) + + with LoadingContext(self, "Writing EEPROM", "Writing data to device..."): + self._write_device(payload) + + # Verifikace + verified = None + if self._read_device: + try: + read_back = self._read_device() + verified = read_back == payload + except Exception: + verified = False + + if verified is True: + self._set_status("✅ Written to device (verified)") + elif verified is False: + self._set_status("⚠️ Written to device (verification failed)") + else: + self._set_status("✅ Written to device") + except Exception as exc: + self._set_status(f"❌ Write error: {exc}") + + def _on_load_file(self) -> None: + path, _ = QtWidgets.QFileDialog.getOpenFileName( + self, "Open EEPROM", "", "EEPROM bin (*.bin);;All files (*)" + ) + if not path: + return + try: + data = Path(path).read_bytes() + record = unpack_record(data, verify_crc=False) + self._populate(record) + self._set_status(f"✅ Loaded from file {Path(path).name}") + except Exception as exc: + self._set_status(f"❌ File load error: {exc}") + + def _on_save_file(self) -> None: + path, _ = QtWidgets.QFileDialog.getSaveFileName( + self, "Save EEPROM", "eeprom.bin", "EEPROM bin (*.bin);;All files (*)" + ) + if not path: + return + try: + record = self._collect_record() + payload = pack_record(record, with_crc=True) + Path(path).write_bytes(payload) + self._set_status(f"✅ Saved to {Path(path).name}") + except Exception as exc: + self._set_status(f"❌ Save error: {exc}") + + # Helpers ------------------------------------------------------------- + def _collect_record(self) -> EepromRecord: + """Sestaví EepromRecord z hodnot ve formuláři.""" + w = self._widgets + try: + format_version = int(w["format_version"].value()) + device_type = DeviceType(w["device_type"].currentData()) + hw_rev_major = int(w["hw_rev_major"].value()) + hw_rev_minor = int(w["hw_rev_minor"].value()) + device_id = w["device_id"].text() + + # Parsování binárních flagů + config_flags_text = w["config_flags"].text().strip() or "0" + config_flags = int(config_flags_text, 2) + + rtc_flags_text = w["rtc_flags"].text().strip() or "0" + rtc_flags = int(rtc_flags_text, 2) + + # RTC synchronizace - samostatné položky + init_time_text = w["init_time"].text().strip() or "0" + init_time = int(init_time_text, 0) + + sync_time_text = w["sync_time"].text().strip() or "0" + sync_time = int(sync_time_text, 0) + + sync_rtc_seconds_text = w["sync_rtc_seconds"].text().strip() or "0" + sync_rtc_seconds = int(sync_rtc_seconds_text, 0) + + # Kalibrační konstanty + calib_vals = [float(sp.value()) for sp in w["calib"]] + calib_ts_text = w["calib_ts"].text() + calib_ts = int(calib_ts_text or "0", 0) + + except Exception as exc: + raise ValueError(f"Invalid form value: {exc}") from exc + + record = EepromRecord( + format_version=format_version, + device_type=device_type, + hw_rev_major=hw_rev_major, + hw_rev_minor=hw_rev_minor, + device_id=device_id, + config_flags=config_flags, + rtc_flags=rtc_flags, + init_time=init_time, + sync_time=sync_time, + sync_rtc_seconds=sync_rtc_seconds, + calib=tuple(calib_vals), + calib_ts=calib_ts, + ) + payload = pack_record(record, with_crc=True) + record.crc32 = compute_crc32(payload) + return record + + def _set_status(self, msg: str) -> None: + self.status_label.setText(msg) + + @property + def io_context(self) -> Optional[Any]: + """Expose the optional device/thread context passed from the caller.""" + return self._io_context + + def set_io_context(self, context: Any) -> None: + """Update the context later.""" + self._io_context = context + + +__all__ = ["EepromManagerWidget"] + + +def _demo(): + """Launch a standalone demo window with in-memory read/write.""" + import sys + + app = QtWidgets.QApplication(sys.argv) + + # Demo data + import time + demo_record = EepromRecord( + format_version=1, + device_type=DeviceType.AIRDOS04, + hw_rev_major=2, + hw_rev_minor=1, + device_id="AIRDOS001", + config_flags=0b00000001, + rtc_flags=0b00000011, + init_time=int(time.time()) - 86400, # Před 24 hodinami (kdy RTC=0) + sync_time=int(time.time()) - 3600, # Před hodinou (poslední sync) + sync_rtc_seconds=82800, # 23 hodin v sekundách (RTC při sync) + calib=(0.5, 0.125, 0.00001), # Příklad: offset, lineární, kvadratický + calib_ts=1702500000, + ) + mem = {"blob": pack_record(demo_record, with_crc=True)} + + def read_dev(): + return mem["blob"] + + def write_dev(blob: bytes): + mem["blob"] = blob + + w = EepromManagerWidget(read_device=read_dev, write_device=write_dev) + w.setWindowTitle("EEPROM Manager") + w.resize(600, 700) + w.show() + + # Načíst demo data při spuštění + w._on_load_device() + + sys.exit(app.exec_()) + + +if __name__ == "__main__": + _demo() + diff --git a/dosview/loading_dialog.py b/dosview/loading_dialog.py new file mode 100644 index 0000000..7f5691f --- /dev/null +++ b/dosview/loading_dialog.py @@ -0,0 +1,118 @@ +"""Loading dialog with spinner for long-running operations.""" +from __future__ import annotations + +from typing import Optional + +from PyQt5 import QtCore, QtWidgets, QtGui + + +class LoadingDialog(QtWidgets.QDialog): + """Modal dialog with spinner animation for blocking operations.""" + + def __init__( + self, + parent: Optional[QtWidgets.QWidget] = None, + title: str = "Loading", + message: str = "Please wait..." + ) -> None: + super().__init__(parent) + self.setWindowTitle(title) + self.setModal(True) + self.setWindowFlags( + QtCore.Qt.Dialog | + QtCore.Qt.CustomizeWindowHint | + QtCore.Qt.WindowTitleHint + ) + + # Remove close button + self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowCloseButtonHint) + + self._build_ui(message) + self.setFixedSize(300, 120) + + # Animation + self._angle = 0 + self._timer = QtCore.QTimer(self) + self._timer.timeout.connect(self._rotate) + + def _build_ui(self, message: str) -> None: + layout = QtWidgets.QVBoxLayout(self) + layout.setSpacing(15) + + # Spinner label + self.spinner_label = QtWidgets.QLabel() + self.spinner_label.setAlignment(QtCore.Qt.AlignCenter) + self.spinner_label.setFixedSize(48, 48) + layout.addWidget(self.spinner_label, alignment=QtCore.Qt.AlignCenter) + + # Message label + self.message_label = QtWidgets.QLabel(message) + self.message_label.setAlignment(QtCore.Qt.AlignCenter) + self.message_label.setWordWrap(True) + font = self.message_label.font() + font.setPointSize(10) + self.message_label.setFont(font) + layout.addWidget(self.message_label) + + layout.addStretch(1) + + def set_message(self, message: str) -> None: + """Update the message text.""" + self.message_label.setText(message) + + def start(self) -> None: + """Start spinner animation and show dialog.""" + self._timer.start(50) # Update every 50ms + self.show() + QtWidgets.QApplication.processEvents() + + def stop(self) -> None: + """Stop animation and close dialog.""" + self._timer.stop() + self.close() + + def _rotate(self) -> None: + """Rotate spinner icon.""" + self._angle = (self._angle + 15) % 360 + + # Create rotating spinner + pixmap = QtGui.QPixmap(48, 48) + pixmap.fill(QtCore.Qt.transparent) + + painter = QtGui.QPainter(pixmap) + painter.setRenderHint(QtGui.QPainter.Antialiasing) + painter.translate(24, 24) + painter.rotate(self._angle) + + # Draw spinner arcs + pen = QtGui.QPen(QtGui.QColor("#4A90E2")) + pen.setWidth(4) + pen.setCapStyle(QtCore.Qt.RoundCap) + painter.setPen(pen) + + # Draw 3/4 arc + painter.drawArc(-18, -18, 36, 36, 0, 270 * 16) + + painter.end() + + self.spinner_label.setPixmap(pixmap) + + +class LoadingContext: + """Context manager for loading dialog.""" + + def __init__( + self, + parent: Optional[QtWidgets.QWidget] = None, + title: str = "Loading", + message: str = "Please wait..." + ): + self.dialog = LoadingDialog(parent, title, message) + + def __enter__(self): + self.dialog.start() + return self.dialog + + def __exit__(self, exc_type, exc_val, exc_tb): + self.dialog.stop() + return False diff --git a/dosview/rtc_widget.py b/dosview/rtc_widget.py new file mode 100644 index 0000000..656eae9 --- /dev/null +++ b/dosview/rtc_widget.py @@ -0,0 +1,376 @@ +"""PyQt5 widget for RTC (Real Time Clock) management. + +This widget provides controls for: +- Total Reset (reset RTC to zero and record timestamp in EEPROM) +- Sync Time (record calibration point in EEPROM without changing RTC) +- Update (refresh displayed values) + +And displays: +- Current system time +- RTC computed time (based on EEPROM calibration) +- RTC elapsed time (raw counter value) +- Time error (drift) +- EEPROM calibration data (init_time, sync_time, sync_rtc_seconds) +""" +from __future__ import annotations + +import datetime +from typing import Any, Callable, Optional + +from PyQt5 import QtCore, QtWidgets, QtGui + + +# Type hints for callbacks +RTCReader = Callable[[], "RTCTime"] +RTCResetter = Callable[[], datetime.datetime] +RTCSyncer = Callable[[], datetime.datetime] + + +class RTCTime: + """Placeholder for RTCTime dataclass from airdos04.py""" + def __init__( + self, + absolute_time: datetime.datetime = None, + elapsed: datetime.timedelta = None, + start_time: datetime.datetime = None, + raw_registers: tuple = None + ): + self.absolute_time = absolute_time or datetime.datetime.now(datetime.timezone.utc) + self.elapsed = elapsed or datetime.timedelta() + self.start_time = start_time or datetime.datetime.now(datetime.timezone.utc) + self.raw_registers = raw_registers or () + + +class RTCManagerWidget(QtWidgets.QWidget): + """Widget pro správu RTC obvodu.""" + + # Signály pro notifikaci o změnách + rtc_reset = QtCore.pyqtSignal() + rtc_synced = QtCore.pyqtSignal() + + def __init__( + self, + parent: Optional[QtWidgets.QWidget] = None, + read_rtc: Optional[RTCReader] = None, + reset_rtc: Optional[RTCResetter] = None, + sync_rtc: Optional[RTCSyncer] = None, + ) -> None: + super().__init__(parent) + self._read_rtc = read_rtc + self._reset_rtc = reset_rtc + self._sync_rtc = sync_rtc + + # Stav + self._last_reset_time: Optional[datetime.datetime] = None + self._last_sync_time: Optional[datetime.datetime] = None + self._last_rtc_data: Optional[RTCTime] = None + + self._build_ui() + + # Auto-update timer + self._timer = QtCore.QTimer(self) + self._timer.timeout.connect(self._on_update) + self._timer.start(1000) # Update každou sekundu + + def _build_ui(self) -> None: + layout = QtWidgets.QVBoxLayout(self) + + # === Buttons === + buttons_group = QtWidgets.QGroupBox("Controls") + buttons_layout = QtWidgets.QHBoxLayout(buttons_group) + + self.btn_update = QtWidgets.QPushButton("🔄 Update") + self.btn_update.setToolTip("Refresh displayed values") + + self.btn_sync = QtWidgets.QPushButton("🔄 Sync Time") + self.btn_sync.setToolTip("Record calibration point to EEPROM (does not change RTC counter)") + + self.btn_reset = QtWidgets.QPushButton("⚠️ Total Reset") + self.btn_reset.setToolTip("Reset RTC counter to zero and write timestamp to EEPROM") + self.btn_reset.setStyleSheet("background-color: #ffcccc;") + + buttons_layout.addWidget(self.btn_update) + buttons_layout.addWidget(self.btn_sync) + buttons_layout.addWidget(self.btn_reset) + buttons_layout.addStretch(1) + + layout.addWidget(buttons_group) + + # === Current state === + times_group = QtWidgets.QGroupBox("Current State") + times_layout = QtWidgets.QFormLayout(times_group) + times_layout.setLabelAlignment(QtCore.Qt.AlignRight) + + # System time + self.lbl_system_time = self._make_time_label() + times_layout.addRow("System time (UTC):", self.lbl_system_time) + + # RTC time (computed from EEPROM calibration) + self.lbl_rtc_time = self._make_time_label() + times_layout.addRow("RTC time (calibrated):", self.lbl_rtc_time) + + # Elapsed time - raw counter value + self.lbl_elapsed = self._make_time_label() + times_layout.addRow("RTC counter (raw):", self.lbl_elapsed) + + # Error (drift) + self.lbl_error = self._make_time_label() + times_layout.addRow("Drift (error):", self.lbl_error) + + layout.addWidget(times_group) + + # === EEPROM calibration === + history_group = QtWidgets.QGroupBox("EEPROM Calibration") + history_layout = QtWidgets.QFormLayout(history_group) + history_layout.setLabelAlignment(QtCore.Qt.AlignRight) + + # Init time (when RTC was reset - from Total Reset) + self.lbl_init_time = self._make_time_label() + history_layout.addRow("Init time (reset time):", self.lbl_init_time) + + # Sync time (computed time when RTC=0 at last Sync) + self.lbl_sync_time = self._make_time_label() + history_layout.addRow("Sync time (RTC=0):", self.lbl_sync_time) + + # RTC value at sync + self.lbl_sync_rtc_seconds = self._make_time_label() + history_layout.addRow("RTC at sync:", self.lbl_sync_rtc_seconds) + + # Time since last sync (computed) + self.lbl_since_sync = self._make_time_label() + history_layout.addRow("Since last sync:", self.lbl_since_sync) + + layout.addWidget(history_group) + + # === Raw registry === + self.raw_group = QtWidgets.QGroupBox("Raw RTC registry") + raw_layout = QtWidgets.QVBoxLayout(self.raw_group) + self.lbl_raw = QtWidgets.QLabel("—") + self.lbl_raw.setFont(QtGui.QFont("monospace")) + raw_layout.addWidget(self.lbl_raw) + self.raw_group.setVisible(False) # Skrytý ve výchozím stavu + layout.addWidget(self.raw_group) + + # === Status === + self.status_label = QtWidgets.QLabel("Ready") + self.status_label.setStyleSheet("padding: 5px; background: #f0f0f0; border-radius: 3px;") + layout.addWidget(self.status_label) + + layout.addStretch(1) + + # Připojení signálů + self.btn_update.clicked.connect(self._on_update) + self.btn_sync.clicked.connect(self._on_sync) + self.btn_reset.clicked.connect(self._on_reset_confirm) + + def _make_time_label(self) -> QtWidgets.QLabel: + """Vytvoří label pro zobrazení času.""" + label = QtWidgets.QLabel("—") + label.setFont(QtGui.QFont("monospace", 10)) + label.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) + return label + + def _format_datetime(self, dt: Optional[datetime.datetime]) -> str: + """Formátuje datetime pro zobrazení.""" + if dt is None: + return "—" + return dt.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] + + def _format_timedelta(self, td: Optional[datetime.timedelta]) -> str: + """Formátuje timedelta pro zobrazení.""" + if td is None: + return "—" + + total_seconds = td.total_seconds() + sign = "-" if total_seconds < 0 else "" + total_seconds = abs(total_seconds) + + days = int(total_seconds // 86400) + hours = int((total_seconds % 86400) // 3600) + minutes = int((total_seconds % 3600) // 60) + seconds = total_seconds % 60 + + if days > 0: + return f"{sign}{days}d {hours:02d}h {minutes:02d}m {seconds:06.3f}s" + elif hours > 0: + return f"{sign}{hours}h {minutes:02d}m {seconds:06.3f}s" + elif minutes > 0: + return f"{sign}{minutes}m {seconds:06.3f}s" + else: + return f"{sign}{seconds:.3f}s" + + def _on_update(self) -> None: + """Aktualizuje zobrazené hodnoty.""" + now = datetime.datetime.now(datetime.timezone.utc) + self.lbl_system_time.setText(self._format_datetime(now)) + + if self._read_rtc: + try: + rtc_data = self._read_rtc() + self._last_rtc_data = rtc_data + + # RTC čas (start_time + elapsed = absolute_time) + self.lbl_rtc_time.setText(self._format_datetime(rtc_data.absolute_time)) + + # Uplynulý čas + self.lbl_elapsed.setText(self._format_timedelta(rtc_data.elapsed)) + + # Chyba = systémový čas - RTC čas + error = now - rtc_data.absolute_time + error_secs = error.total_seconds() + elapsed_secs = rtc_data.elapsed.total_seconds() + + # Výpočet PPM a zobrazení chyby + PPM na jednom řádku + error_str = self._format_timedelta(error) + if elapsed_secs > 60: # Minimálně 1 minuta pro smysluplný výpočet PPM + ppm = (error_secs / elapsed_secs) * 1_000_000 + self.lbl_error.setText(f"{error_str} ({ppm:+.1f} ppm)") + else: + self.lbl_error.setText(error_str) + + # Zbarvení chyby podle velikosti + error_secs_abs = abs(error_secs) + if error_secs_abs < 1: + self.lbl_error.setStyleSheet("color: green;") + elif error_secs_abs < 60: + self.lbl_error.setStyleSheet("color: orange;") + else: + self.lbl_error.setStyleSheet("color: red;") + + # Raw registry + if rtc_data.raw_registers: + raw_hex = " ".join(f"{r:02X}" for r in rtc_data.raw_registers) + self.lbl_raw.setText(raw_hex) + + # === EEPROM kalibrace === + # Init time - čas kdy bylo RTC resetováno na 0 + if hasattr(rtc_data, 'init_time') and rtc_data.init_time > 0: + init_dt = datetime.datetime.fromtimestamp(rtc_data.init_time, tz=datetime.timezone.utc) + self.lbl_init_time.setText(self._format_datetime(init_dt)) + else: + self.lbl_init_time.setText("— (not in EEPROM)") + + # Sync time - vypočtený čas kdy RTC = 0 (referenční bod pro kalibraci) + if hasattr(rtc_data, 'sync_time') and rtc_data.sync_time > 0: + sync_dt = datetime.datetime.fromtimestamp(rtc_data.sync_time, tz=datetime.timezone.utc) + self.lbl_sync_time.setText(self._format_datetime(sync_dt)) + + # Vypočteme reálný čas synchronizace: sync_time + sync_rtc_seconds + if hasattr(rtc_data, 'sync_rtc_seconds') and rtc_data.sync_rtc_seconds > 0: + actual_sync_timestamp = rtc_data.sync_time + rtc_data.sync_rtc_seconds + actual_sync_dt = datetime.datetime.fromtimestamp(actual_sync_timestamp, tz=datetime.timezone.utc) + self._last_sync_time = actual_sync_dt + + # Time since actual synchronization + since_sync = now - actual_sync_dt + self.lbl_since_sync.setText(self._format_timedelta(since_sync)) + else: + # Don't have sync_rtc_seconds, so we don't know when sync was done + self.lbl_since_sync.setText("— (missing sync_rtc_seconds)") + else: + self.lbl_sync_time.setText("— (not in EEPROM)") + self.lbl_since_sync.setText("—") + + # RTC value at sync + if hasattr(rtc_data, 'sync_rtc_seconds') and rtc_data.sync_rtc_seconds > 0: + rtc_val_td = datetime.timedelta(seconds=rtc_data.sync_rtc_seconds) + self.lbl_sync_rtc_seconds.setText(self._format_timedelta(rtc_val_td)) + else: + self.lbl_sync_rtc_seconds.setText("— (not in EEPROM)") + + except Exception as e: + self._set_status(f"❌ RTC read error: {e}") + + def _on_sync(self) -> None: + """Synchronizes RTC with system time.""" + if not self._sync_rtc: + self._set_status("❌ Sync function not connected") + return + + try: + self._last_sync_time = self._sync_rtc() + self._set_status("✅ RTC synchronized") + self.rtc_synced.emit() + self._on_update() + except Exception as e: + self._set_status(f"❌ Sync error: {e}") + + def _on_reset_confirm(self) -> None: + """Shows confirmation dialog for reset.""" + dialog = QtWidgets.QMessageBox(self) + dialog.setIcon(QtWidgets.QMessageBox.Warning) + dialog.setWindowTitle("Confirm RTC Reset") + dialog.setText("Do you really want to reset RTC counter to zero?") + dialog.setInformativeText( + "This action will reset the time counter in the detector.\n" + "All measurements will have a new time offset from this moment." + ) + dialog.setStandardButtons( + QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.Cancel + ) + dialog.setDefaultButton(QtWidgets.QMessageBox.Cancel) + + # Přidání druhého potvrzení + result = dialog.exec_() + + if result == QtWidgets.QMessageBox.Yes: + # Druhé potvrzení + confirm = QtWidgets.QMessageBox.question( + self, + "Finální potvrzení", + "OPRAVDU resetovat RTC?\n\nTato akce je nevratná!", + QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, + QtWidgets.QMessageBox.No + ) + + if confirm == QtWidgets.QMessageBox.Yes: + self._on_reset() + + def _on_reset(self) -> None: + """Provede reset RTC.""" + if not self._reset_rtc: + self._set_status("❌ Není připojena funkce resetu") + return + + try: + self._last_reset_time = self._reset_rtc() + self._last_sync_time = self._last_reset_time # Reset je také sync + self._set_status("✅ RTC resetováno na nulu") + self.rtc_reset.emit() + self._on_update() + except Exception as e: + self._set_status(f"❌ Chyba resetu: {e}") + + def _set_status(self, msg: str) -> None: + """Nastaví status zprávu.""" + self.status_label.setText(msg) + + def set_callbacks( + self, + read_rtc: Optional[RTCReader] = None, + reset_rtc: Optional[RTCResetter] = None, + sync_rtc: Optional[RTCSyncer] = None, + ) -> None: + """Nastaví callback funkce pro komunikaci s hardware.""" + if read_rtc: + self._read_rtc = read_rtc + if reset_rtc: + self._reset_rtc = reset_rtc + if sync_rtc: + self._sync_rtc = sync_rtc + + def show_raw_registers(self, show: bool = True) -> None: + """Zobrazí/skryje raw RTC registry.""" + self.raw_group.setVisible(show) + + def stop_auto_update(self) -> None: + """Zastaví automatický update.""" + self._timer.stop() + + def start_auto_update(self, interval_ms: int = 1000) -> None: + """Spustí automatický update.""" + self._timer.setInterval(interval_ms) + self._timer.start() + + +__all__ = ["RTCManagerWidget"] diff --git a/pyproject.toml b/pyproject.toml index 1b1f389..40572a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,6 +49,7 @@ version = {attr="dosview.version.__version__"} [project.scripts] dosview = "dosview:main" +airdos04-info = "dosview.airdos04_info:main" [project.urls] homepage = "https://docs.dos.ust.cz/dosview/" diff --git a/test.ipynb b/test.ipynb index 48e3e5b..829d0e5 100644 --- a/test.ipynb +++ b/test.ipynb @@ -2,17 +2,23 @@ "cells": [ { "cell_type": "code", - "execution_count": 45, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import hid\n", - "import time" + "import time\n", + "import ft260" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, { "cell_type": "code", - "execution_count": 161, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ @@ -419,81 +425,25 @@ }, { "cell_type": "code", - "execution_count": 169, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 40, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "0xa0 65535\n", - "0xa2 47332\n", - "0xa4 46547\n", - "0xa6 29640\n", - "0xa8 26452\n", - "0xaa 34290\n", - "0xac 28144\n", - "PRESSURE\n", - "8665158\n", - "PRESSURE\n", - "8665624\n", - "PRESSURE\n", - "8664618\n", - "PRESSURE\n", - "8665046\n", - "PRESSURE\n", - "8665130\n", - "PRESSURE\n", - "8665706\n", - "PRESSURE\n", - "8665576\n", - "PRESSURE\n", - "8665372\n", - "PRESSURE\n", - "8664744\n", - "PRESSURE\n", - "8664922\n", - "PRESSURE\n", - "8664926\n", - "PRESSURE\n", - "8665860\n", - "PRESSURE\n", - "8665200\n", - "PRESSURE\n", - "8665348\n", - "PRESSURE\n", - "8665278\n", - "PRESSURE\n", - "8664312\n", - "PRESSURE\n", - "8664280\n", - "PRESSURE\n", - "8665298\n", - "PRESSURE\n", - "8665364\n", - "PRESSURE\n", - "8666186\n", - "PRESSURE\n", - "8665068\n", - "PRESSURE\n", - "8664480\n", - "PRESSURE\n", - "8665134\n", - "PRESSURE\n", - "8664594\n", - "PRESSURE\n", - "8665058\n" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", + "ename": "AttributeError", + "evalue": "'FT260_I2C' object has no attribute 'write'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[169], line 36\u001b[0m\n\u001b[1;32m 32\u001b[0m payload \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m0xD0\u001b[39m, address, \u001b[38;5;241m0x06\u001b[39m, \u001b[38;5;241m1\u001b[39m, value]\n\u001b[1;32m 33\u001b[0m dev\u001b[38;5;241m.\u001b[39mwrite(payload)\n\u001b[0;32m---> 36\u001b[0m \u001b[43mtime\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msleep\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m0.1\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;66;03m# write byte \u001b[39;00m\n\u001b[1;32m 39\u001b[0m value \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0b0\u001b[39m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[40], line 17\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m value \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m0xa0\u001b[39m, \u001b[38;5;241m0xae\u001b[39m, \u001b[38;5;241m2\u001b[39m):\n\u001b[1;32m 16\u001b[0m payload \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m0xd0\u001b[39m, address, \u001b[38;5;241m0x06\u001b[39m, \u001b[38;5;241m1\u001b[39m, value]\n\u001b[0;32m---> 17\u001b[0m \u001b[43mdev\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite\u001b[49m(payload)\n\u001b[1;32m 19\u001b[0m payload \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m0xc2\u001b[39m, address, \u001b[38;5;241m0x06\u001b[39m, \u001b[38;5;241m2\u001b[39m, \u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m 20\u001b[0m dev\u001b[38;5;241m.\u001b[39mwrite(payload)\n", + "\u001b[0;31mAttributeError\u001b[0m: 'FT260_I2C' object has no attribute 'write'" ] } ], @@ -556,7 +506,7 @@ }, { "cell_type": "code", - "execution_count": 163, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ @@ -583,7 +533,7 @@ }, { "cell_type": "code", - "execution_count": 168, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -597,6 +547,14 @@ "Status\n", "{'busy_chip': 0, 'error': 0, 'no_ack': 0, 'arbitration_lost': 0, 'idle': 0, 'busy_bus': 1, 'baudrate': 100000}\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "unable to receive message\n", + "unable to receive message\n" + ] } ], "source": [ @@ -653,7 +611,7 @@ }, { "cell_type": "code", - "execution_count": 165, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -662,7 +620,7 @@ "6" ] }, - "execution_count": 165, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -670,12 +628,13 @@ "source": [ "\n", "# c.write_byte_data(addr_switch, 0x01, 0x03)\n", + "# zapis do \n", "dev.write([0xD0, 0x70, 0x06, 2, 0x01, 0x03])" ] }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -683,8 +642,8 @@ "output_type": "stream", "text": [ "Length 16\n", - "['0xd3', '0x10', '0x12', '0x90', '0xc0', '0x8', '0x6', '0xa2', '0x0', '0x91', '0x9c', '0x49', '0xa0', '0x0', '0xa0', '0x0', '0x0', '0x9c', '0xff', '0xff']\n", - "0x1290c00806a200919c49a000a000009c\n" + "['0xd3', '0x10', '0x9', '0x10', '0x41', '0x8', '0x74', '0x10', '0x8', '0x51', '0xdc', '0xc', '0xa0', '0x80', '0xa0', '0x80', '0x0', '0x59', '0x0', '0x0']\n", + "0x910410874100851dc0ca080a0800059\n" ] } ], @@ -710,14 +669,49 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Length 16\n", + "['0xd3', '0x10', '0xaa', '0x55', '0xde', '0xad', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0x0', '0x0']\n", + "0xaa55deadffffffffffffffffffffffff\n" + ] + } + ], + "source": [ + "address = 0x50\n", + "register = 8\n", + "\n", + "\n", + "register = (0x08).to_bytes(2, byteorder='little')\n", + "payload = [0xD4, address, 0x02, 2, register[0], register[1]]\n", + "dev.write(payload)\n", + "length = (16).to_bytes(2, byteorder='little')\n", + "dev.write([0xC2, address, 0x07, length[0], length[1]])\n", + "d = dev.read(0xde, 1000)\n", + "\n", + "print(\"Length\", d[1])\n", + "print([hex(x) for x in d])\n", + "data = 0\n", + "for da in d[2:d[1]+2]:\n", + " data = data << 8 | da\n", + "print(hex(data))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[209, 6, 101, 233, 234, 60, 178, 90, 255, 255, 255, 255]\n" + "[209, 6, 100, 51, 193, 113, 122, 109, 255, 255, 255, 255]\n" ] } ], @@ -746,7 +740,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -754,7 +748,7 @@ "output_type": "stream", "text": [ "Length 16\n", - "['0xd3', '0x10', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff']\n", + "['0xd3', '0x10', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0x9', '0x21']\n", "0xffffffffffffffffffffffffffffffff\n" ] } @@ -791,7 +785,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -866,7 +860,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -874,19 +868,9 @@ "output_type": "stream", "text": [ "Status\n", - "{'busy_chip': 0, 'error': 0, 'no_ack': 0, 'arbitration_lost': 0, 'idle': 0, 'busy_bus': 1, 'baudrate': 100000}\n" - ] - }, - { - "ename": "OSError", - "evalue": "read error", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[11], line 15\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[38;5;66;03m# dev.write([\u001b[39;00m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m# 0xC2, addr, 0x03, 2, 0\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;66;03m# ])\u001b[39;00m\n\u001b[1;32m 14\u001b[0m time\u001b[38;5;241m.\u001b[39msleep(\u001b[38;5;241m0.1\u001b[39m)\n\u001b[0;32m---> 15\u001b[0m d \u001b[38;5;241m=\u001b[39m \u001b[43mdev\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m0xff\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;28mprint\u001b[39m(d)\n\u001b[1;32m 18\u001b[0m sn \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n", - "File \u001b[0;32mhid.pyx:234\u001b[0m, in \u001b[0;36mhid.device.read\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mOSError\u001b[0m: read error" + "{'busy_chip': 0, 'error': 0, 'no_ack': 0, 'arbitration_lost': 0, 'idle': 0, 'busy_bus': 1, 'baudrate': 100000}\n", + "[222, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 64]\n", + "0xde3c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000340\n" ] } ], @@ -914,6 +898,280 @@ "print(hex(sn))" ] }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing ['0xaa', '0x55', '0xde', '0xad', '0x11', '0x22', '0x33', '0x44'] to EEPROM\n", + "SEND WRITE REQ ['0xd2', '0x50', '0x6', '0xa', '0x8', '0x0', '0xaa', '0x55', '0xde', '0xad', '0x11', '0x22', '0x33', '0x44']\n", + "Raw response: [209, 8, 170, 85, 222, 173, 17, 34, 51, 68, 17, 34]\n", + "Read payload bytes: ['0xaa', '0x55', '0xde', '0xad', '0x11', '0x22', '0x33', '0x44']\n", + "Verify: read matches written data\n", + "Raw response: [209, 8, 170, 85, 222, 173, 17, 34, 51, 68, 17, 34]\n", + "Read payload bytes: ['0xaa', '0x55', '0xde', '0xad', '0x11', '0x22', '0x33', '0x44']\n", + "Verify: read matches written data\n" + ] + } + ], + "source": [ + "# Buňka: Zápis do EEPROM a následné čtení (address=0x50, register=0x08)\n", + "try:\n", + " address = 0x50\n", + " register = 8\n", + " # data to write (example) -- adjust as needed\n", + " data_to_write = [0xAA, 0x55, 0xDE, 0xAD, 0x11, 0x22, 0x33, 0x44]\n", + " print('Writing', [hex(x) for x in data_to_write], 'to EEPROM')\n", + " reg_bytes = (register).to_bytes(2, byteorder='little')\n", + " # Compose write payload: include 2-byte register address then data\n", + " write_data = [reg_bytes[0], reg_bytes[1]] + data_to_write\n", + " data_length = len(write_data)\n", + " if data_length > 60:\n", + " raise ValueError('Write block too large')\n", + " # report_id selection follows existing helper pattern: 0xD0 + (len-1)//4\n", + " report_id = 0xD0 + (data_length - 1) // 4\n", + " write_request = [report_id, address, 0x06, data_length] + write_data\n", + " print('SEND WRITE REQ', [hex(x) for x in write_request])\n", + " dev.write(write_request)\n", + " # small delay to allow EEPROM internal write cycle (adjust if needed)\n", + " time.sleep(0.2)\n", + " # now read back the same number of bytes: set internal address pointer first\n", + " dev.write([0xD4, address, 0x02, 2, reg_bytes[0], reg_bytes[1]])\n", + " time.sleep(0.05)\n", + " # request read using same pattern as other cells (C2, address, 0x07, len_lo, len_hi)\n", + " read_len = len(data_to_write).to_bytes(2, byteorder='little')\n", + " dev.write([0xC2, address, 0x07, read_len[0], read_len[1]])\n", + " d = dev.read(0xde, 1000)\n", + " print('Raw response:', d)\n", + " if isinstance(d, (list, tuple)) and len(d) >= 2:\n", + " payload_len = d[1]\n", + " payload = d[2:2+payload_len]\n", + " print('Read payload bytes:', [hex(x) for x in payload])\n", + " # Compare first N bytes of payload with written data\n", + " if payload[:len(data_to_write)] == data_to_write:\n", + " print('Verify: read matches written data')\n", + " else:\n", + " print('Verify: mismatch — first bytes read:', [hex(x) for x in payload[:len(data_to_write)]])\n", + " else:\n", + " print('Unexpected response format or length:', type(d), len(d) if hasattr(d, '__len__') else 'n/a')\n", + "except Exception as e:\n", + " print('EEPROM write/read failed:', e)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Device manufacturer: FTDI\n", + "Product: FT260\n", + "Serial Number: Љ\n", + "---\n", + "Writing 1 bytes at register 0x08: ['0xb0']\n", + "SEND WRITE REQ [208, 80, 6, 3, 8, 0, 176]\n", + "Raw read (bytes): [208, 1, 176, 1, 0, 0, 176, 0]\n", + "Parsed payload: ['0xb0']\n", + "---\n", + "Writing 2 bytes at register 0x08: ['0xb0', '0xb1']\n", + "SEND WRITE REQ [208, 80, 6, 4, 8, 0, 176, 177]\n", + "Raw read (bytes): [208, 2, 176, 177, 0, 0, 176, 177]\n", + "Parsed payload: ['0xb0', '0xb1']\n", + "---\n", + "Writing 4 bytes at register 0x08: ['0xb0', '0xb1', '0xb2', '0xb3']\n", + "SEND WRITE REQ [209, 80, 6, 6, 8, 0, 176, 177, 178, 179]\n", + "Raw read (bytes): [208, 4, 176, 177, 178, 179, 176, 177]\n", + "Parsed payload: ['0xb0', '0xb1', '0xb2', '0xb3']\n", + "---\n", + "Writing 8 bytes at register 0x08: ['0xb0', '0xb1', '0xb2', '0xb3', '0xb4', '0xb5', '0xb6', '0xb7']\n", + "SEND WRITE REQ [210, 80, 6, 10, 8, 0, 176, 177, 178, 179, 180, 181, 182, 183]\n", + "Raw read (bytes): [209, 8, 176, 177, 178, 179, 180, 181, 182, 183, 180, 181]\n", + "Parsed payload: ['0xb0', '0xb1', '0xb2', '0xb3', '0xb4', '0xb5', '0xb6', '0xb7']\n" + ] + } + ], + "source": [ + "# Diagnostic: small writes (1,2,4,8 bytes) then immediate read — prints raw HID responses\n", + "try:\n", + " address = 0x50\n", + " register = 8\n", + " ftdi = FT260HidDriver(0, dev)\n", + " lengths = [1, 2, 4, 8]\n", + " for ln in lengths:\n", + " data = [((0xB0 + i) & 0xFF) for i in range(ln)]\n", + " reg_bytes = (register).to_bytes(2, 'little')\n", + " payload = [reg_bytes[0], reg_bytes[1]] + data\n", + " print('---')\n", + " print(f'Writing {ln} bytes at register 0x{register:02x}:', [hex(x) for x in data])\n", + " # Use class write (which selects report_id internally)\n", + " ftdi.write_i2c_block_data(address, register, payload)\n", + " # wait a bit for internal write\n", + " time.sleep(0.25)\n", + " # set internal pointer explicitly (low-level) and request read\n", + " dev.write([0xD4, address, 0x02, 2, reg_bytes[0], reg_bytes[1]])\n", + " time.sleep(0.05)\n", + " rl = (ln).to_bytes(2, 'little')\n", + " dev.write([0xC2, address, 0x07, rl[0], rl[1]])\n", + " # read raw response from adapter (give timeout)\n", + " raw = dev.read(0xDE, 1000)\n", + " print('Raw read (bytes):', raw)\n", + " if raw and len(raw) >= 2:\n", + " # attempt to extract payload as earlier\n", + " payload_len = raw[1] if isinstance(raw[1], int) else ord(raw[1])\n", + " payload = list(raw[2:2+payload_len])\n", + " print('Parsed payload:', [hex(x) for x in payload])\n", + " else:\n", + " print('Unexpected raw response format:', raw)\n", + "except Exception as e:\n", + " print('Diagnostic test failed:', e)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "dev.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FT260 device with VID: 4617, PID: 31392, SN: Љ\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "unable to receive message\n", + "unable to receive message\n" + ] + } + ], + "source": [ + "FT260HidDriver = ft260.FT260( VID=0x1209, PID=0x7aa0 )\n", + "print(FT260HidDriver)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "dev = FT260HidDriver.FT260_I2C()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[212, 18, 9, 16, 65, 8, 116, 16, 8, 81, 220, 12, 160, 128, 160, 128, 0, 89, 0, 0, 17, 1, 0, 1]\n", + "SN: 0x0910410874100851dc0ca080a0800059\n" + ] + } + ], + "source": [ + "sn = dev.read_i2c_block_data(0x58, 0x08, 18)\n", + "val = 0\n", + "for b in sn:\n", + " val = (val << 8) | b\n", + "print(f\"SN: 0x{val:0{len(sn)*2}x}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0xb\n", + "0xb\n" + ] + } + ], + "source": [ + "print(hex(dev.read_byte_data(0x70, 0x01)))\n", + "dev.write_byte_data(0x70, 0x01, 0x03)\n", + "print(hex(dev.read_byte_data(0x70, 0x01)))" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[222, 60, 170, 187, 204, 221, 238, 255, 17, 34, 51, 68, 85, 102, 119, 136, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 34, 51, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 17, 34, 51, 68, 85, 102, 255, 255, 255, 255, 255, 255, 3, 64]\n", + "['0xaa', '0xbb', '0xcc', '0xdd', '0xee', '0xff', '0x11', '0x22', '0x33', '0x44', '0x55', '0x66', '0x77', '0x88', '0x99', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x11', '0x22', '0x33', '0x44', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0x11', '0x22', '0x33', '0x44', '0x55', '0x66', '0xff', '0xff', '0xff', '0xff']\n" + ] + } + ], + "source": [ + "ee = dev.read_i2c_block_data(0x50, 0x00, 120)\n", + "print([hex(x) for x in ee])" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dev.write_i2c_block_data(0x50, 0x00, [0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x00] )" + ] + }, { "cell_type": "code", "execution_count": null, @@ -938,7 +1196,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.13.3" } }, "nbformat": 4, diff --git a/tools/gen_eeprom_header.py b/tools/gen_eeprom_header.py new file mode 100644 index 0000000..5c7ca0c --- /dev/null +++ b/tools/gen_eeprom_header.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +"""Generate a packed C++ header for the EEPROM layout. + +Usage: + python tools/gen_eeprom_header.py --out tools/generated/eeprom_layout.h +""" +from __future__ import annotations + +import argparse +from pathlib import Path +from textwrap import dedent + +from dosview.eeprom_schema import DeviceType, TOTAL_SIZE + +HEADER_TEMPLATE = """// AUTO-GENERATED. Do not edit by hand. +#pragma once + +#include +#include + +namespace eeprom {{ + +enum class DeviceType : std::uint16_t {{ +{device_enum} +}}; + +// Packed, little-endian layout. CRC32 covers the whole blob with the crc32 +// field zeroed. +struct __attribute__((packed)) EepromRecord {{ + std::uint16_t format_version; + std::uint16_t device_type; + std::uint32_t crc32; + std::uint8_t hw_rev_major; + std::uint8_t hw_rev_minor; + char device_id[10]; + std::uint32_t config_flags; + std::uint8_t rtc_flags; + std::uint32_t rtc_triplets[15]; // 5× (ts_init, ts_ref, rtc_value) + float calib[3]; + std::uint32_t calib_ts; +}}; + +constexpr std::size_t EepromRecordSize = sizeof(EepromRecord); +static_assert(EepromRecordSize == {size}, "EEPROM layout size mismatch"); + +}} // namespace eeprom +""" + + +def render_enum() -> str: + return "\n".join( + f" {member.name} = {int(member)}," for member in DeviceType + ) + + +def main() -> None: + parser = argparse.ArgumentParser(description="Generate EEPROM C++ header") + parser.add_argument( + "--out", + type=Path, + default=Path("tools/generated/eeprom_layout.h"), + help="Output header path", + ) + args = parser.parse_args() + args.out.parent.mkdir(parents=True, exist_ok=True) + + header = HEADER_TEMPLATE.format(device_enum=render_enum(), size=TOTAL_SIZE) + args.out.write_text(header) + print(f"Wrote {args.out} ({args.out.stat().st_size} bytes)") + + +if __name__ == "__main__": + main() diff --git a/tools/generated/eeprom_layout.h b/tools/generated/eeprom_layout.h new file mode 100644 index 0000000..74e442e --- /dev/null +++ b/tools/generated/eeprom_layout.h @@ -0,0 +1,37 @@ +// AUTO-GENERATED. Do not edit by hand. +#pragma once + +#include +#include + +namespace eeprom { + +enum class DeviceType : std::uint16_t { + USTSIPIN02 = 0, + AIRDOS04 = 1, + LABDOS01 = 2, +}; + +// Packed, little-endian layout. CRC32 covers the whole blob with the crc32 +// field zeroed. +struct __attribute__((packed)) EepromRecord { + std::uint16_t format_version; + std::uint16_t device_type; + std::uint32_t crc32; + std::uint8_t hw_rev_major; + std::uint8_t hw_rev_minor; + char device_id[10]; + std::uint32_t config_flags; + std::uint8_t rtc_flags; + // RTC synchronization fields + std::uint32_t init_time; // Unix timestamp (s) when RTC counter was 0 + std::uint32_t sync_time; // Unix timestamp (s) of last synchronization + std::uint32_t sync_rtc_seconds; // RTC counter value (s) at synchronization + float calib[3]; + std::uint32_t calib_ts; +}; + +constexpr std::size_t EepromRecordSize = sizeof(EepromRecord); +static_assert(EepromRecordSize == 53, "EEPROM layout size mismatch"); + +} // namespace eeprom diff --git a/tools/tools/generated/eeprom_layout.h b/tools/tools/generated/eeprom_layout.h new file mode 100644 index 0000000..3fe7ce1 --- /dev/null +++ b/tools/tools/generated/eeprom_layout.h @@ -0,0 +1,34 @@ +// AUTO-GENERATED. Do not edit by hand. +#pragma once + +#include +#include + +namespace eeprom { + +enum class DeviceType : std::uint16_t { + AIRDOS04 = 0, + BATDATUNIT01 = 1, + LABDOS01 = 2, +}; + +// Packed, little-endian layout. CRC32 covers the whole blob with the crc32 +// field zeroed. +struct __attribute__((packed)) EepromRecord { + std::uint16_t format_version; + std::uint16_t device_type; + std::uint32_t crc32; + std::uint8_t hw_rev_major; + std::uint8_t hw_rev_minor; + char device_id[10]; + std::uint32_t config_flags; + std::uint8_t rtc_flags; + std::uint32_t rtc_triplets[15]; // 5× (ts_init, ts_ref, rtc_value) + float calib[3]; + std::uint32_t calib_ts; +}; + +constexpr std::size_t EepromRecordSize = sizeof(EepromRecord); +static_assert(EepromRecordSize == 53, "EEPROM layout size mismatch"); + +} // namespace eeprom