diff --git a/docs/BRINGUP.md b/docs/BRINGUP.md index bb86dfe..d503628 100644 --- a/docs/BRINGUP.md +++ b/docs/BRINGUP.md @@ -20,6 +20,93 @@ Phase 11 sweep. **Flash this image, then run the consolidated bench campaign** — the GATE A drills, GATE B probes, and every phase's bench list above validate against it. +**Bench campaign — opened 2026-08-14; image `20260814223300` flashed and +booted.** Post-flash health check passes on the board: it reports +`20260814223300 (dev)`; kernel `6.12.20-fslc` with `CONFIG_PREEMPT` and +the console-only `panic=10` command line; `CONFIG_IMX2_WDT` and +`CONFIG_PANIC_ON_OOPS` present in the running config; the hardened +`glowforge.ko` loaded with the 16 MiB `cnc-pulsebuf` no-map pool mapped +and SDMA channel 26 / EPIT up; forgectrl holds `/dev/glowforge` (40 V up, +dead-man active) and supervises the grbl controller with the +motion-liveness probe reading **verified**; the latch reads **locked** +and faults 0 at idle; the only `watchdogd` is the kernel kthread (no +userspace watchdog daemon). **GATE B is bench-verified on the +software/control-surface side.** From a second LAN host every +state-changing endpoint refuses an unauthenticated write +(`403 authentication required`); a spoofed non-literal `Host`, a +non-literal `Origin`, and a cross-site `Sec-Fetch-Site` are each refused +(`403 request origin refused`); `/cool/state` refuses a non-loopback peer +(`403 loopback only`); the four-POST unsigned-flash chain +(`upload → apply?confirm_unsigned=1 → boot → reboot`) and +`restore/factory` are each refused unauthenticated; `/fuse-identity` is +fully token-gated (F-1, F-2, F-19). The authenticated max-length +`POST /settings` probe passes without a crash: a 300-character value is +refused `400`, thirteen 16-character in-range values are accepted `200`, +and `/status`, the panel `/`, and `/settings` all keep serving, with the +settings restore verified byte-identical to the pre-test snapshot (F-4, +F-18). On-board build facts re-confirmed on the running image: +controllers stop at `K80` before forgectrl at `K90` (rc0/rc6, B-4); the +forgefirm logrotate config and init lever are installed (F-16); there is +no `/etc/watchdog.conf` or watchdog init (B-8); the wlconf data files are +0644 (B-16); the panel token is stored 0600. Deferred to Phase 11: the +settings file is still 0644 (F-23). **GATE A dry motion drills pass +(latch locked, no emission, operator watching):** bounded relative jogs +move the gantry (operator-witnessed) and the grblHAL position counter +tracks the commanded moves exactly, returning to rest; a +jog-cancel (`0x85`) stops the jog cleanly short of target and returns to +`Idle` with position preserved; a feed-hold (`!`) parks with the feed +ramping to 0 (`Hold:1`→`Hold:0`) and a resume (`~`) completes the move +with no lost-step alarm; a `^X` abort decelerates under control into +`Alarm` with machine position retained, `$X` recovers to `Idle`, and a +subsequent jog runs — no DRV8825 wedge after the abort (the rail never +cycled). **Dry dead-man / disruption drills pass (latch locked, no +emission):** with only the broker and the controller holding +`/dev/glowforge` — no stray process pins it (F-6) — a `SIGKILL` of the +controller mid-move is reaped by the supervisor, which writes `cnc/stop` ++ `cnc/laser_latch=1`, unlinks the homing anchor, and respawns a fresh +controller in about a second with the latch never unlocking (F-3); a +`SIGSTOP` (hang) mid-move drains the ring into a kernel `pulse data +underrun; position no longer trusted`, halting motion fast with the latch +locked while the cooling engine's report-silence clock runs past its +window; and a `forgectrl restart` mid-move leaves the busy controller +running (reparented), lets the move finish uninterrupted, never unlinks +the cooling verdict, and has the new daemon stand by and retake at idle +(F-12). The liveness probe's designed skip-on-open path — the safety-chain +output is known to de-assert during motion, so an at-that-moment read can +skip the probe, proceed without a motion fault, and re-probe on the next +spawn — was exercised and behaved per `liveness.c`. **Still pending — +operator-present bench work only, and no live-fire until GATE A's +live-fire drills pass on this image:** the +controlled-stop decel at the default cloud tick / resume-with-latch-locked +stays-laser-less / mid-ramp-latch-does-not-re-arm-FIRE drills, all with +LASER_ON probed at the PSU connector; the connection-flood +`machine_is_idle` fail-closed check under motion (X-2); the emission +witness + lid-IR characterization (Phase 5, `cool_fire_ir_delta` set from +the baseline); and the stale-gate / motion-integrity job drills across +Phases 4 and 6. None of these proceed without the operator at the +machine with the physical arm button, fire watch, and eye protection. + +The lid-IR **ambient baseline** for the fire-watch characterization is +captured on this image (600 samples over 5.6 min at 2 Hz, lid closed, +machine idle, coolant ≈25 °C): `lid_ir_1..4` read 37.3 ±0.6, 36.3 ±0.6, +39.5 ±0.7, and 40.0 ±0.6 raw counts (total spread ±3 counts), +`hv_current` reads 0 throughout, and the emission witness +(`laser_on_sampled`) read 0 on all 600 samples — the idle plumbing for +the emission/fire/HV evidence is verified quiet end to end (`/status` +carries the sensed rows; `/cool/status` reports `fire_watch:"watch"`). +Dataset: `scripts/bench/lid_ir_ambient_baseline.csv`. When the fire +characterization sets `cool_fire_ir_delta`, it must land comfortably +above the worst normal-cut peak delta and never below ~15 counts, so +ambient noise can never trip the fire abort. The three pending GATE A +kernel drills are scripted and staged on the bench +(`scripts/bench/gate_a_kernel_drills.py`): K1 proves the +controlled-stop deceleration floor at the default cloud tick, K2 +proves a resume waypoint honors the locked latch through a replayed +FIRE window, and K3 proves a mid-ramp latch unlock never re-arms the +FIRE drive — each with software witnesses (`laser_enable`, `laser_on`, +`laser_on_sampled`, interlock bit 3) plus the PSU-connector LASER_ON +scope point, run with forgectrl stopped so the pulse device is free. + **Phase 10 (tests & CI) is code-complete; the safety rules are now machine-enforced.** The grblHAL controller repo's CI builds the null-sink binary (driver sources under `-Werror`; the core submodule diff --git a/scripts/bench/gate_a_kernel_drills.py b/scripts/bench/gate_a_kernel_drills.py new file mode 100644 index 0000000..700c561 --- /dev/null +++ b/scripts/bench/gate_a_kernel_drills.py @@ -0,0 +1,270 @@ +#!/usr/bin/env python3 +"""GATE A kernel drills - runs ON the board. Usage: gate_a_kernel_drills.py K1|K2|K3 + +The pulse device must be free: stop forgectrl first +(/etc/init.d/forgectrl stop), run the drill, then restart it. The +script exits with a clear message if the device is busy. + +All drills: the first stream byte forces laser duty to zero, the +stream ends with laser-off bytes, motor_lock=15 (no axis moves), and +the latch is re-locked unconditionally on exit. K3 refuses to run if +laser_pgood reports the HV supply good. Software witnesses: +cnc/state, cnc/laser_enable, cnc/laser_on, cnc/laser_on_sampled, and +interlock_circuit bit 3 (the commanded latch). Physical witness: +scope on the PSU-connector LASER_ON pin, as in fire_test.py. + +K1 - controlled-stop deceleration floor. Pads-only stream at the + default cloud tick (10 kHz, ramp 125000 Hz/s). A controlled stop + mid-run must ramp the step frequency down to the floor (tens of + milliseconds), never consume the tail as a max-rate burst + (sub-millisecond) or hang. PASS: stop-to-idle time inside the + controlled-decel band, no fault, no underrun. + +K2 - resume waypoint honors the locked latch. Stream = pads, an + X-step section (motors locked), then a 2 s FIRE window. Run with + the latch LOCKED, controlled-stop inside the initial pads, then + resume with a positive waypoint - the branch that re-enables the + laser after the waypoint is reached. PASS: laser_enable stays 0 + through the FIRE window; laser_on/laser_on_sampled stay 0. + +K3 - mid-run latch unlock does not re-arm FIRE. Stream = FIRE bits + throughout. Run with the latch LOCKED (the run-start guard makes + the run laser-less), then write laser_latch=0 during the accel + ramp (ramp_rate lowered to 10000 Hz/s for a ~0.9 s window). The + unlock must drive the latch pin (interlock bit 3 reads 0) but + must NOT restore the FIRE output drive while the run or a ramp + is in flight. PASS: laser_enable stays 0 for the entire run. +""" +import errno, fcntl, os, struct, sys, time + +TICK_HZ = 10000 +FIRE = b'\x10' +PAD = b'\x00' +XSTEP = b'\x01' +POWER0 = bytes([0x80]) + + +def wr(attr, val): + with open('/sys/glowforge/' + attr, 'w') as f: + f.write(str(val)) + + +def rd(attr): + with open('/sys/glowforge/' + attr) as f: + return f.read().strip() + + +def rd_pos(): + with open('/sys/glowforge/cnc/position', 'rb') as f: + raw = f.read(32) + return struct.unpack('<5i', raw[:20]) + + +def snap(tag): + print('%s: state=%s laser_enable=%s laser_on=%s laser_on_sampled=%s interlock=%s' + % (tag, rd('cnc/state'), rd('cnc/laser_enable'), rd('cnc/laser_on'), + rd('cnc/laser_on_sampled'), rd('cnc/interlock_circuit'))) + + +def open_pulsedev(): + try: + fd = os.open('/dev/glowforge', os.O_WRONLY) + except OSError as e: + if e.errno == errno.EBUSY: + print('ABORT: /dev/glowforge is busy - stop forgectrl first ' + '(/etc/init.d/forgectrl stop), then re-run') + sys.exit(1) + raise + fcntl.flock(fd, fcntl.LOCK_EX) + return fd + + +def wait_state(want, timeout, poll=0.05): + t0 = time.time() + while time.time() - t0 < timeout: + s = rd('cnc/state') + if s == want: + return s + time.sleep(poll) + return rd('cnc/state') + + +def watch_laser_until_idle(timeout): + """Tight-loop laser_enable/laser_on watch; returns (hits, end_state).""" + hits = [] + t0 = time.time() + state = 'running' + while time.time() - t0 < timeout: + en = rd('cnc/laser_enable') + on = rd('cnc/laser_on') + if en != '0' or on != '0': + hits.append((round(time.time() - t0, 4), en, on)) + state = rd('cnc/state') + if state != 'running': + break + return hits, state + + +def drill_k1(): + stream = POWER0 + PAD * (6 * TICK_HZ) + print('K1: %d bytes = %.1f s of pads at %d Hz, ramp 125000 Hz/s' + % (len(stream), len(stream) / TICK_HZ, TICK_HZ)) + snap('pre ') + wr('cnc/motor_lock', 15) + wr('cnc/laser_latch', 1) + wr('cnc/ramp_rate', 125000) + wr('cnc/step_freq', TICK_HZ) + fd = open_pulsedev() + try: + os.lseek(fd, 1, os.SEEK_SET) + wr('cnc/enable', 1) + time.sleep(0.5) + os.write(fd, stream) + wr('cnc/run', 1) + time.sleep(1.5) # well past the accel ramp + if rd('cnc/state') != 'running': + print('FAIL: expected running before the stop, got %s' % rd('cnc/state')) + return 1 + t0 = time.time() + wr('cnc/stop', 1) + while time.time() - t0 < 5: + if rd('cnc/state') != 'running': + break + dt = time.time() - t0 + state = rd('cnc/state') + print('controlled stop: state=%s after %.4f s' % (state, dt)) + ok = state == 'idle' and 0.02 <= dt <= 3.0 and rd('cnc/faults') == '0' + if state == 'idle' and dt < 0.02: + print('FAIL: stop consumed the tail as a burst (%.4f s) - decel floor broken' % dt) + elif not ok: + print('FAIL: state=%s dt=%.4f faults=%s' % (state, dt, rd('cnc/faults'))) + else: + print('PASS: decelerating tail %.4f s, no burst, no fault' % dt) + # drain the paused remainder laser-less so the device ends clean + wr('cnc/resume', 0) + wait_state('running', 2, poll=0.005) + wait_state('idle', 10) + return 0 if ok else 1 + finally: + wr('cnc/laser_latch', 1) + fcntl.flock(fd, fcntl.LOCK_UN) + os.close(fd) + + +def drill_k2(): + # "unmask-x" as a second argument runs with motor_lock=14 (X live, + # ~6 mm of X travel) for boards where the waypoint counter does not + # advance under a full motor_lock. Park the head mid-bed first. + lock = 14 if 'unmask-x' in [a.lower() for a in sys.argv[2:]] else 15 + step_sec = (XSTEP + PAD * 4) * 1000 # 1000 X steps at 2 kHz + stream = (POWER0 + PAD * TICK_HZ + step_sec + PAD * (TICK_HZ // 2) + + FIRE * (2 * TICK_HZ) + PAD * TICK_HZ) + print('K2: %d bytes = %.1f s; latch stays LOCKED; waypoint +200; motor_lock=%d' + % (len(stream), len(stream) / TICK_HZ, lock)) + snap('pre ') + wr('cnc/motor_lock', lock) + wr('cnc/laser_latch', 1) + wr('cnc/ramp_rate', 125000) + wr('cnc/step_freq', TICK_HZ) + fd = open_pulsedev() + try: + os.lseek(fd, 1, os.SEEK_SET) + wr('cnc/enable', 1) + time.sleep(0.5) + os.write(fd, stream) + pos_before = rd_pos() + wr('cnc/run', 1) + time.sleep(0.4) # inside the initial pads + wr('cnc/stop', 1) + state = wait_state('idle', 5, poll=0.01) + if state != 'idle': + print('FAIL: controlled stop did not reach idle (state=%s)' % state) + return 1 + print('paused inside the pads; resuming with waypoint +200 (latch LOCKED)') + wr('cnc/resume', 200) + wait_state('running', 2, poll=0.005) + hits, state = watch_laser_until_idle(20) + pos_after = rd_pos() + print('done: state=%s' % state) + print('pos before=%s after=%s (informational: does the waypoint counter ' + 'advance under motor_lock)' % (pos_before, pos_after)) + snap('post') + print('laser_on_sampled=%s underruns=%s faults=%s' + % (rd('cnc/laser_on_sampled'), rd('cnc/underruns'), rd('cnc/faults'))) + if hits: + print('FAIL: laser asserted with the latch locked: %s' % hits[:10]) + return 1 + if pos_before[:3] == pos_after[:3]: + print('NOTE: position did not advance under motor_lock, so the ' + 'waypoint may not have completed. Re-run as ' + '"gate_a_kernel_drills.py K2 unmask-x" (X live, ~6 mm of ' + 'X travel) with the head parked mid-bed.') + print('PASS: FIRE window replayed after the resume waypoint with ' + 'laser_enable/laser_on at 0 throughout') + return 0 + finally: + wr('cnc/laser_latch', 1) + fcntl.flock(fd, fcntl.LOCK_UN) + os.close(fd) + + +def drill_k3(): + pgood = rd('cnc/laser_pgood') + if pgood != '0': + print('ABORT: laser_pgood=%s (HV supply reports good) - refusing latch unlock' % pgood) + return 1 + stream = POWER0 + FIRE * (3 * TICK_HZ) + PAD * (TICK_HZ // 2) + print('K3: %d bytes = %.1f s of FIRE bits; ramp_rate 10000 Hz/s ' + '(~0.9 s accel window); unlock at t=+0.15 s' + % (len(stream), len(stream) / TICK_HZ)) + snap('pre ') + wr('cnc/motor_lock', 15) + wr('cnc/laser_latch', 1) + wr('cnc/step_freq', TICK_HZ) + wr('cnc/ramp_rate', 10000) + fd = open_pulsedev() + try: + os.lseek(fd, 1, os.SEEK_SET) + wr('cnc/enable', 1) + time.sleep(0.5) + os.write(fd, stream) + wr('cnc/run', 1) + time.sleep(0.15) # inside the accel ramp + wr('cnc/laser_latch', 0) + print('latch UNLOCKED mid-ramp; interlock=%s (bit 3 should read 0)' + % rd('cnc/interlock_circuit')) + hits, state = watch_laser_until_idle(20) + print('done: state=%s' % state) + snap('post') + print('laser_on_sampled=%s underruns=%s faults=%s' + % (rd('cnc/laser_on_sampled'), rd('cnc/underruns'), rd('cnc/faults'))) + if hits: + print('FAIL: FIRE drive re-armed by a mid-run unlock: %s' % hits[:10]) + return 1 + print('PASS: laser_enable stayed 0 for the entire run after the ' + 'mid-ramp unlock') + return 0 + finally: + wr('cnc/laser_latch', 1) + try: + wr('cnc/ramp_rate', 125000) + except OSError: + print('WARNING: could not restore ramp_rate=125000 - restore it by hand') + fcntl.flock(fd, fcntl.LOCK_UN) + os.close(fd) + + +def main(): + mode = sys.argv[1].upper() if len(sys.argv) > 1 else '' + drills = {'K1': drill_k1, 'K2': drill_k2, 'K3': drill_k3} + if mode not in drills: + print(__doc__) + return 2 + rc = drills[mode]() + wr('cnc/laser_latch', 1) + print('exit: state=%s latch=LOCKED' % rd('cnc/state')) + return rc + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/scripts/bench/lid_ir_ambient_baseline.csv b/scripts/bench/lid_ir_ambient_baseline.csv new file mode 100644 index 0000000..7b8a0d7 --- /dev/null +++ b/scripts/bench/lid_ir_ambient_baseline.csv @@ -0,0 +1,601 @@ +t_s,lid_ir_1,lid_ir_2,lid_ir_3,lid_ir_4,hv_current,water_1,water_2,pwr_temp,laser_on_sampled +4665.89,37,37,40,40,0,672,669,586,0 +4666.45,37,36,40,40,0,674,674,586,0 +4667.01,37,36,40,40,0,668,673,586,0 +4667.57,37,36,39,40,0,667,669,593,0 +4668.14,36,36,39,40,0,667,674,592,0 +4668.70,38,36,39,40,0,668,674,593,0 +4669.27,37,35,38,41,0,665,669,591,0 +4669.83,39,37,39,39,0,667,666,592,0 +4670.40,38,36,40,40,0,674,667,589,0 +4670.96,37,36,38,41,0,668,667,593,0 +4671.52,37,37,41,40,0,671,674,590,0 +4672.09,38,36,41,40,0,671,666,589,0 +4672.65,37,36,40,40,0,669,666,590,0 +4673.22,37,36,38,41,0,669,676,593,0 +4673.78,38,37,40,41,0,675,674,590,0 +4674.35,36,38,40,40,0,669,667,590,0 +4674.91,37,36,39,40,0,663,667,590,0 +4675.48,38,38,39,40,0,667,666,592,0 +4676.05,38,36,40,40,0,666,670,587,0 +4676.62,38,36,38,39,0,672,667,586,0 +4677.18,38,36,38,40,0,670,667,589,0 +4677.75,37,36,39,40,0,666,664,592,0 +4678.31,36,37,40,39,0,665,672,593,0 +4678.88,37,36,40,40,0,667,669,593,0 +4679.44,37,36,40,40,0,674,678,591,0 +4680.01,37,36,40,39,0,667,665,587,0 +4680.57,37,36,39,38,0,676,677,587,0 +4681.14,37,35,40,40,0,675,670,587,0 +4681.70,38,37,39,41,0,672,671,593,0 +4682.27,36,36,39,40,0,675,671,592,0 +4682.84,38,37,38,41,0,675,667,592,0 +4683.40,37,36,38,40,0,667,666,593,0 +4683.97,36,36,40,40,0,668,666,591,0 +4684.53,37,36,39,40,0,669,669,594,0 +4685.10,38,36,40,40,0,674,667,592,0 +4685.66,37,36,39,39,0,673,669,586,0 +4686.23,37,37,40,40,0,668,667,586,0 +4686.79,36,36,39,39,0,668,666,593,0 +4687.36,37,37,39,40,0,673,666,586,0 +4687.92,37,36,40,41,0,666,669,593,0 +4688.49,37,37,39,40,0,674,666,587,0 +4689.06,36,36,39,41,0,666,674,586,0 +4689.63,37,37,40,40,0,673,675,588,0 +4690.19,37,36,40,40,0,662,674,593,0 +4690.76,38,35,39,40,0,673,673,586,0 +4691.32,37,37,40,41,0,671,671,593,0 +4691.89,38,36,40,40,0,673,665,592,0 +4692.45,37,36,40,40,0,674,672,591,0 +4693.02,37,36,40,40,0,675,677,587,0 +4693.58,38,37,40,40,0,677,668,592,0 +4694.15,37,36,40,39,0,667,675,587,0 +4694.71,37,36,40,39,0,676,675,593,0 +4695.27,37,37,40,40,0,666,671,588,0 +4695.84,38,36,40,40,0,674,673,587,0 +4696.40,37,36,40,40,0,670,672,590,0 +4696.97,37,36,38,40,0,669,674,588,0 +4697.53,37,37,39,40,0,676,674,589,0 +4698.10,38,36,40,39,0,677,669,591,0 +4698.67,37,38,39,38,0,673,676,593,0 +4699.23,38,36,39,40,0,670,675,587,0 +4699.80,38,36,40,40,0,675,671,588,0 +4700.37,38,36,40,40,0,673,668,583,0 +4700.93,37,37,39,39,0,671,670,591,0 +4701.50,37,35,41,39,0,675,674,587,0 +4702.06,37,37,39,40,0,668,675,588,0 +4702.63,37,36,39,40,0,669,666,591,0 +4703.19,37,37,39,41,0,667,666,588,0 +4703.75,36,36,39,40,0,672,667,588,0 +4704.32,37,36,40,38,0,671,673,587,0 +4704.88,37,36,39,40,0,676,673,586,0 +4705.44,38,36,38,40,0,676,667,586,0 +4706.01,37,36,40,40,0,670,669,587,0 +4706.58,36,36,40,39,0,677,673,586,0 +4707.15,37,37,40,41,0,674,670,589,0 +4707.72,37,36,40,41,0,672,668,593,0 +4708.28,38,37,39,40,0,669,665,591,0 +4708.85,37,35,40,41,0,667,672,586,0 +4709.41,37,36,40,41,0,671,674,586,0 +4709.98,37,37,40,40,0,675,667,587,0 +4710.54,37,37,39,41,0,666,667,590,0 +4711.11,38,37,40,40,0,667,666,591,0 +4711.67,37,36,38,40,0,670,668,586,0 +4712.23,37,36,38,41,0,667,667,593,0 +4712.80,38,36,39,41,0,666,673,592,0 +4713.36,37,37,39,40,0,675,669,592,0 +4713.93,37,36,40,39,0,671,672,589,0 +4714.49,38,37,41,40,0,672,666,587,0 +4715.05,37,36,38,39,0,666,672,586,0 +4715.62,37,36,40,39,0,667,671,592,0 +4716.18,39,36,40,40,0,665,665,590,0 +4716.75,38,37,40,41,0,673,665,589,0 +4717.31,36,36,39,40,0,678,673,593,0 +4717.87,37,36,39,39,0,674,665,589,0 +4718.44,38,37,40,42,0,668,669,593,0 +4719.00,38,36,40,40,0,671,674,586,0 +4719.57,37,36,39,40,0,668,667,592,0 +4720.13,37,36,40,40,0,673,668,590,0 +4720.69,38,37,40,40,0,674,667,592,0 +4721.26,37,36,41,40,0,664,672,591,0 +4721.83,37,37,39,40,0,671,669,588,0 +4722.40,36,37,40,39,0,665,666,587,0 +4722.96,38,37,39,40,0,676,675,586,0 +4723.53,37,37,40,41,0,672,667,591,0 +4724.10,38,36,39,40,0,669,668,594,0 +4724.66,37,37,39,41,0,666,671,586,0 +4725.23,37,37,40,40,0,673,674,586,0 +4725.79,38,37,39,41,0,676,674,591,0 +4726.36,37,37,40,41,0,675,670,586,0 +4726.92,37,36,38,40,0,675,669,592,0 +4727.49,37,37,39,40,0,673,676,590,0 +4728.05,38,36,40,39,0,669,669,588,0 +4728.62,37,36,40,40,0,676,674,586,0 +4729.19,37,36,40,40,0,666,674,586,0 +4729.75,37,36,38,41,0,667,674,587,0 +4730.32,37,36,39,39,0,669,670,590,0 +4730.89,38,36,39,41,0,668,666,594,0 +4731.45,38,37,40,40,0,673,672,587,0 +4732.02,38,36,39,40,0,674,665,587,0 +4732.58,37,35,39,41,0,676,672,588,0 +4733.14,38,35,39,40,0,677,669,589,0 +4733.71,38,36,40,40,0,674,667,592,0 +4734.27,36,36,39,39,0,673,666,593,0 +4734.84,37,36,38,39,0,667,669,587,0 +4735.40,38,37,39,40,0,669,666,593,0 +4735.96,38,36,40,40,0,668,674,587,0 +4736.53,37,36,38,40,0,667,675,587,0 +4737.09,38,37,40,40,0,674,668,586,0 +4737.66,38,36,39,41,0,667,673,588,0 +4738.22,37,37,40,40,0,674,672,593,0 +4738.78,37,36,39,40,0,670,667,587,0 +4739.35,36,36,39,40,0,668,669,593,0 +4739.92,37,37,40,40,0,667,671,591,0 +4740.48,37,37,39,39,0,668,674,590,0 +4741.05,37,36,39,39,0,668,666,586,0 +4741.62,37,36,40,40,0,674,675,592,0 +4742.18,37,36,39,39,0,670,676,586,0 +4742.75,38,36,39,40,0,669,666,591,0 +4743.32,37,36,40,40,0,675,674,587,0 +4743.88,36,37,40,40,0,672,665,587,0 +4744.45,37,36,39,40,0,674,671,592,0 +4745.01,37,36,39,40,0,674,669,588,0 +4745.58,37,36,39,40,0,675,665,587,0 +4746.15,38,36,40,40,0,673,667,587,0 +4746.72,37,35,41,40,0,667,665,590,0 +4747.28,37,37,40,41,0,668,674,594,0 +4747.85,38,36,39,41,0,668,674,588,0 +4748.42,38,36,39,41,0,667,668,587,0 +4748.99,36,37,39,39,0,674,674,586,0 +4749.56,37,36,39,41,0,674,670,593,0 +4750.12,37,36,40,40,0,675,672,592,0 +4750.69,37,37,39,39,0,670,668,589,0 +4751.25,38,37,39,40,0,672,670,590,0 +4751.82,37,36,41,39,0,667,666,591,0 +4752.38,38,37,39,40,0,669,666,587,0 +4752.95,37,36,39,40,0,669,666,593,0 +4753.51,38,36,39,40,0,676,669,592,0 +4754.08,37,37,39,40,0,668,667,587,0 +4754.65,38,35,38,40,0,667,670,594,0 +4755.22,37,36,39,39,0,677,673,587,0 +4755.79,38,36,39,40,0,672,666,587,0 +4756.35,37,36,39,41,0,670,671,587,0 +4756.92,38,36,39,41,0,675,669,593,0 +4757.48,37,36,39,39,0,675,674,588,0 +4758.05,37,36,39,40,0,672,674,593,0 +4758.61,37,36,39,40,0,674,665,586,0 +4759.18,37,37,39,39,0,673,669,588,0 +4759.75,37,35,39,40,0,674,669,585,0 +4760.32,37,37,40,39,0,671,673,587,0 +4760.88,38,37,39,40,0,674,673,592,0 +4761.45,38,36,39,40,0,673,673,591,0 +4762.01,37,36,39,41,0,674,673,592,0 +4762.58,37,36,39,41,0,666,672,589,0 +4763.14,39,37,39,40,0,665,669,593,0 +4763.70,37,36,40,40,0,673,675,587,0 +4764.27,36,36,39,40,0,668,670,585,0 +4764.83,37,36,39,40,0,668,675,587,0 +4765.40,37,37,40,40,0,667,664,592,0 +4765.97,38,37,40,40,0,670,676,593,0 +4766.54,37,36,39,41,0,665,670,593,0 +4767.10,37,36,39,40,0,675,665,587,0 +4767.67,37,37,40,40,0,668,666,591,0 +4768.23,37,36,40,40,0,668,670,592,0 +4768.80,37,36,40,39,0,665,671,589,0 +4769.36,37,36,40,40,0,673,671,586,0 +4769.93,38,36,39,39,0,676,667,585,0 +4770.49,38,36,39,40,0,672,668,586,0 +4771.06,38,37,39,41,0,667,674,593,0 +4771.62,37,37,38,40,0,668,668,587,0 +4772.19,37,36,40,40,0,669,667,586,0 +4772.76,37,36,41,40,0,674,666,588,0 +4773.33,38,37,39,40,0,666,673,586,0 +4773.89,37,36,39,40,0,674,671,591,0 +4774.46,37,36,39,40,0,676,671,587,0 +4775.03,37,37,40,39,0,669,673,592,0 +4775.59,37,37,39,39,0,674,669,587,0 +4776.16,38,36,40,40,0,673,672,591,0 +4776.72,37,37,40,40,0,674,667,587,0 +4777.29,37,36,40,40,0,670,676,592,0 +4777.85,38,37,40,41,0,667,670,592,0 +4778.42,38,37,39,40,0,669,665,586,0 +4778.99,38,37,39,40,0,669,670,594,0 +4779.56,38,37,39,40,0,670,673,593,0 +4780.12,38,37,38,40,0,667,675,587,0 +4780.68,37,36,41,40,0,666,668,592,0 +4781.25,37,37,40,40,0,666,666,591,0 +4781.82,37,36,40,41,0,665,667,592,0 +4782.39,38,37,39,41,0,667,673,587,0 +4782.96,37,36,40,40,0,666,667,591,0 +4783.52,38,36,40,40,0,674,675,593,0 +4784.09,38,36,39,41,0,662,673,586,0 +4784.65,37,36,40,41,0,676,671,587,0 +4785.22,37,38,40,40,0,669,666,591,0 +4785.78,37,37,39,40,0,668,668,592,0 +4786.35,37,36,40,40,0,676,673,590,0 +4786.91,37,36,40,40,0,669,675,592,0 +4787.48,37,37,40,40,0,668,667,587,0 +4788.04,37,37,41,39,0,676,674,586,0 +4788.60,37,36,39,40,0,669,672,588,0 +4789.17,38,37,40,40,0,667,674,592,0 +4789.74,38,37,40,40,0,674,676,592,0 +4790.30,37,36,39,41,0,662,669,592,0 +4790.87,38,36,39,40,0,666,666,588,0 +4791.44,37,37,40,40,0,675,675,590,0 +4792.01,37,36,40,40,0,668,668,587,0 +4792.57,37,36,40,40,0,672,667,587,0 +4793.14,37,36,39,40,0,673,669,593,0 +4793.70,37,36,41,41,0,666,669,588,0 +4794.27,37,37,40,40,0,676,673,588,0 +4794.83,37,36,38,40,0,671,674,588,0 +4795.40,36,36,40,40,0,671,667,588,0 +4795.97,37,36,39,39,0,672,670,586,0 +4796.54,37,36,39,40,0,667,667,587,0 +4797.10,37,35,40,40,0,675,673,586,0 +4797.67,37,37,40,40,0,670,669,592,0 +4798.24,37,36,40,40,0,669,671,588,0 +4798.81,37,37,40,39,0,675,674,592,0 +4799.37,37,37,38,40,0,670,669,591,0 +4799.94,37,36,39,40,0,674,673,593,0 +4800.51,36,36,40,40,0,674,672,587,0 +4801.07,37,36,40,40,0,673,673,589,0 +4801.64,37,36,40,40,0,671,667,587,0 +4802.20,37,35,39,41,0,670,668,586,0 +4802.77,37,36,40,39,0,674,667,588,0 +4803.33,37,37,40,39,0,670,678,589,0 +4803.91,37,35,40,40,0,671,675,592,0 +4804.47,38,36,40,41,0,666,675,592,0 +4805.04,37,36,39,40,0,668,672,593,0 +4805.60,38,36,40,40,0,676,670,588,0 +4806.17,38,36,38,39,0,670,677,590,0 +4806.74,37,37,39,40,0,675,671,587,0 +4807.30,37,36,40,40,0,672,668,587,0 +4807.87,38,37,39,40,0,667,668,591,0 +4808.43,37,36,40,39,0,666,666,586,0 +4809.00,37,36,41,39,0,673,667,591,0 +4809.56,36,37,38,40,0,675,668,586,0 +4810.13,36,36,40,40,0,672,669,592,0 +4810.70,38,36,40,39,0,673,667,592,0 +4811.27,38,36,40,41,0,672,673,587,0 +4811.83,37,36,40,40,0,668,667,586,0 +4812.40,37,37,39,39,0,666,669,586,0 +4812.96,37,36,40,41,0,671,667,589,0 +4813.52,37,37,39,40,0,674,673,587,0 +4814.09,38,36,39,40,0,668,671,592,0 +4814.65,37,36,39,38,0,669,669,594,0 +4815.22,37,36,39,40,0,667,669,587,0 +4815.78,37,36,39,40,0,671,674,591,0 +4816.35,37,37,40,39,0,666,663,589,0 +4816.92,37,37,40,40,0,672,668,588,0 +4817.49,37,37,39,39,0,675,671,589,0 +4818.05,38,37,40,41,0,675,666,592,0 +4818.62,38,37,40,40,0,666,666,591,0 +4819.18,37,37,39,40,0,671,667,591,0 +4819.75,37,36,39,40,0,673,669,591,0 +4820.32,37,37,39,40,0,674,674,587,0 +4820.88,37,37,40,40,0,675,666,585,0 +4821.45,36,36,40,41,0,667,675,593,0 +4822.02,38,37,39,39,0,668,675,591,0 +4822.58,36,37,41,40,0,667,672,590,0 +4823.15,37,36,38,40,0,676,671,589,0 +4823.72,37,37,39,41,0,673,671,587,0 +4824.28,38,36,40,41,0,666,670,592,0 +4824.85,37,36,40,40,0,666,672,590,0 +4825.41,37,36,40,41,0,674,674,586,0 +4825.99,38,36,40,41,0,675,671,593,0 +4826.55,37,36,38,40,0,673,670,588,0 +4827.12,37,37,39,39,0,668,665,587,0 +4827.68,38,37,40,41,0,666,666,587,0 +4828.25,37,36,39,39,0,673,668,585,0 +4828.81,38,36,40,40,0,668,666,588,0 +4829.38,37,37,39,40,0,668,675,592,0 +4829.95,37,37,40,39,0,665,667,589,0 +4830.51,36,37,39,40,0,669,675,593,0 +4831.08,38,36,40,40,0,667,669,586,0 +4831.65,37,36,40,40,0,677,668,592,0 +4832.21,37,38,39,40,0,668,667,589,0 +4832.78,37,37,40,41,0,665,675,589,0 +4833.34,37,36,39,40,0,676,673,586,0 +4833.91,37,37,38,40,0,666,667,587,0 +4834.49,37,37,40,39,0,673,668,587,0 +4835.05,36,37,40,39,0,667,667,586,0 +4835.62,37,37,40,40,0,671,667,587,0 +4836.18,38,36,39,40,0,673,674,588,0 +4836.75,37,37,39,39,0,668,669,589,0 +4837.31,38,37,39,40,0,672,667,589,0 +4837.88,37,37,39,40,0,670,674,592,0 +4838.45,37,36,40,41,0,667,674,593,0 +4839.02,38,35,39,40,0,671,666,586,0 +4839.59,38,37,40,40,0,670,669,591,0 +4840.15,38,36,40,40,0,673,674,594,0 +4840.72,37,35,39,41,0,666,667,588,0 +4841.28,37,36,39,40,0,667,666,593,0 +4841.85,37,36,39,39,0,674,671,588,0 +4842.41,37,37,38,40,0,672,671,587,0 +4842.98,38,36,41,41,0,674,666,587,0 +4843.54,37,37,40,40,0,667,668,587,0 +4844.10,38,36,39,41,0,673,675,588,0 +4844.67,37,36,38,40,0,671,669,592,0 +4845.23,38,37,39,40,0,676,665,587,0 +4845.80,38,37,40,40,0,674,675,590,0 +4846.36,37,37,40,40,0,671,672,586,0 +4846.94,38,36,40,40,0,674,676,587,0 +4847.50,38,38,40,40,0,679,673,589,0 +4848.07,38,36,40,41,0,671,666,592,0 +4848.64,36,37,40,40,0,668,665,590,0 +4849.20,37,36,40,40,0,670,668,586,0 +4849.77,37,35,40,40,0,669,670,588,0 +4850.33,37,37,39,39,0,666,666,594,0 +4850.90,37,36,40,39,0,672,672,586,0 +4851.47,37,36,39,39,0,675,675,593,0 +4852.04,37,36,40,40,0,669,671,592,0 +4852.61,38,37,39,40,0,669,676,593,0 +4853.18,38,36,40,40,0,671,671,586,0 +4853.75,37,36,40,40,0,675,670,589,0 +4854.32,38,37,39,40,0,675,668,589,0 +4854.88,38,36,39,40,0,668,667,592,0 +4855.45,37,36,40,40,0,674,668,591,0 +4856.01,37,36,39,40,0,675,667,587,0 +4856.58,36,37,40,39,0,665,667,588,0 +4857.14,38,37,40,40,0,669,665,586,0 +4857.71,37,36,39,40,0,675,667,587,0 +4858.27,37,36,40,40,0,673,672,590,0 +4858.84,38,36,39,40,0,677,674,587,0 +4859.41,37,36,41,39,0,668,675,587,0 +4859.98,37,36,39,39,0,676,670,586,0 +4860.54,37,36,40,40,0,676,666,588,0 +4861.11,37,36,39,40,0,676,673,591,0 +4861.67,38,36,39,40,0,669,671,589,0 +4862.24,37,36,40,39,0,676,675,589,0 +4862.80,37,36,39,40,0,669,668,593,0 +4863.37,38,36,40,41,0,673,674,588,0 +4863.93,38,36,40,40,0,668,669,589,0 +4864.50,38,36,40,40,0,669,674,594,0 +4865.06,37,36,40,40,0,673,665,594,0 +4865.63,37,37,39,40,0,674,675,594,0 +4866.20,38,36,40,40,0,673,667,594,0 +4866.76,37,36,39,40,0,669,668,586,0 +4867.33,37,37,38,39,0,665,666,586,0 +4867.90,37,36,39,39,0,667,669,592,0 +4868.46,37,37,40,39,0,668,677,589,0 +4869.03,37,37,39,40,0,674,675,587,0 +4869.60,37,36,39,39,0,674,669,593,0 +4870.17,38,37,39,40,0,676,673,587,0 +4870.73,37,37,40,40,0,676,667,587,0 +4871.30,38,37,39,40,0,669,674,588,0 +4871.86,38,36,40,40,0,663,666,592,0 +4872.43,38,37,39,40,0,670,670,594,0 +4873.00,38,36,40,40,0,668,666,590,0 +4873.56,37,35,39,40,0,667,674,591,0 +4874.12,37,36,40,39,0,675,666,587,0 +4874.70,37,37,40,39,0,674,673,592,0 +4875.26,36,36,39,40,0,668,677,588,0 +4875.83,38,36,39,41,0,673,667,593,0 +4876.40,36,36,39,40,0,671,669,593,0 +4876.96,37,36,40,40,0,669,672,588,0 +4877.53,36,37,39,40,0,666,667,594,0 +4878.10,38,35,39,40,0,667,667,586,0 +4878.67,38,36,38,40,0,676,674,587,0 +4879.24,37,36,39,40,0,667,676,588,0 +4879.80,37,36,40,39,0,675,673,594,0 +4880.36,38,35,40,40,0,676,668,592,0 +4880.93,38,37,39,41,0,665,671,588,0 +4881.49,36,35,38,41,0,667,673,594,0 +4882.06,38,36,39,40,0,664,667,592,0 +4882.62,37,36,40,41,0,671,674,593,0 +4883.19,37,37,38,41,0,672,667,587,0 +4883.75,37,37,40,40,0,670,673,592,0 +4884.31,37,37,40,40,0,672,669,586,0 +4884.88,38,36,39,40,0,674,674,593,0 +4885.44,38,37,40,40,0,667,674,588,0 +4886.01,38,36,39,41,0,669,669,593,0 +4886.57,37,36,40,41,0,667,674,586,0 +4887.14,38,36,38,41,0,674,674,588,0 +4887.71,38,37,39,41,0,672,668,592,0 +4888.28,39,38,39,40,0,667,668,591,0 +4888.84,37,37,39,38,0,669,672,592,0 +4889.41,36,36,40,39,0,669,667,591,0 +4889.97,38,36,39,40,0,674,677,593,0 +4890.54,37,37,40,39,0,674,670,586,0 +4891.10,37,36,39,41,0,667,675,591,0 +4891.67,37,36,39,41,0,668,666,593,0 +4892.23,37,37,39,40,0,674,670,588,0 +4892.80,38,37,39,41,0,675,671,591,0 +4893.36,38,37,39,41,0,667,670,592,0 +4893.92,37,36,39,39,0,670,673,592,0 +4894.49,37,36,40,40,0,669,667,593,0 +4895.05,37,36,38,40,0,674,674,588,0 +4895.62,37,36,41,39,0,674,675,587,0 +4896.19,38,36,40,40,0,674,667,588,0 +4896.76,37,37,40,41,0,666,667,591,0 +4897.33,37,35,39,40,0,676,678,592,0 +4897.89,37,36,40,39,0,669,672,588,0 +4898.46,37,37,40,40,0,669,666,587,0 +4899.02,37,36,41,40,0,673,666,586,0 +4899.58,36,35,39,39,0,665,674,592,0 +4900.15,37,37,40,40,0,670,667,586,0 +4900.71,37,36,40,41,0,666,664,589,0 +4901.28,37,36,40,40,0,674,674,594,0 +4901.85,37,36,40,40,0,669,671,592,0 +4902.42,37,36,40,40,0,668,667,592,0 +4902.98,38,36,39,39,0,673,667,592,0 +4903.55,38,37,38,40,0,674,674,588,0 +4904.12,39,37,40,41,0,669,665,587,0 +4904.68,37,36,40,41,0,666,673,592,0 +4905.25,38,37,39,39,0,664,675,591,0 +4905.81,37,36,39,40,0,669,667,587,0 +4906.38,37,35,40,39,0,675,671,593,0 +4906.94,37,37,39,40,0,674,674,591,0 +4907.51,38,37,39,39,0,669,665,592,0 +4908.07,37,37,40,40,0,669,666,586,0 +4908.64,38,37,40,39,0,676,669,589,0 +4909.21,38,36,39,40,0,666,668,593,0 +4909.78,38,36,40,40,0,670,671,592,0 +4910.34,38,36,39,39,0,665,670,588,0 +4910.91,38,36,39,40,0,672,669,593,0 +4911.47,37,36,40,39,0,669,665,587,0 +4912.03,38,36,40,40,0,669,673,589,0 +4912.60,37,37,39,40,0,674,673,587,0 +4913.17,36,37,39,40,0,673,675,587,0 +4913.73,37,38,39,40,0,674,674,594,0 +4914.30,36,37,38,40,0,668,674,592,0 +4914.87,38,37,39,40,0,670,666,591,0 +4915.44,37,36,40,40,0,672,675,589,0 +4916.00,37,37,39,41,0,666,666,588,0 +4916.56,37,36,38,39,0,667,666,588,0 +4917.13,37,37,39,40,0,672,672,586,0 +4917.70,37,37,40,40,0,668,665,587,0 +4918.26,37,37,39,40,0,674,674,586,0 +4918.82,38,35,40,40,0,675,675,588,0 +4919.39,37,36,39,41,0,670,674,590,0 +4919.95,37,37,40,41,0,676,673,594,0 +4920.52,38,36,39,41,0,672,669,593,0 +4921.08,37,35,40,40,0,669,667,586,0 +4921.65,39,37,39,40,0,671,673,590,0 +4922.21,37,36,38,40,0,669,676,593,0 +4922.78,37,36,40,40,0,670,666,586,0 +4923.35,37,36,40,40,0,669,669,586,0 +4923.92,37,37,40,41,0,674,674,588,0 +4924.49,37,36,40,40,0,666,673,593,0 +4925.05,38,37,40,39,0,674,675,586,0 +4925.62,37,38,38,40,0,673,674,593,0 +4926.19,38,36,39,40,0,675,674,588,0 +4926.76,37,36,40,40,0,672,674,587,0 +4927.32,37,36,39,40,0,669,676,593,0 +4927.89,38,36,40,40,0,670,671,588,0 +4928.45,37,36,40,40,0,675,668,588,0 +4929.02,38,38,40,40,0,669,673,588,0 +4929.58,37,36,39,39,0,670,674,592,0 +4930.15,37,37,39,38,0,668,668,586,0 +4930.71,37,37,39,40,0,672,667,587,0 +4931.28,37,37,40,40,0,673,667,589,0 +4931.84,37,36,39,41,0,673,671,587,0 +4932.41,38,37,38,41,0,675,669,594,0 +4932.98,38,37,39,40,0,668,667,594,0 +4933.55,38,37,40,41,0,673,667,588,0 +4934.11,37,36,40,41,0,666,670,591,0 +4934.68,38,36,40,40,0,674,674,585,0 +4935.24,37,36,40,40,0,674,668,591,0 +4935.81,37,36,40,40,0,676,674,587,0 +4936.37,37,37,40,40,0,668,673,587,0 +4936.94,38,35,39,40,0,673,675,588,0 +4937.50,37,36,40,40,0,668,668,593,0 +4938.07,37,35,40,40,0,668,671,588,0 +4938.64,38,36,40,40,0,675,667,594,0 +4939.21,37,35,40,40,0,673,669,593,0 +4939.77,37,36,39,40,0,671,672,592,0 +4940.34,37,35,40,41,0,673,673,588,0 +4940.90,37,36,40,39,0,667,673,589,0 +4941.47,38,36,39,39,0,667,675,588,0 +4942.03,38,37,39,40,0,674,670,587,0 +4942.60,37,36,39,41,0,675,674,590,0 +4943.16,37,37,40,41,0,671,664,587,0 +4943.73,37,36,38,40,0,666,669,588,0 +4944.30,37,36,40,40,0,667,667,585,0 +4944.87,37,36,40,40,0,669,667,588,0 +4945.43,37,37,40,40,0,673,675,590,0 +4946.00,36,36,39,40,0,676,668,594,0 +4946.56,36,36,39,40,0,668,670,592,0 +4947.13,39,37,39,40,0,674,669,588,0 +4947.69,37,35,39,39,0,676,669,593,0 +4948.26,37,36,40,39,0,676,673,587,0 +4948.82,38,36,40,40,0,668,671,592,0 +4949.39,37,36,39,40,0,669,668,593,0 +4949.96,38,37,38,40,0,666,674,587,0 +4950.53,37,36,40,40,0,670,666,586,0 +4951.09,37,36,40,40,0,673,674,587,0 +4951.66,37,36,40,40,0,666,665,591,0 +4952.22,36,36,39,40,0,676,676,589,0 +4952.79,37,37,40,40,0,670,669,593,0 +4953.35,37,36,40,40,0,678,672,592,0 +4953.92,37,37,39,40,0,669,674,587,0 +4954.48,38,36,39,40,0,667,666,592,0 +4955.06,37,37,39,40,0,674,676,587,0 +4955.62,38,36,40,40,0,668,669,593,0 +4956.19,38,36,39,40,0,667,666,588,0 +4956.76,37,36,40,40,0,667,672,592,0 +4957.32,37,35,40,40,0,666,672,594,0 +4957.88,37,36,40,40,0,674,674,590,0 +4958.45,37,37,40,40,0,669,664,586,0 +4959.01,38,36,39,40,0,674,667,587,0 +4959.58,38,37,40,40,0,673,673,593,0 +4960.15,37,36,40,41,0,669,674,587,0 +4960.72,37,36,41,40,0,674,675,592,0 +4961.29,38,36,39,40,0,671,673,588,0 +4961.85,36,36,40,40,0,670,665,594,0 +4962.42,37,36,39,41,0,669,667,589,0 +4962.98,37,36,39,38,0,669,674,593,0 +4963.55,37,37,39,40,0,669,667,591,0 +4964.11,38,35,41,41,0,671,669,594,0 +4964.68,37,36,40,39,0,674,668,588,0 +4965.24,37,36,40,40,0,675,673,593,0 +4965.81,38,36,39,40,0,671,676,594,0 +4966.38,38,37,39,40,0,674,669,586,0 +4966.94,36,36,40,40,0,675,674,594,0 +4967.51,37,36,40,39,0,666,666,589,0 +4968.07,37,35,40,41,0,669,674,592,0 +4968.64,37,36,40,40,0,669,668,587,0 +4969.21,39,36,38,40,0,667,674,595,0 +4969.77,37,36,40,40,0,665,675,586,0 +4970.33,38,37,40,40,0,669,669,588,0 +4970.90,38,36,40,40,0,668,666,588,0 +4971.46,37,36,39,40,0,668,667,593,0 +4972.03,37,37,39,40,0,672,671,594,0 +4972.59,37,36,40,40,0,674,669,594,0 +4973.16,38,37,39,40,0,668,669,594,0 +4973.72,37,37,39,40,0,677,671,590,0 +4974.28,38,37,40,40,0,673,673,588,0 +4974.85,37,36,39,42,0,675,675,592,0 +4975.41,37,37,40,40,0,671,670,591,0 +4975.98,37,36,39,40,0,669,667,589,0 +4976.54,37,36,38,40,0,667,672,587,0 +4977.10,37,37,41,40,0,671,675,587,0 +4977.67,37,35,38,41,0,671,668,593,0 +4978.23,36,36,40,40,0,676,673,592,0 +4978.80,38,36,40,39,0,667,677,588,0 +4979.36,38,37,40,40,0,672,673,587,0 +4979.92,38,36,40,41,0,669,670,588,0 +4980.49,37,35,40,40,0,670,669,593,0 +4981.05,37,37,39,40,0,671,672,593,0 +4981.62,37,37,40,40,0,669,672,589,0 +4982.19,38,36,39,40,0,669,673,591,0 +4982.76,38,36,40,39,0,666,674,593,0 +4983.33,39,36,39,39,0,671,671,593,0 +4983.89,37,37,40,40,0,669,668,593,0 +4984.46,37,36,39,40,0,669,668,592,0 +4985.03,37,37,40,40,0,670,664,592,0 +4985.60,37,36,39,39,0,676,673,589,0 +4986.17,38,37,40,40,0,668,668,586,0 +4986.73,37,36,38,39,0,666,671,591,0 +4987.30,37,36,39,40,0,673,666,587,0 +4987.86,38,36,40,40,0,667,667,587,0 +4988.43,37,36,38,40,0,668,676,592,0 +4989.00,37,37,39,40,0,675,673,589,0 +4989.57,36,37,39,40,0,674,667,593,0 +4990.13,37,36,40,40,0,661,674,594,0 +4990.70,38,37,39,39,0,670,675,590,0 +4991.26,38,36,39,40,0,669,668,594,0 +4991.83,37,36,40,39,0,668,668,587,0 +4992.39,37,37,39,41,0,668,672,587,0 +4992.96,38,37,40,40,0,676,665,594,0 +4993.52,36,36,39,41,0,669,671,594,0 +4994.08,38,37,39,40,0,676,666,588,0 +4994.65,37,36,39,40,0,668,666,591,0 +4995.21,38,35,39,40,0,674,665,590,0 +4995.78,38,36,40,40,0,670,667,589,0 +4996.35,37,36,40,41,0,666,672,588,0 +4996.92,38,36,40,40,0,676,673,589,0 +4997.48,38,35,38,39,0,675,666,589,0 +4998.05,38,36,40,41,0,672,670,588,0 +4998.61,37,37,40,40,0,676,677,593,0 +4999.18,37,38,40,40,0,669,671,593,0 +4999.75,38,36,38,40,0,673,667,586,0 +5000.31,36,36,39,41,0,668,666,590,0 +5000.88,37,35,40,40,0,669,673,584,0 +5001.45,38,36,40,40,0,666,666,594,0 +5002.02,37,36,40,40,0,666,672,589,0 +5002.59,37,36,38,40,0,667,666,587,0 +5003.15,37,36,40,39,0,675,672,586,0 +5003.72,37,36,38,41,0,677,670,590,0 +5004.29,38,36,39,40,0,674,669,594,0 +5004.86,37,36,40,41,0,675,674,592,0