From de0bda60ad30632546bf15f271e5d48ed376d907 Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Tue, 22 Jul 2025 13:24:25 -0700 Subject: [PATCH 01/14] Update sockets, add more run data --- .gitignore | 3 - .vscode/launch.json | 40 + pyproject.toml | 12 +- src/arroyosas/app/tiled_event_sim_cli.py | 2 +- src/arroyosas/app/tiled_ws_cli.py | 12 +- src/arroyosas/tiled/tiled_websocket.py | 55 +- .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + 34 files changed, 54535 insertions(+), 37 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_run_0001.json create mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_stream_0001.json create mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_stream_0002.json create mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_new_run_0001.json create mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_new_stream_0001.json create mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_new_stream_0002.json create mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_new_run_0001.json create mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_new_stream_0001.json create mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_new_stream_0002.json create mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_new_run_0001.json create mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_new_stream_0001.json create mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_new_stream_0002.json create mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_streams_namespace_0001.json diff --git a/.gitignore b/.gitignore index 3b2cf55..274b80d 100644 --- a/.gitignore +++ b/.gitignore @@ -163,9 +163,6 @@ cython_debug/ - -.vscode/ - # Ignore dynaconf secret files .secrets.* diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..58ab968 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,40 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + { + "name": "tiled_ws_cli", + "type": "debugpy", + "request": "launch", + "module": "arroyosas.app.tiled_ws_cli", + "env": { + "TILED_URI": "ws://localhost:8000", + "TILED_API_KEY": "32bf4b533d638f470270e0725d14a7bc153114641a7dfda58f96e7926160e9e126272add" + } + }, + { + "name": "tiled_websocket", + "type": "debugpy", + "request": "launch", + "module": "arroyosas.tiled.tiled_websocket", + "env": { + "TILED_API_KEY": "32bf4b533d638f470270e0725d14a7bc153114641a7dfda58f96e7926160e9e126272add" + } + }, + { + "name": "tiled_event_simulator", + "type": "debugpy", + "request": "launch", + "module": "arroyosas.app.tiled_event_sim_cli", + "args": [ + "tiled_event_logs" + ], + "env": { + "TILED_API_KEY": "32bf4b533d638f470270e0725d14a7bc153114641a7dfda58f96e7926160e9e126272add" + } + } + ] +} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index c7cf815..925efb3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ dependencies = [ "msgpack", "numpy", "Pillow", - "bluesky-tiled-plugins==2.0.0b57", + # "bluesky-tiled-plugins", "pyzmq", "tqdm", "typer", @@ -24,7 +24,9 @@ dependencies = [ "zarr", "pyFAI", "transformers", - "redis"] + "redis", + "tiled[client] @ git+https://github.com/vshekar/tiled@websocket-endpoint" +] [project.optional-dependencies] workflow-viz = [ @@ -45,7 +47,7 @@ dev = [ "pre-commit", "pytest-asyncio", "pytest-mock", - "tiled[server] >=0.1.0b14, <0.2" + # "tiled[server] >=0.1.0b14, <0.2" # Installed from websocket-endpoint branch in Dockerfile ] lse = [ @@ -61,13 +63,13 @@ all = [ "pandas", "msgpack", "numpy", - "ophyd", + # "tiled[client] >=0.1.0b14, <0.2", # Installed from websocket-endpoint branch in Dockerfile "Pillow", "pyzmq", "tqdm", "typer", "websockets", - "tiled[client] >=0.1.0b14, <0.2", + # "tiled[client] >=0.1.0b14, <0.2", # Installed from websocket-endpoint branch in Dockerfile "redis", "numpy<2.0.0", "pandas", diff --git a/src/arroyosas/app/tiled_event_sim_cli.py b/src/arroyosas/app/tiled_event_sim_cli.py index 5ef335d..3ba5887 100644 --- a/src/arroyosas/app/tiled_event_sim_cli.py +++ b/src/arroyosas/app/tiled_event_sim_cli.py @@ -208,7 +208,7 @@ def main( log_dir: str = typer.Argument(..., help="Directory containing Tiled event logs"), host: str = typer.Option("0.0.0.0", help="Host to bind the WebSocket server to"), port: int = typer.Option(8000, help="Port to bind the WebSocket server to"), - stream_path: str = typer.Option("/stream", help="WebSocket path for the stream endpoint"), + stream_path: str = typer.Option("/", help="WebSocket path for the stream endpoint"), run_id: str = typer.Option(None, help="Specific run ID to replay (defaults to first run found)") ): """ diff --git a/src/arroyosas/app/tiled_ws_cli.py b/src/arroyosas/app/tiled_ws_cli.py index 445f0e3..35113bc 100644 --- a/src/arroyosas/app/tiled_ws_cli.py +++ b/src/arroyosas/app/tiled_ws_cli.py @@ -6,18 +6,18 @@ from arroyosas.config import settings from arroyosas.log_utils import setup_logger from arroyosas.tiled.tiled_poller import TiledRawFrameOperator -from arroyosas.tiled.tiled_websocket import TiledWebSocketListener +from arroyosas.tiled.tiled_websocket import TiledClientListener from arroyosas.zmq import ZMQFramePublisher app = typer.Typer() logger = logging.getLogger("arroyosas") -app_settings = settings.tiled_poller +app_settings = settings.tiled_ws_listener setup_logger(logger, log_level=settings.logging_level) @app.command() -async def start( +def start( tiled_url: str = typer.Option(None, help="Tiled base URL"), websocket_url: str = typer.Option(None, help="WebSocket URL"), zmq_url: str = typer.Option(None, help="ZMQ publisher URL"), @@ -47,9 +47,9 @@ async def start( operator.add_publisher(publisher) # Create and start listener - listener = TiledWebSocketListener.from_settings(app_settings, operator) - await listener.start() + listener = TiledClientListener.from_settings(app_settings, operator) + asyncio.run(listener.start()) if __name__ == "__main__": - asyncio.run(start()) + app() diff --git a/src/arroyosas/tiled/tiled_websocket.py b/src/arroyosas/tiled/tiled_websocket.py index 6c8e78b..fc97ba6 100644 --- a/src/arroyosas/tiled/tiled_websocket.py +++ b/src/arroyosas/tiled/tiled_websocket.py @@ -35,15 +35,11 @@ def __init__( self, operator: Operator, tiled_client: BaseClient, - stream_name: str, - target: str = "img", - create_run_logs: bool = True, + create_run_logs: bool = False, log_dir: str = "tiled_logs", ): self.operator = operator self.tiled_client = tiled_client - self.stream_name = stream_name - self.target = target self.create_run_logs = create_run_logs if not os.path.exists(log_dir): os.makedirs(log_dir, exist_ok=True) @@ -108,14 +104,14 @@ def on_new_stream(self, sub, data): stream_sub.add_callback(self.on_node_in_stream) stream_sub.start() - def on_event(self, sub: Subscription, data: Dict[str, Any]) -> None: - """ - Handle new event - """ - logger.info(data) if logger.isEnabledFor(logging.INFO) else None - if self.create_run_logs: - self.log_message_to_json("on_event", sub, data) + def load_data(self, sub, data): + patch = data['patch'] + logger.debug(data['uri']) if logger.isEnabledFor(logging.DEBUG) else None + slice_ = tuple(slice(offset, offset + shape) for offset, shape in zip(patch["offset"], patch["shape"])) # GET /array/full/... + node = self.tiled_client['/'.join(sub.segments)] # GET /metadata/... wasteful to do it on each load_data call + images = node.read(slice=slice_) # could be sub.node.read(...) + logger.debug(f"images shape {images.shape}") if logger.isEnabledFor(logging.DEBUG) else None def on_node_in_stream(self, sub, data): logger.debug(data) if logger.isEnabledFor(logging.DEBUG) else None @@ -142,8 +138,7 @@ def on_node_in_stream(self, sub, data): stream_sub = Subscription( self.tiled_client.context, sub.segments + [key], start=0 ) - # stream_sub.add_callback(print) - stream_sub.add_callback(self.on_event) + stream_sub.add_callback(self.load_data) stream_sub.start() self.publish_event(data) @@ -153,7 +148,18 @@ async def start(self) -> None: await asyncio.to_thread(self._start) def _start(self) -> None: - """Subscribe to the socket at the provided base segments level""" + """ + Subscribe to the socket at the provided base segments level + + When tiledwriter puts bluesky data into tiled, it's in newish tree: + catalog (those in quotes are literal names): + + - run: (run start and stop as metadata) + - "streams": (namespace) + - stream_name: (e.g. 'primary') + - key: (e.g. 'pil2M_image') + - "internal" (table of data from events) + """ node = self.tiled_client catalog_sub = Subscription(node.context) @@ -171,8 +177,18 @@ def send_to_operator(self, message: SASMessage) -> None: asyncio.run(self.operator.process(message)) def publish_start(self, data: Dict[str, Any]) -> None: + + # We need to make a request to get image information + # from tiled.structures.array import ArrayStructure + # structure = ArrayStructure.from_json(data["data_source"]["structure"]) + # structure.dtype.to_numpy_dtype() start = SASStart( - data=data, # Include any relevant data for the start event + run_name=data['key'], + run_id=data['key'], + width=0, + height=0, + data_type="", + tiled_url=self.tiled_client.uri, ) self.send_to_operator(start) @@ -242,10 +258,6 @@ def from_settings(cls, settings: Any, op: Operator) -> "TiledClientListener": settings.uri, api_key=settings.api_key, ) - # for key in client.context.whoami()['api_keys']: - # client.context.revoke_api_key(key['first_eight']) - logger.info(f"#### Listening for runs at {settings.base_segments}") - # logger.info(f"#### Frames segments: {settings.frames_segments}") # Create log directory if specified in settings log_dir = getattr(settings, "log_dir", "tiled_logs") @@ -253,13 +265,12 @@ def from_settings(cls, settings: Any, op: Operator) -> "TiledClientListener": return cls( op, client, - settings.stream_name, - settings.target, log_dir, ) if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) # Example usage settings = { diff --git a/tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_run_0001.json b/tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_run_0001.json new file mode 100644 index 0000000..783ec98 --- /dev/null +++ b/tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_run_0001.json @@ -0,0 +1,107 @@ +{ + "event_name": "on_new_run", + "sequence": 1, + "timestamp": 1753200031.9191792, + "subscription_segments": [ + "/" + ], + "callback_data": { + "sequence": 16, + "timestamp": "2025-07-22T16:00:31.877620", + "key": "1f8941fe-b390-4acf-aaa6-72079d441ce9", + "structure_family": "container", + "specs": [ + { + "name": "BlueskyRun", + "version": "3.0" + } + ], + "metadata": { + "start": { + "uid": "1f8941fe-b390-4acf-aaa6-72079d441ce9", + "time": 1753200031.7430956, + "username": "egann", + "beamline_name": "SMI", + "facility": "NSLS-II", + "tstamp": 1752211775.3666577, + "beamline_attenuators": {}, + "sample_name": "YCK_20250709_op_e_echem_16.10keV_wa00.0_sdd5.0m_t23474.1_x_2000.0_y_7076.0_z_2000.0_th_0.8_temp-273.2degC_ai_0.400", + "SAXS_setup": { + "sdd": 5000, + "beam_centre": [ + 746, + 1105 + ], + "bs": "rod", + "energy": 16100 + }, + "x0": 1499.8220000000001, + "beamline_beamsize": "3.5um", + "start_datetime": "2025-07-16T13:25:25.696186", + "proposal": { + "proposal_id": "317903", + "title": "Advancing Real-Time Characterization of Polymer Membrane Formation Using X-Ray Scattering", + "type": "General User", + "pi_name": "Gregory Su" + }, + "beamline_sample_environment": "in-air", + "versions": { + "ophyd": "1.10.5", + "bluesky": "1.8.2.dev1119+gfb1e9960", + "ophyd_async": "0.10.0a4" + }, + "alignment_LUT": { + "-2000": { + "x": -2000, + "y": 7105.626, + "z": 2000, + "th": 0.4 + }, + "0": { + "x": 0, + "y": 7092.411, + "z": 2000, + "th": 0.4 + }, + "2000": { + "x": 2000, + "y": 7075.913, + "z": 2000, + "th": 0.4 + } + }, + "project_name": "websocket_testing", + "cycle": "2025-2", + "scan_id": 971116, + "th0": 1.180005, + "data_session": "pass-317903", + "plan_type": "generator", + "plan_name": "count", + "detectors": [ + "pil2M" + ], + "num_points": 5, + "num_intervals": 4, + "plan_args": { + "detectors": [ + "SAXS_Detector(prefix='XF:12ID2-ES{Pilatus:Det-2M}', name='pil2M', read_attrs=['cam', 'cam.file_number', 'tiff', 'stats1', 'stats1.total'], configuration_attrs=['cam', 'cam.acquire_period', 'cam.acquire_time', 'cam.image_mode', 'cam.manufacturer', 'cam.model', 'cam.num_exposures', 'cam.num_images', 'cam.trigger_mode', 'tiff', 'stats1', 'stats1.bgd_width', 'stats1.centroid_threshold', 'stats1.compute_centroid', 'stats1.compute_histogram', 'stats1.compute_profiles', 'stats1.compute_statistics', 'stats1.hist_max', 'stats1.hist_min', 'stats1.hist_size', 'stats1.profile_cursor', 'stats1.profile_size', 'stats1.ts_num_points'])" + ], + "num": 5, + "delay": 0.0 + }, + "hints": { + "dimensions": [ + [ + [ + "time" + ], + "primary" + ] + ] + } + } + }, + "data_sources": [], + "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" + } +} \ No newline at end of file diff --git a/tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_stream_0001.json b/tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_stream_0001.json new file mode 100644 index 0000000..25b8556 --- /dev/null +++ b/tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_stream_0001.json @@ -0,0 +1,8941 @@ +{ + "event_name": "on_new_stream", + "sequence": 1, + "timestamp": 1753200033.6802516, + "subscription_segments": [ + "1f8941fe-b390-4acf-aaa6-72079d441ce9", + "streams" + ], + "callback_data": { + "sequence": 1, + "timestamp": "2025-07-22T16:00:32.921007", + "key": "baseline", + "structure_family": "composite", + "specs": [ + { + "name": "BlueskyEventStream", + "version": "3.0" + } + ], + "metadata": { + "configuration": { + "energy": { + "data": { + "energy_bragg_user_offset": 1.423, + "energy_bragg_user_offset_dir": 0, + "energy_bragg_velocity": 5.0, + "energy_bragg_acceleration": 0.5, + "energy_bragg_motor_egu": "deg", + "energy_enableivu": true, + "energy_enabledcmgap": true, + "energy_target_harmonic": 21 + }, + "timestamps": { + "energy_bragg_user_offset": 1753197758.784196, + "energy_bragg_user_offset_dir": 1753197758.784196, + "energy_bragg_velocity": 1753197758.784196, + "energy_bragg_acceleration": 1753197758.784196, + "energy_bragg_motor_egu": 1753197758.784196, + "energy_enableivu": 1753197759.208152, + "energy_enabledcmgap": 1753197759.208165, + "energy_target_harmonic": 1753197759.2081785 + }, + "data_keys": { + "energy_bragg_user_offset": { + "source": "PV:XF:12ID:m65.OFF", + "dtype": "number", + "shape": [], + "units": "deg", + "lower_ctrl_limit": -9007199254740991, + "upper_ctrl_limit": 9007199254740991, + "precision": 5, + "dtype_numpy": " Date: Tue, 22 Jul 2025 13:25:52 -0700 Subject: [PATCH 02/14] Add tiled code to docker from websocket branch vshekar --- Dockerfile | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 45a96dd..0b47450 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,23 @@ FROM python:3.11 + +# Install git for cloning the tiled repository +RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* + WORKDIR /app +# Clone and install the custom Tiled branch with WebSocket support +RUN git clone https://github.com/vshekar/tiled.git /tmp/tiled && \ + cd /tmp/tiled && \ + git checkout websocket-endpoint && \ + pip install --upgrade pip && \ + TILED_BUILD_SKIP_UI=1 pip install '.[all]' && \ + rm -rf /tmp/tiled + COPY . /app -RUN pip install --upgrade pip && \ - pip install .[all] +RUN pip install .[all] RUN pip install debugpy - CMD ["echo", "Hello World"] From 3734d3b7df75ab2a18d74a96121ebc3d17b78add Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Thu, 24 Jul 2025 14:58:07 -0400 Subject: [PATCH 03/14] checkpoint --- .vscode/launch.json | 12 ++ src/arroyosas/app/frame_listener_sim_cli.py | 7 +- src/arroyosas/app/lse_operator_cli.py | 40 ---- work/.bash_history | 4 + work/.gitconfig | 7 + work/.ssh/known_hosts | 218 ++++++++++++++++++++ 6 files changed, 245 insertions(+), 43 deletions(-) delete mode 100644 src/arroyosas/app/lse_operator_cli.py create mode 100644 work/.bash_history create mode 100644 work/.gitconfig create mode 100644 work/.ssh/known_hosts diff --git a/.vscode/launch.json b/.vscode/launch.json index 58ab968..38d77fe 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -23,6 +23,18 @@ "env": { "TILED_API_KEY": "32bf4b533d638f470270e0725d14a7bc153114641a7dfda58f96e7926160e9e126272add" } + }, + { + "name": "lse_operator_cli", + "type": "debugpy", + "request": "launch", + "module": "arroyosas.app.lse_operator_cli" + }, + { + "name": "frame_listener_sim", + "type": "debugpy", + "request": "launch", + "module": "arroyosas.app.frame_listener_sim_cli" }, { "name": "tiled_event_simulator", diff --git a/src/arroyosas/app/frame_listener_sim_cli.py b/src/arroyosas/app/frame_listener_sim_cli.py index b265166..a43166f 100644 --- a/src/arroyosas/app/frame_listener_sim_cli.py +++ b/src/arroyosas/app/frame_listener_sim_cli.py @@ -22,9 +22,9 @@ onto ZMQ, taking care of pydantic messages, serialization and msgpack """ -FRAME_WIDTH = 1475 +FRAME_WIDTH = 475 FRAME_HEIGHT = 619 -DATA_TYPE = "float32" +DATA_TYPE = "uint8" app = typer.Typer() @@ -59,6 +59,7 @@ async def process_images( ) print("event") await socket.send(msgpack.packb(event.model_dump())) + await asyncio.sleep(0.5) stop = SASStop(num_frames=frames) print("stop") await socket.send(msgpack.packb(stop.model_dump())) @@ -76,7 +77,7 @@ async def run(): print(f"Cycles: {cycles}, Frames: {frames}, Pause: {pause}") context = zmq.asyncio.Context() socket = context.socket(zmq.PUB) - address = settings.tiled_poller.zmq_frame_publisher.address + address = settings.frame_listener_sim.zmq_frame_publisher.address print(f"Connecting to {address}") socket.bind(address) await process_images(socket, cycles, frames, pause) diff --git a/src/arroyosas/app/lse_operator_cli.py b/src/arroyosas/app/lse_operator_cli.py deleted file mode 100644 index 2a1fb7e..0000000 --- a/src/arroyosas/app/lse_operator_cli.py +++ /dev/null @@ -1,40 +0,0 @@ -import asyncio -import logging - -import typer - -from ..config import settings -from ..log_utils import setup_logger -from ..lse.lse_operator import LatentSpaceOperator -from ..lse.lse_ws_publisher import LSEWSResultPublisher -from ..tiled.tiled_poller import TiledProcessedPublisher -from ..zmq import ZMQFrameListener - -app = typer.Typer() -logger = logging.getLogger("arroyosas") -setup_logger(logger, settings.logging_level) - - -@app.command() -async def start() -> None: - app_settings = settings.lse_operator - logger.info("Getting settings") - logger.info(f"{settings.lse_operator}") - - logger.info("Starting ZMQ PubSub Listener") - logger.info(f"ZMQPubSubListener settings: {app_settings}") - operator = LatentSpaceOperator.from_settings(app_settings, settings.lse_reducer) - - ws_publisher = LSEWSResultPublisher.from_settings(app_settings.ws_publisher) - tiled_event_publisher = TiledProcessedPublisher.from_settings( - settings.tiled_processed - ) - operator.add_publisher(ws_publisher) - operator.add_publisher(tiled_event_publisher) - - listener = ZMQFrameListener.from_settings(app_settings.listener, operator) - await asyncio.gather(listener.start(), ws_publisher.start()) - - -if __name__ == "__main__": - asyncio.run(start()) \ No newline at end of file diff --git a/work/.bash_history b/work/.bash_history new file mode 100644 index 0000000..31c16de --- /dev/null +++ b/work/.bash_history @@ -0,0 +1,4 @@ +pip install debugpy +ps +top + /usr/bin/env /usr/local/bin/python /app/work/.vscode-server/extensions/ms-python.debugpy-2025.10.0-linux-arm64/bundled/libs/debugpy/adapter/../../debugpy/launcher 33515 -- -m arroyosas.app.lse_operator_cli diff --git a/work/.gitconfig b/work/.gitconfig new file mode 100644 index 0000000..68b9f87 --- /dev/null +++ b/work/.gitconfig @@ -0,0 +1,7 @@ +# This is Git's per-user configuration file. +[user] +# Please adapt and uncomment the following lines: + name = Dylan McReynolds + email = dmcreynolds@lbl.gov +[safe] + directory = /Users/dylanmcreynolds/dev/scicatlive diff --git a/work/.ssh/known_hosts b/work/.ssh/known_hosts new file mode 100644 index 0000000..1824c38 --- /dev/null +++ b/work/.ssh/known_hosts @@ -0,0 +1,218 @@ +|1|oLQTBb+8Jr2218ocTQZExDA2p14=|h+VDGXBhYPQh/7aA5vDMJktjHCM= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCsxGw19ZL8EN+NZ9HhD+O/nATuvgZxcEuy/yXnGqz5wMzJj6rK7TsrdU8rdJNrhZDe3yjpCiKvqkbSKp22jK2/iMAeWDQvYpMgC6KyiNd0hztowtMFJEwb8gVmtkVioqIaf9ufJnOO0LX5A5J/4fQhICfbyPiX8SsjX0p655/kIm3T6hr7t89b4IkRu19/uWufbNaV/mZSFWl7asLKXJNTMhzEn6bsTcAqlm55Tp4NvCe1hvv6OY/vU5luDz09UDmnDfr/uukmVm5aIjtlZBGqbOe7huNJGIWhoGCN/SoArRu9T9c9fjOlRMOHcf0QYMQmxFQnR0TkJZQoJ5N+EYNUIB9dvnJs2mlN0ZEuUU0RwAUOge7RwujiZ2AWp/dV/PNvLGmDVUxiyXC0Uuw57Ga2e49hYisYU/J/NPp9AbHqO8M6kZqYdqWKYueIsM3FDti3vUbjV4J6sL6mOBbxuJpUhUEX5UXxGbR39hDVx9Lsj4dszu+mcBFnDNcpRCDjw3z+hDqdNNpzhIRlbHQErLBWL3vnn2MLnb/3z163gyRtu1iTuR5myBIs9jLDAsX94VbBzKWdCFe22x4Eo6HwB6u+UHlXov0fnBXtAmgwRegc1gQwxi2FXB/ty0q1EO+PYo3fjUVRRb4uqBBIvpFarwtL0T6iYAYgHY11vH9Z2BFAHQ== +|1|6pgLzLzkovLxCrnJoUrck4IcIp8=|WyH16xjYurzWSiM+Lv9ul+cOVnA= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCsxGw19ZL8EN+NZ9HhD+O/nATuvgZxcEuy/yXnGqz5wMzJj6rK7TsrdU8rdJNrhZDe3yjpCiKvqkbSKp22jK2/iMAeWDQvYpMgC6KyiNd0hztowtMFJEwb8gVmtkVioqIaf9ufJnOO0LX5A5J/4fQhICfbyPiX8SsjX0p655/kIm3T6hr7t89b4IkRu19/uWufbNaV/mZSFWl7asLKXJNTMhzEn6bsTcAqlm55Tp4NvCe1hvv6OY/vU5luDz09UDmnDfr/uukmVm5aIjtlZBGqbOe7huNJGIWhoGCN/SoArRu9T9c9fjOlRMOHcf0QYMQmxFQnR0TkJZQoJ5N+EYNUIB9dvnJs2mlN0ZEuUU0RwAUOge7RwujiZ2AWp/dV/PNvLGmDVUxiyXC0Uuw57Ga2e49hYisYU/J/NPp9AbHqO8M6kZqYdqWKYueIsM3FDti3vUbjV4J6sL6mOBbxuJpUhUEX5UXxGbR39hDVx9Lsj4dszu+mcBFnDNcpRCDjw3z+hDqdNNpzhIRlbHQErLBWL3vnn2MLnb/3z163gyRtu1iTuR5myBIs9jLDAsX94VbBzKWdCFe22x4Eo6HwB6u+UHlXov0fnBXtAmgwRegc1gQwxi2FXB/ty0q1EO+PYo3fjUVRRb4uqBBIvpFarwtL0T6iYAYgHY11vH9Z2BFAHQ== +|1|XkE6J1VmDGdUwqYBtndI31UGhLg=|MErdYzMrj5kiW2+54K1Fxl8YmA8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJhewbT3NACHwrXa4Fk6mMyEx/fKWRHB3X68lgynTKfnOsbgV+/PiIMK0t8IUnqQiyfZq1y0op0dSLS6VbeNQG0= +|1|ipFYNzQd4a97v04XAJO9Iha+h2g=|+ZFH+Pmjr1dIf8KPTUGYVe+c4D4= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHlB3v8dYtlwCfiMUXzhiRZ7g9WVGkG4PxR4poL0JOzQ2GuzKOYCCYhwIPCfZt4rLIgIO1DQDyH3xfdKrcEFzmM= +|1|S3Wauur3VtHMJfORQ77OQ8MpeH4=|735q3DTraOIFLfTH0VK21dwb6s8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBO/4L6ItJ2SWQNU/S1FxPwFzfJTxSaBFmCtZc6CwxZP5YlzIxH1P3QzPbGJFDa8F7/mwTmrU2xEsnmgDhjO0/ww= +|1|PNscsQBnaf8q0n1iUqm1Pg7jLX4=|OxOMtCuwvFZBZpNrkTZFQWCUZT8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKLwsepgXuwJiNn2yzqs4ya0r+vn0cco6EhSAIdXFXHmjnb18BjmyBy2vD0SkWEhmQd2pzyRDG9zztdPDzgzj0M= +|1|WNmm7RhWF/R++2tuIAxZThcofPE=|LgIxTHO3hh9JUEYRRnhyGGwbkec= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKLwsepgXuwJiNn2yzqs4ya0r+vn0cco6EhSAIdXFXHmjnb18BjmyBy2vD0SkWEhmQd2pzyRDG9zztdPDzgzj0M= +|1|/wYHBjzxZECfDHCegLo1OBVvhYo=|Olic3eMy46Xq+rFnT6vm1jh3Ugo= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHAY1h1zSs/H7YF/ZwYVgjT98V+CFWhegZeBdOQM/vqRa7exUC2iWAvqdJdn8jUTV3DuJ39L4GEcieaoZgstgMs= +|1|uISHxiURCZM4vraCMdrHVSTfUKI=|2dY8CV9j2a239O8uOCCfVcRzLOQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHAY1h1zSs/H7YF/ZwYVgjT98V+CFWhegZeBdOQM/vqRa7exUC2iWAvqdJdn8jUTV3DuJ39L4GEcieaoZgstgMs= +|1|e7CJjlUgogXTsgkJ6tu9jCnNf+Y=|xkcjgaJ7av8w8n/MruwvhnD9G38= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM/N4nhgFi1eAEbTeDh++XunjyJnqDYnww8TjME0M0m8UIgHddbR5IifCGYsH9i7BDHSnu0IshE5uyWBdclQd1c= +|1|EtKWx18cm02Hi6ejivlTF53c6gI=|cAZbXovGSz7Uj22sl/m1PZWYWJQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM/N4nhgFi1eAEbTeDh++XunjyJnqDYnww8TjME0M0m8UIgHddbR5IifCGYsH9i7BDHSnu0IshE5uyWBdclQd1c= +|1|vANa8YDpABD0Obi6t+jjqFiCt4U=|ywYEMrgPAVKvR/GY3Qe52Ax7P6s= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAMtclMfkkTXmtkuPK3Yngn10jFaBhFV0ZF83JajXyB/PoceKEPJ7umKfkXt1kmIVUiBAdoQKAxkU6Z3SzsB6dE= +|1|hg0Uf+ZrcKwtDNzD5Uh1Ykpjs0c=|CfVsPFCqzdTL1puNyJZZZZzOVSc= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAMtclMfkkTXmtkuPK3Yngn10jFaBhFV0ZF83JajXyB/PoceKEPJ7umKfkXt1kmIVUiBAdoQKAxkU6Z3SzsB6dE= +|1|+BcrtQq0HBw0Zrlv7g67nQlm5eU=|RpuKO29VLZ2O+QoiIDDqOD9rWXI= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAyMoWu8D8czQlhXxjrAKwis09qMF45i6bgZ3PT3h+2806Xm0MTOi1KuZGq/dgoavIXRjccsRbXIqn+7pNwMV/c= +|1|aaUzamZKlnSo0G9keqMkhMIwuJs=|SsBSiDJR+3Ou3a3SPMYEzlVjrJc= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAyMoWu8D8czQlhXxjrAKwis09qMF45i6bgZ3PT3h+2806Xm0MTOi1KuZGq/dgoavIXRjccsRbXIqn+7pNwMV/c= +|1|SRL+8UGymbZzRqMsGZYjSaMPIGk=|brD+29aHaBporEpCXf2Ra2Dr/FE= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBhojfVoCwUolhYtQVONCOGFganIyDN/DBQL5OYnep0AUOMZY4/gOGmGrd+FbcubmgIFLbypy1L8yulcXomBBPA= +|1|bzj2YaXmW2N0ribxMjLeBIV2NPg=|Xf1/OohXwkeo0KOvAhCx3UemBn4= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHlB3v8dYtlwCfiMUXzhiRZ7g9WVGkG4PxR4poL0JOzQ2GuzKOYCCYhwIPCfZt4rLIgIO1DQDyH3xfdKrcEFzmM= +|1|umkLQngyXlG32tVt5UnWoMoEl3w=|l1jJM4jvxgiDWIH3CjU41fskClg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHlB3v8dYtlwCfiMUXzhiRZ7g9WVGkG4PxR4poL0JOzQ2GuzKOYCCYhwIPCfZt4rLIgIO1DQDyH3xfdKrcEFzmM= +|1|0mStbkganhdcBvmjpAEJtQwP3YU=|S+qZOdbv2jIs0wXncK7v+ljtv+E= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHWDOZUjIodyH2EFSykUKkssg//iVloiiiYBVyI+v2Us5NBNoR9krSaOZ0DzsQQeJ/Im0BmCfSD536LyyOKSpa4= +|1|9Pq46p61AU3z91RSV1+I60cZonc=|EIzC/KZXedMTt1rotKrrMOYzEyQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHWDOZUjIodyH2EFSykUKkssg//iVloiiiYBVyI+v2Us5NBNoR9krSaOZ0DzsQQeJ/Im0BmCfSD536LyyOKSpa4= +|1|i3ybVxuRB+RU8VtFPpGgXQ7/jqE=|c0Tfs99FtJF2p2MBZusBcPIgwLU= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAIbubLUjYZpRZ+zNlZUSicqZyUtDBmbD8BrRt5LS1A1i9IvnJTyUd+IxUjcGwb9P3W3OIm/h6MjFcSd87VdeFE= +|1|9EEiZ40S6EsxwJZ8N3v9PqKXyZI=|zez/eE7aLVU338iJ9SkEo4MQAuU= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAIbubLUjYZpRZ+zNlZUSicqZyUtDBmbD8BrRt5LS1A1i9IvnJTyUd+IxUjcGwb9P3W3OIm/h6MjFcSd87VdeFE= +|1|2WllUfi6EPm7jTc5/dUYcXoMHGY=|zA2GHN7l5+GbQtCNY1ZEm4pcWM8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPcAtcgp6aBjQnXn7PgFbaXLJeg7jla7qHsFCUZD4dbZCkUhrmFSiI2tv8BsmeTIBT+2em7S77pi2WyDJB3NYiI= +|1|grkBrRGj/oA8sCzWnZuBNFl6qzE=|5Mszr2xUNsO3ucNRZ5T5n9PLAxM= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPcAtcgp6aBjQnXn7PgFbaXLJeg7jla7qHsFCUZD4dbZCkUhrmFSiI2tv8BsmeTIBT+2em7S77pi2WyDJB3NYiI= +|1|qnnxJ0xVWwbOxcRyOoSG4/RJyrA=|UPzObdC8N5Uq0qTzIyybRGePG5k= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBftMZAslmtXQgi97zBttEiN7N3IcRILReolKVNsh0NKC2k4F4XmON048L3vb+Km0vxEBWo72EslXJH8XuLBJmM= +|1|zqMg025+sCSSMzlacnrNCmrG4rg=|whh1xi90Fliq+as8iFnCtl9fjvQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP/rgL4f9OcRgSKp8Qlh2InGr1mkaEdCeN4GE5Uk8TyBxE5eMiQj/VdWMMUco68mOfphON8qQwo6wQemBCQ3MO0= +|1|N3+YD1Uss1C1QhRk3oeZ2jIuhsM=|wNwjkXbkFtsMxhmhJxA16ECMi44= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP/rgL4f9OcRgSKp8Qlh2InGr1mkaEdCeN4GE5Uk8TyBxE5eMiQj/VdWMMUco68mOfphON8qQwo6wQemBCQ3MO0= +|1|FBLDXNQQCdRe3ynHEcdbBuC3PZU=|+P3b3zex3aXBuDxpgndtC6/i1fw= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHrT0I4YXv+XGGJ0pS1tTOJ/IGipnHxInutATmZUOluVE1hyqYuXgF/4RNrTebd/sLMMjTUhlgjyW9iUnlWHeOc= +|1|QwxViOaqBsv0wTQ6MSImRiskpJI=|KjbMQ4Zk0bGjFReBvBImoSCLqhA= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBObvszHnNWm92I9L49m6tKNCyzr25CIhvfeTbjlbU9fM9t6jx5Vy6GyeHRe5OHh1M1s1ubj0w/+wmAiOYJlkiaY= +|1|N2zTAd3EEU+Xs8DxmtgzMOqLk3E=|FryXtv8e6l3m/rJELn18Vh1zoVQ= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== +|1|5z6xvv5dK0Vkxqty6tP/kotNxbs=|PoaxRadt5RHzXlN9ZFIL0NwNTmw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== +|1|ZbGZckp8bDw4pGPlsctFixLxRvI=|JXa755khBIB0ZnDJbUTxSj0AvlY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFNzVOPaTKYf9jRgb8kf8J7gUn6SXKFq0wHXGb+b3D4poH3EfumqVW3frKnokBXQSCCazBYr1bJBBYx1WwB7tx4= +|1|teTsC2ymON+MPH0slrr7NeuCnL8=|uXxnhqQeHiY5Dcz7OsO8JQZq7as= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFNzVOPaTKYf9jRgb8kf8J7gUn6SXKFq0wHXGb+b3D4poH3EfumqVW3frKnokBXQSCCazBYr1bJBBYx1WwB7tx4= +|1|VjoVwg4+EQ2axNq3ZGljX7OpGbA=|jpEP6hOgalSXA3jEpyruIA9GXNM= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= +|1|UWArgXiYT/Ts4ud2NhxCv7v4snE=|ledlDQt1Vle0gts5tZGelOtKRNo= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= +|1|Aw1CE2fECqqrAgojCK7w+GncRQU=|g11Mbjv7Ta5qPZKOy7lKAAKqulY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDfNbsZBeI5azDXigDH4rHG3AWUv39NHS3TqeZhx5JXayXk4NefB1vzu0YaLQdiJNb/wpFtWZvAsT72imbwQhq8= +|1|64LeD/xdjAO7rCrLJWP9jN5mx14=|fTzg/7loMk76khjvDmkKtzJcaMc= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHCdkn51AYQbFshdCe05ihCqsi2r1uCc8PMejcYbOElbAioII3EuWRu4HvbhphFO0GW8lRVJzQK2oZuqs2a4fTk= +|1|4oO9qHb4a8YHexH39VPe0cTsWwI=|mSjl6GgVKItb2ddp7A4v0Lm2T9s= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= +|1|gXT1JHjJzv0WS3hRSPU3uZuroc4=|KMydZo4sEAg19HX1QYJwhoPoUH4= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= +|1|n7wko4uyvHLrqUkSsg7E0WBrTbE=|Hq2uTJrN9zYmSARmhlumCcUY58c= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNdmMZocd4wveNmOP3GisN09VLbA8jk+dgnhu5eET5lM5PCCAL+ncWKNS0eoZb80Q7AHdktrKoXIxIQBC8nH60U= +|1|U9elZyav1pcgeEp4YDt1Mr/41LI=|kJCaJW64c4KD9FIG2HbEzstHzLs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNdmMZocd4wveNmOP3GisN09VLbA8jk+dgnhu5eET5lM5PCCAL+ncWKNS0eoZb80Q7AHdktrKoXIxIQBC8nH60U= +|1|6wHA9HZZShTuDxmOEuFdS6bUGpk=|/JYFZ/reIj+JtNXQNNVe4XZ2ATk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHWDOZUjIodyH2EFSykUKkssg//iVloiiiYBVyI+v2Us5NBNoR9krSaOZ0DzsQQeJ/Im0BmCfSD536LyyOKSpa4= +|1|TCRy8iVe4QXvSYClMza2Yfp3rSM=|UmxpGVFxy8y8nxueW8uugxhXSqY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPB5+pBnO8jrjwSzWSWnYcRief8Shq7uyQk1/VD4EWz2fv7VtUeCKM6Mi3GKsmug98cOT8YW42YJRHHNFmAUL38= +|1|Ja7Rq2sYfIgBx4ZnbsqW9GDcd/E=|Ua4M0WsyBEnShPIJ5Iys02cgv3A= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPB5+pBnO8jrjwSzWSWnYcRief8Shq7uyQk1/VD4EWz2fv7VtUeCKM6Mi3GKsmug98cOT8YW42YJRHHNFmAUL38= +|1|ibII59MpfbqPb4YmUqfvas25S6I=|5d4n1PGeB+jZwHEN+i7DaNMCF50= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFNzVOPaTKYf9jRgb8kf8J7gUn6SXKFq0wHXGb+b3D4poH3EfumqVW3frKnokBXQSCCazBYr1bJBBYx1WwB7tx4= +|1|hhWQdOwz1WGw0UhwPdS7BYhbtYQ=|vsOhrtHT3Bm1wYxFEMgcja30B9g= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFNzVOPaTKYf9jRgb8kf8J7gUn6SXKFq0wHXGb+b3D4poH3EfumqVW3frKnokBXQSCCazBYr1bJBBYx1WwB7tx4= +|1|UELXjPq02100ptKuK9Y6qMh8hLE=|sWGtwbeTUxRDqJEM0GMbvjXd8jg= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== +|1|fbZPpWmk5J+1vvITE89isKtdgng=|61DbUL55x637uVoaRbA9LdAhWpk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNdmMZocd4wveNmOP3GisN09VLbA8jk+dgnhu5eET5lM5PCCAL+ncWKNS0eoZb80Q7AHdktrKoXIxIQBC8nH60U= +|1|kAFz5ftLBer/1hd8MFGtv67tbHU=|WLxHPH9uTp4gkKYvDBqErfftsOg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNdmMZocd4wveNmOP3GisN09VLbA8jk+dgnhu5eET5lM5PCCAL+ncWKNS0eoZb80Q7AHdktrKoXIxIQBC8nH60U= +|1|8KvP3PflsfmVY6ARGXmBlfA4nEI=|FRJW4a6kVZbZ+aImD+FWu1+j9sw= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGFCN3yy1pPzoeCuxF0PFS39TnRHA5txt9gxjw21Ge3K6/RwtvStyvMuBu5Ezj0TiehLBIjS33T1HJMvGHKH72o= +|1|7zW6yfhY8sRIqDKUEMU1ZKli8DM=|cbPtJeRKH8hgNBdlMO6Yg3ou1wk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGFCN3yy1pPzoeCuxF0PFS39TnRHA5txt9gxjw21Ge3K6/RwtvStyvMuBu5Ezj0TiehLBIjS33T1HJMvGHKH72o= +|1|q2X8cEvRemusgd8i90E86MlRiHU=|lX2EmXUexGk9WTSLAHl+EudfJ78= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB+LokNTenJdckPQZ+iPBc2awmkWFCQdFL3AJ9bgfHXIPFbMztJu5g/hjbB5aQdPudpxv1CrpWcyyzvgmb1qdVo= +|1|wUDCT/vVTMf/lQSqej4cQWAUA7M=|X3XwQa1OnLeT99ycmB171nG1e4o= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB+LokNTenJdckPQZ+iPBc2awmkWFCQdFL3AJ9bgfHXIPFbMztJu5g/hjbB5aQdPudpxv1CrpWcyyzvgmb1qdVo= +|1|Zt2oEyNzQZX+X99ZPUPbfkJuG4w=|02QqzClYjTfs7RMNgaTbpqnIqo0= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOf2slGQs78P/qBCJv36sAAEN544s6fsiKeZfTswDx+GYwNSIrT4H536pyjDi9xL3Zt8PhVHNuXS0EmHrhKGQA0= +|1|ZBeLquLPBizh4B49W/rx+qWQ2ZE=|5/bu6qC5odfr2rh1ES/7oRchtLQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOf2slGQs78P/qBCJv36sAAEN544s6fsiKeZfTswDx+GYwNSIrT4H536pyjDi9xL3Zt8PhVHNuXS0EmHrhKGQA0= +|1|cNTW7cBL/pabsixmTWrHERspR48=|/9olIR1rxd87+qncnbTh5AunUl8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOf2slGQs78P/qBCJv36sAAEN544s6fsiKeZfTswDx+GYwNSIrT4H536pyjDi9xL3Zt8PhVHNuXS0EmHrhKGQA0= +|1|YDOBwhyG4/SrbCnvAitax6Jl3cw=|8ryF3xT+krDs5IFJFlhV62hwAzs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHIOmwK6H8uKrKmV4GlKlDAkAUbJyUstYn0ZGD59U1X5Tkrxc84dh5BEIxAtR49YUb09kPzUQieKHPdNZqiPNjw= +|1|6QXFoikMw4uNl4zS4wfsPAX2Xbg=|E0RnWWhmDG2ucaU4teZiTgKhTGA= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHIOmwK6H8uKrKmV4GlKlDAkAUbJyUstYn0ZGD59U1X5Tkrxc84dh5BEIxAtR49YUb09kPzUQieKHPdNZqiPNjw= +|1|PsRccDFS2a2TARaDQ23kWHF3Drg=|JX4bIDXMIFjHk2vd92E3oDf+wEY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHIOmwK6H8uKrKmV4GlKlDAkAUbJyUstYn0ZGD59U1X5Tkrxc84dh5BEIxAtR49YUb09kPzUQieKHPdNZqiPNjw= +|1|2jbzcaFnVOT7DLqLEBOb9THLT5c=|O2Uhkl9Qacv81bELl09jh4tTs4M= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ3+krUkaqvkhSeJ3i8zztEm0NUAPXeRTgnx6eB1PmT1+HubDgDkUX1uLpzxkt2sd4BuY13bxz8lIWYRPLv5fxg= +|1|hkDAjX0/NJMe+5eF+glqk7mCE4A=|ZYZe/yV2QD9rSYxyupYuZ0grt64= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ3+krUkaqvkhSeJ3i8zztEm0NUAPXeRTgnx6eB1PmT1+HubDgDkUX1uLpzxkt2sd4BuY13bxz8lIWYRPLv5fxg= +|1|73IeS+4ApoLU9PFYtk/CG1OqhC0=|zU2bMPayJ0fCBKUuDazqLmE3XTw= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ3+krUkaqvkhSeJ3i8zztEm0NUAPXeRTgnx6eB1PmT1+HubDgDkUX1uLpzxkt2sd4BuY13bxz8lIWYRPLv5fxg= +|1|lhBvPbzJ0BmSRkJ0uUgaezxSdB8=|aoXqJPab0oRBtoWN/D8kvA6qjDs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP/rgL4f9OcRgSKp8Qlh2InGr1mkaEdCeN4GE5Uk8TyBxE5eMiQj/VdWMMUco68mOfphON8qQwo6wQemBCQ3MO0= +|1|sFp2uGn8J/Vf3wb5dE3WJFZDG0w=|Mm1gFAh0DtsmE7vZZrY5rhrRjNk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBftMZAslmtXQgi97zBttEiN7N3IcRILReolKVNsh0NKC2k4F4XmON048L3vb+Km0vxEBWo72EslXJH8XuLBJmM= +|1|FyqsJRPsN0WQEdmLgRnnbyocdiI=|Zu5EEWJ+mxUIHKzeUDG1qFlC9vo= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== +|1|ICI740nkLGR1E0eGaO/8ZfVXo44=|nVttxOe5qIkQFEdFdEgd5IvV3lQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP/rgL4f9OcRgSKp8Qlh2InGr1mkaEdCeN4GE5Uk8TyBxE5eMiQj/VdWMMUco68mOfphON8qQwo6wQemBCQ3MO0= +|1|rL72DAW3AZLdebWDc9pl4aw3SLQ=|O82i4pC1VcouAyhPIIp3AMV3z6I= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== +|1|EUMnkvjtvnbLjBUhg+7OguriQYk=|9K7oLGS2vVP5SAMNyJIstuxj8as= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKHwDjgt/Zt48sEvtjrVoVlLJH2h/2H/bRhAkVmQgQTMl1Y9XKzs5h7LNHtI3Msq7Syy/34s/4D1uekE/PeEVM0= +|1|2/jEAFY7D1CcyAlEIw5DJbRda+E=|Tf+7+oqYSXwCCa3y6TwXmqyxItU= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKHwDjgt/Zt48sEvtjrVoVlLJH2h/2H/bRhAkVmQgQTMl1Y9XKzs5h7LNHtI3Msq7Syy/34s/4D1uekE/PeEVM0= +|1|G2zEaxXc0OmsH70Dif+ekxY4k2g=|ig0s7xxZ1T0ZYhF7QZ547ostxuc= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCkK1QaseDoGfW37ePp/9cpb5fayFqFiARt176u9y4FvcWKtkndal0w2qcYa/aiT6PXi7pGXzrUNhuGkhyYnFDA= +|1|Pb32AOsEHq9b7HXaPoRWw0MJe00=|UML0v/6LSgw1/SsvsWzF3CGS6Vo= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCkK1QaseDoGfW37ePp/9cpb5fayFqFiARt176u9y4FvcWKtkndal0w2qcYa/aiT6PXi7pGXzrUNhuGkhyYnFDA= +|1|nAsrypb7IhFsysiDQN7xzv2pqIw=|ZaOc3/WyEGuGleXOw5lF+ZfUMJE= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKHwDjgt/Zt48sEvtjrVoVlLJH2h/2H/bRhAkVmQgQTMl1Y9XKzs5h7LNHtI3Msq7Syy/34s/4D1uekE/PeEVM0= +|1|SRsBRKCCfXmmZ7Ujzk/wQPkJ/fk=|B+FHEx8PTqcCJoi4wnEidqJf6t8= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== +|1|zqnOzuGdj9kWT0jGc8Fdt+OuY1c=|1yI5uUvz+ow1v5ppVdZ+XExaQds= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== +|1|U3GdhG8t4Z3fTSu/lyokB1M6egs=|7POfk5ArvJUQCtxtKi6njKOVZOI= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== +|1|LujDJmpQE/K7ESBe45W90EJuRxI=|noaCbM3NrlQevWiNQosdckno0Sk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP/rgL4f9OcRgSKp8Qlh2InGr1mkaEdCeN4GE5Uk8TyBxE5eMiQj/VdWMMUco68mOfphON8qQwo6wQemBCQ3MO0= +|1|2xEIhm5VLoJH+Oz2z8+V/IThkho=|ivLLB8e3oxTXNwn/FeiJZfVKs40= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCkK1QaseDoGfW37ePp/9cpb5fayFqFiARt176u9y4FvcWKtkndal0w2qcYa/aiT6PXi7pGXzrUNhuGkhyYnFDA= +|1|1yoJiW82Tb0xMB7/JeC1w3G6I5w=|voepd4IKw8dhL8MgykSTSlHI1HI= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= +|1|UWVb+icrp7ny52/DNHQ5eQ3jHVc=|G1DqVwJSz7vxUR1rpn+T1WwptPU= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= +|1|3L/hJKbuWId4maRoXKMWU85GwdI=|mZWnnrFxR7/Wb5TfUb04K0qUhc4= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= +|1|5E1HBtOcHE5KHah6W3Wx1oBtc9g=|o3vwa7Lb0C/8Mcuyn+/cgPO7btI= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= +|1|q2C1+zn46BEYQLxjum2fsqtyJfQ=|h2wpdoZL5kqSRmaRbQRQsMXL8iE= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHIOmwK6H8uKrKmV4GlKlDAkAUbJyUstYn0ZGD59U1X5Tkrxc84dh5BEIxAtR49YUb09kPzUQieKHPdNZqiPNjw= +|1|0SsmWOSoMIY/U7Gm+w6+M4WWugE=|/LPM9biP8UaZjZuSeHGshIOBH9k= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHIOmwK6H8uKrKmV4GlKlDAkAUbJyUstYn0ZGD59U1X5Tkrxc84dh5BEIxAtR49YUb09kPzUQieKHPdNZqiPNjw= +|1|PMy3Hu134U9vhGtg+LWUVFt3Vm0=|pj1Ji96bOa7+9Vb3VFBhWMEs1wM= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 +|1|IJOCC/UmFGyZiJgCFoVXhFtN3jc=|kM4unFFbiR3KeepyaQjzoOK+ZIY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKobTkssam7CBtB2RDTKJ+ibMHLX6qFC5qaAsVbsIWnsKNDrDhhm/c2VMwGLi7Jx+1QRzampOiAwSL95tHMDIhU= +remote.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Znlg9LWle4Az9Z07yNYuoLFZk3TQK8EnczAIFVEiiI4i6nxpzVPb6Oh2VmMqsxoGeufPg5KVsJNvCYvZsl0bzOzgujydUAnoCYjeruw41aOPaz5vbE4CYZAAlYQDw4Of7VNiyq9tMoN2NiAa3qFR/46SeejOE18ioERDWIkIQ0f5+5FIljjq3kCFyGMygx7VhDHduS9qYFyb/yjWvR4lntC2QeznfmFIGsEfpOctchd9RzS4DSFNf6Dz4dnpGYyy5A86SJGx4yzSef0agX1E6MrP8ZNk3tO9nBAcNvO5MmXOpVqhdOxRqw5fm4iZtP4tCNK1+KpH0BjQWcqOjJuX +bl832viz5x.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHaV0vOQVqV0Sj6V0u0tKTruCwIfPjwNf4vec3/3PynW +bl832viz5x.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCiDJLPAUDw3kPGyNlJ90XmHuIgN3s/Pv7vQ76VfLYSa1gZEKhyIupCmmryzeYBAet29jA7vwtQG1Mq1v9gZNkUDK4AQUBbxb/yrEPytlRUdy2/22o5U/WIexNlfJujlVy6xDivWScmN1z7pZsh84HbwPMtAs4DRtLinzaHl2d10INHq0OaTtNRk+Q5qyeZ/UHKRqzTCFwpG0ItlMiJdzbLXbUvnHVfUTPppvfWg7qu3VlrfBmt99ciOmElVugbacc4e/hZHw/d6e1wQw5IvpKOQEpNXy2VT7/qkIzEGQVBo1pbC4FmZ5g+uixQ3oTthmZO37cMdT0hk9tZBSx1nDb9 +bl832viz5x.als.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKjxl2e9/aPSU5WTQifxyXEbMs2h4I8zUUUMx1LR05gk25wgLD6FqOiynWWOGmXXeQ+mqOQSGfKkdbr5YDvDZbo= +131.243.82.233 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB6cYzTQfymXWDn9cNcoTLRFOcFgfonxvKAc4FuyE9NX +131.243.82.233 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUE4ZSzUvyT7Dnr51B9DnK8TkWhmsLWfuykJr9fFlgvTq9FYE4nGzasYXOcsbMj9UQIsF5AxVYZFKn3ADG5MCndudfOFkqLWKt23b40QFr1IDhSDMKajgAm0qQYkAS9xGRVcrhJ6HOPY/rxCGRF6/62S+cgTMfhzmmW10/DbPbQyLXC1VVxs44fMesM7sxQfDQpiy01xGnKm8kAVGgN8Bx0bAu18d6+KSyK318CnyLvyjESSXQWmwoNjfMr606VpwCWaVe1eUZ2Eg3FiZR1Hm2UB75QTb0EexZe+Qox/ehPwdggO45c91WJW8y3hob4mxTZyFn/Lm297Q/1WjAFtyX +131.243.82.233 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJFfc4BdOFbgnses3bcGoZNiY+TYjxsyUEIZMmeGCipB7qBUgM7rx8jlpicD7YR6VInMKEVTBKYZ2nimvQZ0wyw= +bl832viz7x.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB6cYzTQfymXWDn9cNcoTLRFOcFgfonxvKAc4FuyE9NX +synology332.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFPPApO/SLT93CBqZTvSU1E84XRXqVYrblfq2OXsqLwL +synology332.dhcp.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAJQxxpE+Q7cWd2/zLja6iGcTxTwZrvYhzcyPUEm6k+4h0hThXO9ch0EbUkqvlqYxz24uXCUY87+PuBO2ZcWjxOHHEnQTekgrkHXEY9htIn+O93GhBEkrZtjJwg98WIX+aNYGvNxtHoBeRrTFjW3Z/Ob8fq7ooDBmYC1PeoWn1/rFHhuWOTBhjY1U/AwHOsisWFhU+H5BdGdQflIlNRH1uNAwEoXskQ5vgNJfqB4yxw/2IoWkGrKC6wAYbBsfVIFK/dxnltnjKc7eaL7JOee80eci1RJ08jNp10INAZW9WEVbIpSr0EvllyZfneJuKQwgx6HbEvFbwGiuBEpf1tlS+QEiUYhlYSe5bkNfVA3zWE+2yBkl8eBUkphFc0wspkAtJk7sgsCLYe2q/ZHue98a1dtuIkVu5+Zz3QcUgffnNzq2G76sz8C8gCDz3rATFnTFeFLReC/mM56K6QgUbGJsnYkpcx382iissZ19v4ie4ouuLFGiF1h55J5a0gCEH+FU= +synology332.dhcp.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP2QKUNuoGUiGJR1+jI23wx4JMZuAKUg5wGdJyrS/klVsOt3BAw+l3OSYHYa2AkHa3zT9jmdxs09r0G9HzHcg2I= +perlmutter-p1.nersc.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDRDn86LRaU3Hl9E+OTwHtyLhLRvjNCF3e/LAuRu/Ms06FNsXTK1iIb3QMnWjzzFd4CwQwrKYZy9umHIJOyCW/SbEI4GRPrr7NJpVOvkGKVBqSo5aYY3LhqCqKgsX7lbnhwAyvYvHoy9qd/XyzjUMwvUYf1G0dmkIN4AGauEUysn2ixgfhi6+sODsLI9fNrZftnTpYecw2NPP7cn8Dwknh0Fw3450FaXZpUryghdsZp7VvtGwVjQYy5C2PFj8GKqoPh5pIrq4R63hx0OmQOQlRp8cSLtElx1vNzbTRMh43Te3/SJQ66h3sG8AgsPejJgPYEVKJhLpC8CQFj3mQFygcBcp5jOfNnEH2PWZ2Xmzi1p3qrtj01ZML6tIZX9GSdIPif0N2/Zi7+h2wsC+/d4gWdHwX0wQ+o3gYVCKl1Ipf3HJbQ+ZkJ+SecV81nWmu0sGP5nrKALYrQjSwsoO1yFxNhzFk0+XztFoSrMVsfLGG0n4ahTc/yJdB9/VL2/TcujiH+u64cDE9HhOw/JrHtUr13KC/0giaSc9qbjjdhKaXTDcdz4v9NCCqa6jb9R9+MDuufCJy/hOvvYqg99iCGAS+fKPvxJQ3byXOmzZ/dNVw0iz9jQdyTMISmn5BW23YQBtu9RbA8uvzhlV5vsTjtjadbVrWx4VEFgDLtBy8E0kACWw== +v-als-rac2.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 +v-als-raccomp1.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 +v-als-rac3.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 +v-als-rac4.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 +v-als-rac5.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 +v-als-rac6.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 +[localhost]:54100 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGNu/cTu8uiDHOOseEJNUV1r7trl0c3MOJXSxzaotrQo +[localhost]:54100 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDBy1cBmEP1wpdXyfUhyaczXYDGUHj0zo/1aynOfKlF7de9NSXjngYWpXFiCFPqT8wOop9Pg7YojO6Jtv/PrxUSXfZHSBdj4Jui8ADP67RhL+V0wAZpUTQ/DKF1eLmh71hcC+3s7NnVNNNpLiN0wjpT8RM3NBl2RBrbItRaXzqPrd/hp0qRWqZqRf8K2fCIUVq1loarsuP9/zacgLPx8eOrbdERMtxYdDpXOGSprt6wni19PLGEXnOYfOTwujkNQ8jbQihkJmMrnm35vrkwiylNYkpcfneTckRHcT6BkVBWM4PbIHxIJzfXq9WKLMI5JYKB7FfTlkvD5cJFY+/L11apHBCwj0ZYNIFhByGtLb1/EZxzsZiilmAVcg9kmcqg/tWdxKWM69BRXGkVk4gYN9/vvR4xmm0NNS7FSIlotn3vb0coYtGrAaZWCj2/r7SZ59Sq5FHz81vlqAauKbuleSThlED5S909VNkKR3XFV7/XfaNvxPSmm8J/9nEST/0345U= +[localhost]:54100 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGLhGCRSWGKrzLnhN9G4sAj8mNnCjkhR0qcnaEnT+6iAkQt4lFQEkYrHozfPweM9/z5nU5CPL0rkIiK7osszw5o= +lovelace-als.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJDNxI+uGlS7g0JYSYnrJl5d2aToFELb4E6jJsu5mGl8 +flow-prd.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILfypojAQ5RAOIALr0Myjmj+q5kNxY1aqEFOlVYYvmzX +v-als-rac1.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 +github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl +github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk= +github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg= +saul-p1.nersc.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDRDn86LRaU3Hl9E+OTwHtyLhLRvjNCF3e/LAuRu/Ms06FNsXTK1iIb3QMnWjzzFd4CwQwrKYZy9umHIJOyCW/SbEI4GRPrr7NJpVOvkGKVBqSo5aYY3LhqCqKgsX7lbnhwAyvYvHoy9qd/XyzjUMwvUYf1G0dmkIN4AGauEUysn2ixgfhi6+sODsLI9fNrZftnTpYecw2NPP7cn8Dwknh0Fw3450FaXZpUryghdsZp7VvtGwVjQYy5C2PFj8GKqoPh5pIrq4R63hx0OmQOQlRp8cSLtElx1vNzbTRMh43Te3/SJQ66h3sG8AgsPejJgPYEVKJhLpC8CQFj3mQFygcBcp5jOfNnEH2PWZ2Xmzi1p3qrtj01ZML6tIZX9GSdIPif0N2/Zi7+h2wsC+/d4gWdHwX0wQ+o3gYVCKl1Ipf3HJbQ+ZkJ+SecV81nWmu0sGP5nrKALYrQjSwsoO1yFxNhzFk0+XztFoSrMVsfLGG0n4ahTc/yJdB9/VL2/TcujiH+u64cDE9HhOw/JrHtUr13KC/0giaSc9qbjjdhKaXTDcdz4v9NCCqa6jb9R9+MDuufCJy/hOvvYqg99iCGAS+fKPvxJQ3byXOmzZ/dNVw0iz9jQdyTMISmn5BW23YQBtu9RbA8uvzhlV5vsTjtjadbVrWx4VEFgDLtBy8E0kACWw== +franklin.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPCxtA5uLx1nEz+O2eywalOsOsV3yaYVkxxHQyk+Y55u +franklin.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrS8+YYTPVsYQ2NA4H9JGsCZusnubOzFPusm/iag4J9Z8anLsJYHeLeLmpWmJ8URc4JH843qdhHi918utlBUr6Ierjxp9b7Azcqj/804CVtHDhW3ABJTzaLOta2xGFP2E2AeOeD3dkQ1DFbr+wfclahkVYbH0oK6KsNS2MCspDZ6BJu8qed5czwQPCr824uKQbAvS41aQWKREDLHRAgzZ8tVhz1f93b1CLfcN0WgEGm1BKqCgDGCExyqWbVi9nSfNPrPR+/ChDVXiOMmow2yargemyJEtt4Sr7gY7FnPOF3+0kYVZ/fQKU30PhUb8/ZhriSQKJGLGQpdTjTipEZJAdDtOaXvDWD++i9iYRLsiUKn2l1Y3JrC4fR9v9bE7r7ngxtrC1Hwc4zXskSzMsSGvBAYi4PC5mxf8rR3NsA9n84fe7XvxworGyX+UWJO7XL8YrlCSNebMy28t0BoIwEg2KQn3+IC3600oVTstvg9MpP6XeGdqDQ6TjZeczZOuk67c= +franklin.als.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAKHzMUjQMTwzDn2YNFMdZ17/R7hX+RSJluSutgWy15rMU9wc5bdAOSkJN3BT1W+7vlKfzroszC8V1ERcRiwm1M= +lamarr.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfz0l7TRR9dwXdPZRVTqkOFQ3ChT2fIoNeb5BuJtTkf +lamarr.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCsgU/h61zIwsxdBeAyZzxjcQWZJ86JgXMcBNkbX2cP2t9CgWKWxlIN4v/veWL5lPO4Sij6uFzWXnAm4JqHK4t23qJ2aXPzo5YyY863qNVbJh7G1sYbkqBOmTDI1yY7Of8RVSa4GmIU+DBcrVfJcSzJIWrQm7XI0KIIj+CSu4N1hHAViQ2tlTw2rklwEGbXfnbjzHoDuxJHCHumJaYzQvcA2sg2mNiZnQrbrBPl4WXp8tqwb8sSeswvkKJsdMrUyT+kCQxLZM1TNOmCf2hdn1en55LgNxBQLOj8dA5JTzoePwDl7u3nlVyqRTOO0sGUof6lOholR8gveV/2pqMISXtU9M84x41pBrC3FD1rp5dgxaDkNjv9IUkym9hW0IZR96bFgEcpiwBe3iJwB9gIW9gBXQpMXzAK3KsHUa3Or85JjAVjh3HpJKp6bLowwOZshLw7BH4USZlVnNMwu16rNMxwlSwkcbNMYc7hFTBqEIGDqPhO6lCZjGbM5cLRDGC40CU= +lamarr.als.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBApUPo5RUh8p6ud8FZGkm0HM5cxwbGQpWkfO1+AAcKR2AjOaqm66jrGN4ng/XX4VifqVLGVyQb/oDQ2uq1wCB6U= +ochoa.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAVyt8IG9RdYHbu9CIbQ+nmYFDtP86pkij7CTj7oQETr +ochoa.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCn2DSKeBD3DYx8SzfwVc0fisHcvwCjtkt89JzBS/BQYERIUbEiN4K08Dj5V2iMbg39oacsh9quXHIJfnK49YTR2B+yqiVg3xvxu50UC+YzWfaRzGVJltrivHyI0grvzTlveCVcs61LFieo21KyI2YSJukUhVKKJX5aJ6WbKkFeNoCbh0VkcdlwLl05z7Q9iQMTmsas5FskhghamMaCNKSnShONI9UT8QXQBjM3xvhLubW4w0V1bqfRpEXMJcidWfvitV5fR3IQ/0FX/EtvHHZ2Yvex/8KR76clcPdP4I8V9j/ruU2g5n8q18uSSCIqBo2KXCL0ew0QdK0xPBom+sgUEDh4m1REP3xS5ydyypFuES5F6RiG119Bro3dgklhBPeq3mw2T0BSUsnM3OCQbHrdkUCOVnJggy5cEsVDA6yBvagXozQl95TpUAiASZBgojM+HGFiuO1+OmrA1dIBsXspjHX8f1o8cFB2ssNppp5xUBVhrYxMKQ9j9lxqEkMpeR0= +ochoa.als.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGWt22VlxD83LzBnKGLHvyh0OlPRh1+nyNOC0vro20TYbR9rMg7hqwjwFxQzVrB82YEVKKIfHLKIGEG0ZnQ1sDU= +[localhost]:64031 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICULZSKozTfldOUE6NPRjFfKOrHWi4fBs+UGkLHqnnl8 +[localhost]:64031 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDFrhe2Ck4/kqfJN082qGBOGwsL+FcXmT8CHCbn4bOlCXTlSJlQTf1pJfUm9vqHDXs/oHPpUkMVlmjbEmyTfdTJVy2YSMBM4tsQK2G0+YmCxmz73CNYhN1R3t2vqwL+5DWVv1Kij74jC57KLrNVk2OBlNq7VL5+DEx2BQDa833+RNdSq+OmD13xoTI/XGW/YtEDpc+sGzPX6/+2rUL6Y+qUoUFzZZKXNt0X58CDSl4SCv1IQRxRP/RhuoDlmeLxGWodYQpGQNX3vPb0dmkhu0jAmuEjLa9MQIqBYPsJWiM8Ng+piVQQPunkiaNyCvTnpmyVhx/359xHUjwIV/EsnpghJlx29oNZJpXPFcV7KCSKeqADyiFTiJ6Rur9ogQwEpKwDu2G4v9LlbCWrMy9shIIXcrR1sg70Ojc722YbQYLhqP06I2Jg0h7mZhGsbp7ze3d7UHTADp7Cd+d9hkLungRVWNIGt1gx7ZmiH85+S1/tBzhPxYD0ehioXKBxYUcTBmE= +[localhost]:64031 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMCyxONjlpjBh69dg57l1TCoQKCTjJjeleCOa9ypCUER9VAUUvvzP2cBPMgYvmGTZ6STVtsx7CoE8aUIw6Qx4ow= +[localhost]:50606 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP1IZ+wx8552etEN3SrSYa6FUdiCQOiAlS7OpXeeRkp5 +[localhost]:50606 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmCH9YSeVyuVQTegkdEaC3p943RIux59YI1mtcdKHP2v1FigBU0c2bQ8NyKHv7miFBBEBvb1JRWagaP+2e/Tg9PCpHABaKWb63qymCr4zKhvzIr0/lCtrAv+Q0XbrihhG0F/vXkW2bLOGrCNyZplsj27lcSZqqes0MIt9P2Pjy8FcopBojYgmt6fYTVFvgxvvVo0UVgNTWXmDIrbIN6ijgbJEgIknRalfBlM8l9RaYMaCpwNqY/L+lK56W3UsBEdj2Gipg5InBigZtNAsBvtmKmksK68Pzqv7ZfZnYH6C6tuCVX25gRWcsl2yF8gWVk4OUE3qYCTzcUfaaJYE9VWnqML0pXwJbtw+DbGgvRzdZaSL5wIjn9VC8pcrT50n13/vFR95bdzUtArVUgmLulUqb80vwFsnX01nvbqGLAGMNZi8NUwEWzk71dSvJ8j1aLNFyQ3dfcpq5l4HHd8d93K/xN5iqOy4ZRxeMITxAoqaw0g2PnUov4eP0J7JR04KuWIM= +[localhost]:50606 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF3zhdd/D2IJbaa4JmxJAJjYndtOZGeFylm6hiTSS0e+zP2QmIh2fshw0/iI2GJ/wqp/23frzzK0aNYo6+cCuP0= +[localhost]:50643 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGyiavIq0sORWUuJYWvIhM4Yv3qGN1yWuspCp/mWPXNy +[localhost]:50643 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7D6aEI/0imJdSPOSIGu+IRX6AnUIoM2hOtAKWtxiUCBNLrpWRv5RoMAaeIGRmoGgia006vS5b5gIDidO4ozPGjQNT8kXQr7aVfpny6gCV9Fz9bY1KwFaxJW9XeReAnEVGSVNrNe1ZhZFIU0c6GoxPaKodRl/zz0Wcz5SGouIMBAfUy/OriBZYXBttT2u5rczPAS38kAxUjQ8dJ3GzEUN6QaWbaBSBEpBAuZ/s6zc5AkJOtmwfYgN84IBgd95EQ9hEh5mUjDnDuE/v0FSd/4vJlRihs04hMDhz5YYGalPy+XVw6Et+9HyHxAmLTK3+ubFeFEF8YRoSEXBDTm6FF50jjiXpC0XxEdlRhGP3iDd2eAiGCtKl7LD5pwx2MF0DKIJn44iUs1rWe3d+aWGHIZ/r4nM7oW99i0+G7w4dIDTcElUoAG6HYV1jRfTUm8OKrsWIaClplg2VxxqVofi232kmQ2wQVL+vliJQOet8J9ebGGFKAjBwQH8zMoq2kBRbV/c= +[localhost]:50643 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJfugyIJuOr0cxuiNO4lYd9Q4w2cyzWuJobMWDaTeyuZfW6RuU1iYd8uyBGhDA026K4FWk3AIuZY7NHi3oWppdo= +[localhost]:50869 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP+AkUXXPgat6VT+J/NDXMwaeDmP1N4YIwsuSp+e2DY1 +[localhost]:50869 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCkeOHTLg/sY5kKurGODAhrDvwek0cnoAylud4ZSVdpVcSqVU3UZrtJEi0GGiAkmBDp5E5iqKSO3FNvD/BAUEuD+94Q527+chDQ/WY/jlpu6aN3O9HYnHXC/QC4ls7jSefuw8rbQMqqJDL9hAI4jnq8uMGbU0hJo3Rt7rWKuuoOiJAD4mbBgzqAQKnbi6o5U9bvuo8IhUtLlh3wiDI82GFmPXIEc7PGE7cqzMJTPktPK2ta5kt+SaO2ELY+TjZSnOCw5CNojoeu/RVBWCHQExQlCJfWutePTfJhn/TSjw/ZwwrEvp+h2hBLTDCY64e+jnTc+dd1Pzc40a2U74FRCrhNEnoGDKBtCPVqaDl7yEx8lRcENQFScCiP771FPkMkwbZXqQ35LdB83RUDmv5xXqgVZSr+ns7fzz0LXpprYlizeDc5PP/WbNkP95JVXCEEs/NkYXp3RZ8ijwIBeTxKZ4FdnIienYWSvmnQvQoxx/CVwGZsQGIUS3NWjiJcfx+NGo0= +[localhost]:50869 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBD/LMEd3POm1ZzZgNGNo50OeDPCCINivXlRZO9MHIVTctZuUVH/vIT+kd/Rfoapvg6ckNnHuRDQwHtRVoeBUZsw= +[localhost]:61867 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG1a81ia7HFOKpkoaFFOZcSqURpZ+SmphsR2RIn5HtzT +[localhost]:61867 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCiGCLgD+BBiH/IGMoaRrpDNCLxARFnQg2O1Rxo23kNGQ6+u5pkXXSEGZL724BlW08swtgRo9lbphOeI/ZbgF8MBu8FcUe/MnNBx/OiT88bRANOdjHGssY2s/SrnFAf/GznFk1BntIOorYGoi0khPVdDeuh/ekcgudzv5IdgBBFe1cytsFakRSfdHhv1ZcbMykApRKLG4ng88b3JH+1N4eiKA9g78UN2P7vPkBLaGVibz07TUytaFC5pKd4+5ksP3RwXs7waq0uKfFRCsxUSKfYXBKMgkOCaLz8Mkw9SmWrh9Z7rfeWp8khhWOGP3ekYAOqp2Zzs4of4chav41+ED3PU2k775OmWaFnAWDld+bP9g8VXB8BW9SYvfGb3VYGgyBVmc4tJQF8mpJUENefnQZD8Ubf0MLtWUUxOe90WCV7kuPyxASwGw9c4HyKs5h+lM0QOo+l1k59LSlQwNzaTyRoHbKvrZtlcvOBGvRceu4ZTLWQH5R9JBK5YbWilcagTpM= +[localhost]:61867 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPnbl3cFAguwZw70X31/efrGMuyUi6x7Mn848l31f9OBJM9IjyjAthj0neWb/zVJQ+fP/agcliQembG/ZRCw1/Q= +cosmic-dtn.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFM+QMMMaL9kOBrnnM4+1RxRx8IJzaTOS0ePmzPfHci0 +[localhost]:60547 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJferFh68ukZ91FIa7f8WLpmK5uF2f7NweENiAFrAc/Z +[localhost]:60547 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC0orq5JHo9ld7A+IosUQo8w+unCOa34K4r1PMm4adzAZJJ00hFecX9MVgE8fDCSl07axTKBAjhupU1qLjFMOMwh+iyY9z764wPn/RkvmoUKF2h3CPQ2nEpaiyQqEow3SDZL+zVqPTkE2KJtD5W4o5V3wI7s9B0IAe2eDEHJBtY177ctHQJnUXjPc1js3Beel4LtXVBOErTgnCyh99jfk16fMguyNtmITmR2GzhaDW36VOLxsSUhmRoS5fr38zXNVk7WCOtQZP/xoEXt3pPIGHP/wIaaiu32ae2IDxigUU74CMyPP4MYT42wDSccVj6ew/CsVlduxjGPIR0FtSWDqO3Edwj/cpjsubQXwrVvZ1GNDnyCHVGLi1iWOI3Bl6o2MEOyg+a9waUWdh9emyN+EU3Knjv3AAO0D68LeMeQJyDianCcEXj8jj/ZvlWl4Bk0Hg6khJNeHMoanj2t2jcFa0qNbzHw34BKndDHCiZZxv6LSlNybgBZpzhzRhH6W4cQBU= +[localhost]:60547 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBJuKZukZ3GFpgoJalYy2Lh4EJOC2E1B4WQxUIMdrtJ4VkEZKQ6dT/0w2/2IYp920PQdXdwv3sgvWnMxQB5Cz/A= +[localhost]:61256 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxKO3BcSQnKpsx+9qJLXMn7h91gnu8aqrxVMGnKX+Zd +[localhost]:61256 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDL27gLM5+VFhzwhE7FW9+bi7vxffRfkua3U1B+YR+MioAwXgO+IidUpQ5CYcJTIKMcNEebRCrMvJekurhb0wKSFm8R9vzuIoHAS/E5r/ebGNhbi+ozV3tCahxEEl61aqR2nd5seCKl5X+HQyhO/vk1/4pK6R85udplwvdY2Uv4kl4QfOsZFlJ0l4aMDHl9/eNyMCTTS9WcIAw7KiaZiGvzigrIlRI5rFiW+nxGqUbiP+90HrBY+SMq8sd/O/CWE8Y1jahkc4PU+zUqDszp0tbbCSz3u+fzaue1svoGYc0wfL1omaDm5PMeTPJG+MgKqwUEw5dnVnTJqCarvPf+VZ09ZJA8roSSiMCVyydNECf7y2VDlyQTs8uhn2KMd9OIGMI0BuU4PfaLg08OToVPhgB56DPpDHCP1VxkGmu5dP9JgBT2skaavwzlu5nblfdKbtDVEybjjVQeHP6jL2r3nICrJlefanT1uDEv2M1C2ODWA5FIzDfvy61rbZZ7xhB6yp0= +[localhost]:61256 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMBCIm7cm5j8SQulTk0ZRlUyXIxiux8fvYJKtwSQzjik7p+BIXYbWuNboYhXxOzyS1ks8sPMuHHKcAiuX0ZWQpk= +flow-microscopy.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILfypojAQ5RAOIALr0Myjmj+q5kNxY1aqEFOlVYYvmzX +perlmutter.nersc.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDRDn86LRaU3Hl9E+OTwHtyLhLRvjNCF3e/LAuRu/Ms06FNsXTK1iIb3QMnWjzzFd4CwQwrKYZy9umHIJOyCW/SbEI4GRPrr7NJpVOvkGKVBqSo5aYY3LhqCqKgsX7lbnhwAyvYvHoy9qd/XyzjUMwvUYf1G0dmkIN4AGauEUysn2ixgfhi6+sODsLI9fNrZftnTpYecw2NPP7cn8Dwknh0Fw3450FaXZpUryghdsZp7VvtGwVjQYy5C2PFj8GKqoPh5pIrq4R63hx0OmQOQlRp8cSLtElx1vNzbTRMh43Te3/SJQ66h3sG8AgsPejJgPYEVKJhLpC8CQFj3mQFygcBcp5jOfNnEH2PWZ2Xmzi1p3qrtj01ZML6tIZX9GSdIPif0N2/Zi7+h2wsC+/d4gWdHwX0wQ+o3gYVCKl1Ipf3HJbQ+ZkJ+SecV81nWmu0sGP5nrKALYrQjSwsoO1yFxNhzFk0+XztFoSrMVsfLGG0n4ahTc/yJdB9/VL2/TcujiH+u64cDE9HhOw/JrHtUr13KC/0giaSc9qbjjdhKaXTDcdz4v9NCCqa6jb9R9+MDuufCJy/hOvvYqg99iCGAS+fKPvxJQ3byXOmzZ/dNVw0iz9jQdyTMISmn5BW23YQBtu9RbA8uvzhlV5vsTjtjadbVrWx4VEFgDLtBy8E0kACWw== +[localhost]:50557 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfmZyzUQd0nTpEVTEx/+8ZmR/MxdIycqcTnNyTr6zD/ +[localhost]:50557 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQClkZRTkEgR6XWntrHrgSgKMfgal8MTbVTP8tkp9GEzL/R+ddNvHMCifgIMzhMRn5o5QyQiX51n7oV/0J+6fB9WM/bOIhR5veZbaXe55c5UMyoO9c8Xa6cBoiTVicMlmNIQIaMGlsFDpcO05cTtDjvG/q79oF1+d9pjt6QsYzMPWHp/Ivjtexh03srJdI6YJs1eIPFuKI043j7ufrsqsM7YJVHwMbV+K9+T2zqXiJBXrJIMzBN9m5B8VXZNRjTDe8eHISk95suMF6cVc1t3SJ5oFqpS6VKUGRhjvLjQVm2bWuh+nLrYq9hBz7UHJOXnE8mUB3ZEBXX51ptjiU6WVxH39aSS8eqoHh5GtzdwWefIoMraRkoQuYvj+stfkGF6DhUIp6uq9OtKazj2tuTr4vby56FX/9MVCgBOQvCJ9joM39YmqFrLuCuGeWAkGWJk/NIN3S6bEUkuEQZf5W4+A4qzggoxvDqz0vEafgIY/JuCJoJTQfZXoHAHC2AaXKCFasc= +[localhost]:50557 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGo/OIooeQQM0lRdLLu5u2vuBD3aSk/h1y4z4+8zq3N84/XFfuFYL1Qeebf2jQcP+O+CquINI+VRI8ZA9sCOStQ= +[35.197.38.19]:6000 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDJ1ECo6+6KgC3jHBpGnAuKjhpMHDgpso92ywkOU9NvDntTgP7yKgbxmzxmJZmV8QwES0Z0F3ijNQ3kl8xwCfqh2zWZgu8LxfSZMaXH4jQCHDtMTDtw60stwDnEhhe69qgzmttXqObzw0wpyCQ9FG3P6lNGzal6CckIXpL5aIjkz1gdTxPfH7nkF6J5hm80qfwivAV6AoiiGemVq9oLyXqWvpmMgG8kqS65zeNWjgtMuUW0LExtkOAUznRcP7UvoQXp19uZ3VSe/I4KwC60BzXUx91Fq32BhcDPT74gEidvXcqVa2819kwpFkQ/ImN3XUs3PcMgHmTsTZ0W9VgeDg57dqCierzAZ5oaCrZ4UXv6CyLT2qvWIQr4gWgcm9m0QyaX+1X2NEmYb/1Sy/gOdQ5SIbKOoCTgdySnmOVsFeCHChH8yOV+zCuuHT+FP3PIPgY+Gg6QvGXdm6TFdZUwehTR4Ahzvw/V9cAyjmCmDGQZ70rLBjzkYFUgh8avViTgwTs= +dtn01.nersc.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMjMlrBKPnyeW5Pzdw+UZJTiTAUeFAAhQaGxSXn5DAQu +dtn01.nersc.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDaiRyQyuZWNCFGQzFzsnWlVGegwNd30e6xvwVazR5hoty24uZvVC5YAmoW8r2kd6q7EUTyxJzOIkNzK7dK+UF2krX5/qU1sKHe6eCgrZ5eXrmmtz4tEt+yR2ES3YchEXOvCB4YG58JvspA7Unf+1FwnxQ0keOg8ZYtYdNSEAaiUyjFE/OFIAk4cNOuK240GpbD+xMfFVT6+RKfjTCTGgupbzxMIPJ4C+WNpYRwGcujQlh+er23C0W6xx79LQ11Tl2lyXnm6OnFzqZ/MXmnPSzdqQ5JioRWX+VIB63jx7UqIrD5fasw/L4KXAZGkSe5fWYlLXYkr11mQrzTNTvzdHDYjAHUmQ5wEausk+oUPirOywLp8brOkUdASmilFpg8eBE7xycsinPGuVvex0hlu3M3P2MHa50ZUyxc2qPz4Uh9KbfG6VrG8lrC6lLnpMtWz22h3Au1H68KWX3gr40XToGlVVVAHZAor0kjtMpqug/eZKTRcLlazZvtKZF8tlnwjJFmU0jWj/IbUSqiomPKMGQu64pDh6TbN9Yu7Ue89XNV/Pu5EPUCu6EEFRbKxeMWlPEv6KksFLnGWHOK7b8s1u85FWLVRqp5R+bf7WvUdjjrIwd/e6yzszUuHbF2r/6E0yfU/bk0QFyg0k2fewz/9HlnludObxvIGphV91GWAQIvlQ== +dtn01.nersc.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM/rtu1QrCA0EnQd4sZslkVsWwCN/3PpodgA2+F3k2XjQzPnvowishsHsx8bgCVllDTZZq6xCGUF1TrQ21zYmWw= +bl832epicsub22.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBDC1R842nbHTojWZ+O6gU5thRScoxuQ6rEGqQ386RgX +bl832epicsub22.dhcp.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCubRWkHloyL+R7h/0QIeTJdXmGylLhOlbplfehSlAL+GswnTy73YZfZXEhKvEXu+PmKxazYMXVy3nlOc+MhvfpAMTv/6TOe8QIZHoLSLrsN5g3tuttFgnqBpBmE6YHp+9uanhah5rkHIrP3dwq2mYPxRpTIRJx4xzrTd/yTLMVOq3+5xZKmzMWz46iJh54rCeZiXEHWRcW15t/TTxzY03VxQLdBPXcDRHSGW2oTg5LIlrlGDTmWhJU3gtGUxaXWyiM90+AS0WXs32pP5w6eJ8/XLy6kSa0AVB2VgwDITpJbWDzt9pzzqexEawpJXCcZiRESOz75KtoEgRbzsfJ4IdDd+RhZDvfnWJjwjBpkf4jCbKIO4aF4332yGNaVUu4tnQ62nsqclKbVwjzD+bZRMKk0vESmui3oDo8EvJv31UzHT8gUt9em0PHVGNF9prCli88F5WzomWLU5wGK3JyNlOKZOn8n1XvAUMT38D0CdGmdsr4WdeiQB5vs5CJ3Kq4cF0= +bl832epicsub22.dhcp.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC1GFWDRI0e8PR0gZym01hMaj4uc9ZKuuNOSjuQIFBE1NM+LLkr9DfzeegW7vsnRXSq/1OpPNWAkGaqRW665Kw0= +lovelace-als ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJDNxI+uGlS7g0JYSYnrJl5d2aToFELb4E6jJsu5mGl8 +[localhost]:51848 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIILXxanqvWOMlrHMpxjvrHiIr4x9jVXq00gk0v4dTclk +[localhost]:52103 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFm8n/ncLeHOpaHlD1a4eUQNzWPXTPMoj7TsAJtWks3C +[localhost]:52103 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCsFVFUTIvteD9AWwCnJh6YGV4XXBPGdj6A+mFnqmCsjtvSvzcm/i3YGZtA3jIA3ZmpVkPS3gPPKG5zh1LcGAvdErBjrA3QXzgyGJbzASFXRLzlcabD3UK1fkUTtMVOXKIHtYfCThrCBZxt4CaL9p+JUeEq4nWYQ9QNdQE9M+HNnYbQRlZo9BeWA5WrybNmSfD+rhpCvK8+KEziFDlOUy9BvhQk8Y6nu8nwbaaPT7wXs3AVJclyo9567QCstOi5kQFadum/WZTp1aOwXysU6X05Mun/hC7LdM2CaKgygoUEurALfyiOnnli09QvQgDafvLyrz/AtzG/kmDehmUQ8JJwLnELQSDXJ4hNCUK5IsrbEIbmr/BDLEvkfwCW0gd98VnxtkEofnN+SrN3/OjoBGxj3iNYSta0ee1/Mla0XdL5Rk0DNANcXfKvG/QL5l7NJpS+j72464WjrG/BZp3xDCuQvZi/v0DsCfLOfNxLh9kPs2bNVUvm1QwAoV7KFQ3MwgE= +[localhost]:52103 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKus09S72ACZHjX0gNin6GFXQflQ0JzBd7TPPMu/mNeA92Xg9xRX9QO1vu2W32RpOf7CdcPa6jMrNnfYGMcj9L8= +[localhost]:53268 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBSAINYgRIMPvKP+84fsxskB/mAqN251IcSaXQ23N33Q +[localhost]:53268 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC00IlOMOUpT7wMy+ZAVQtcCOlkMd537uCnbZsbxMgYUWa6DSzJuu95bVP9egOKHcc8HNTLZu3wAinHWRo/jI6TZEYiTBuhLEDoZ862RhN9UZ4HV2ui58Mo/KnJXolwqDtMA+PTyYjY0X7AQngKMww8GP1X5wxMdzQmjLfYq6Mf7oopmK005oDucu/J8gqwTWL+brpGpUdh9tnfIi6HtwEsQ2Rf6puG3lvEy44ibZlikrkN9SsZ86GlndOPaTJIlFz02ZSj35QxwkKIAzXV6H5Qwedw65CY6pqjzipfq0b9XEV4akji86PcMmOVXRamoeqUQW2pOKXJ7kcrdqSdpFa7luBt1EmqzOamyqXJw0h+OQHR9zwqzXg7Luw1+kwSZkH46gcfVcnfLUSWRaHS6W2T9QgjIX/vBxloWYWKEgMuHU41m2j1oFIdd7GuDLCv8BlTpoJUpbZhguqDtDXxcbdUSgzImOfpYZkQ/Z2Fa0XVaZPG2iFTogmX7Ai09WLmVPM= +[localhost]:53268 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAXh1pfs5B/4mk1e9eSSOihNz4/XOg8vtNt+Bzg2vCCKslKB2PprglN+J9EtJql2MLp28vQA+8SUxPNVS/0YxpA= +[127.0.0.1]:53268 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBSAINYgRIMPvKP+84fsxskB/mAqN251IcSaXQ23N33Q +|1|fvPvPtsjwY/anj/8pwSonZYtlU4=|FolwgkcaG9xh5GOZWGD0gtMuYes= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBH7hyrzud/xfGZebTH5lFHLaQwjTDlDvmwTeXF4tWa4J91zaXRb7zKT907tCzMOeCODJxndWxsqprwkD9up0EXI= +ssh.diamond.ac.uk ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINRS80z7bO2nBIxB3rRAh2LIwPCg00MAOwLKrCxVa7gT +riemann ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID5oApZaBnaqHkH8S/fknazn4yjW3nusaFe0mtT5RwdT +riemann ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCKGFZNtPXnfgIpn9mh55ClKIZfJ87dyZPRiLm7pMQ14GIvWfhpNKBgTb6CApALBpq3tBVt9L+lqswKcH/O5PIEBpYjjC0v8VKOWq8wxZTo49+YEHGDhfdc6t0uNcLeDQscUtuXbL7OLSskJ5qwd3sbt0VpYKRLowFVl15CnDKcRujIWx2jb7fPQF1dOzD1Zod//+Szz1SjS03ea870oRNP3qtgPay9eFk15otl0d+KQLiNzC3yKEmzNipg74FcFEirOBsug2vCF2vI9rJxu4c6dWUi1Kwekz1jE67u6BFnbJFQ35I2fs/b4vAvEkGIFUgYyt9/SvYsIqoaqQm/nuHTJSl2K/O3N5mYYP7LXKR8btKZHzAL4iFLYTqKw7XI3rcLNfXE2xO8BLeYpKSg+Ept0bm+jxdaMYKCcqWAMBER7AMhuF725hf0Dfzbgw8G6RflN9wWhanHlwveJ84hX0fw7WiBpARP3as1HJK/I53xIcyzOvaqVNg+zy8RdSOu8mE= +riemann ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG4vdL6QxcP+p1+mVaGRjr96pqEsX0SBOtKpd7U0ndI/nMFoIuwH1BG6Ku8grw6MajhuGrcUSdMkprWDYTtj1/E= +riemann.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID5oApZaBnaqHkH8S/fknazn4yjW3nusaFe0mtT5RwdT +35.233.175.44 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINZl1hcINHKFkGHHf+kj4kF0IlSXEePBfqFdbmIoo8CB +35.233.175.44 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDZMwHeRUlkZNO8HrkCKYiGvAs0c/bcFQFCNJ7Vt9QVm9iv9SN/qX7pveGOVHDqZ6NWmNZl6zIaPtkjNF87pKt0I4YSyrl7IzU8rGVz8U9nPtze+C0kXTELUOk2s5zZKWT3Knb8EHGkoJVY6zknTTp50hJh9LQoIK9OZSDzLBYY8Y62cJ6By8z8RHhtRX9hyuOK8ky0V7FjcKl6G/ilvuzrRpGSLhY1tSryKITgOsfrN04iOAzv0L9LTkQK2NGz1hOVWkpwqsHWbYxbS2L8Q9tsmnFaaboi2Bf/vBGzuOSn2MZaM8SWDRCNekZ7KA3zZERxITMbTMjl9yb121IkT5CQwaV8fFlFRFH4b3sfbhiQMSQ7ErEXz7GUppwtX89OWDd4LF0At7zVpJ4UC1UHIiS55jRO41pd3m8Oy2XJvM95uaGK7kN37PXadiGQHUjPxdjxnij2pcAW7lOYTvBWu7GfKxVFggFjTR9gGjvEfZsm5hPlbs8oBFWs+qrOEbbi2us= +35.233.175.44 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCrdc2mOmk71akLIK1tAs8fwSYoORYZ/gsAT1aLJBXRzecEBejNEmkwpYAnEjgVyTHWpj+Np8zZ120zNAawi9FQ= +teocali.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDiI4CEllqunClOOJaHTK2sKGnOolA34JAwrIe1m3+cu +teocali.dhcp.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDDcYkiJimYmUxRDeqIqMBcBDIhc8ig1yk/HktFeRC/GYQ7is3ZaDgI0+VXHo6NIiUHYirfY2P5ArKYwahetz1UBizDZ8PjuW5PdZrbMULbkC7EMx+jzVtcUzWhJQGFQqDH3QBfahkmI8er/uhcmvMC7P4lv2ANMLAvCPCHnnh47fTrn18On5fcYag17xvPciLNa+H5w23K8pbFLjbWwcDNqn4Sla/Ff8+B5K0unw5un2Lx5acDaF00stFD2D+IClUNfcPZXStoUYNgY6KSgIHLv1rV4VeczPDu0pVD8b5ch658DnzIhgGzjSp+N2pz12EHZaO/0Z8K70u1+62RodyBcQNyCwu0ac/vEu9msCnIa/cxkKy3P5Zd3qIJ24+D7LnSwL65UtqzeobHL2yH/9Rufj8oJb0T+qTXZNtbRr4vpe4cAsFvXnNudXlek89zm9kQ/9uJ+S4LrrChDZcp0J1bNoMulcR5Puljj+x4QpvF5mKHE3GIutnujLn213gWryc= +teocali.dhcp.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLQrnLqJ9vTpmwfjD6yoAvgo1+YPoH8tMA1qzj9bD98KFdd2l8ju9Dx0GCg012K7YJzRXgJMKlmKoz/OW0wYy0U= +polaris.alcf.anl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAEZpkhqxD9p7RKXzy8p6rWF59jjNerksNiiCYPCDxHy +polaris.alcf.anl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIUiTFHF1odmb63k1XU/RGKWkEo/zFKKhX6Km7Gar5TefAt90NEca8o0BrKFpEAM2/mo87D1eQ5cZMMNDg7JGW4= +gavia-razer ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMxvQZbJbl8XxYEqaafA2M6kGfN5CNhYGiDi6Q13mmWt +gavia-razer ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCVukXIWIYzl2/hNrlzCjWGn+2khnlt1WLoLqKlFJRa433mgvdo8shdP4PkCf2LGW/JLKzzm9eGFk7ktIojJuB3lX69u8D9Jf/RVCuSsAIUOAVbP+ImjDZOZBUR3dZxBPEtpXNjcUNWrof7Tg1UJexHWQp9JhsckwVZFf3hhC3cFUflT6faKH03Xns5tXtT514dSBT71jtmuKrAq8Jtdhpc8G6DrAQtvezdzk8LEANIxYxhMy0AMQf+bZsBmijF8SmM23Sv3+Rm+lldabM/3MBZq93l9WiIo2ZtyYkBBescgPx5z3yskePcCToDdB4eS/hDI/ckHluOkeq+koYIMV/WZotU57QSd7lHwbuj4I2AUxEcOB4BrxpmbpjxAcL6HY2K8Q0j6PRZbAi6oaThGlsgzy1cq+w4j1godxpACnUtTDp1YSyrgCUUYtnjDhKYOKyyVXE11aVAyWP+eXHeTk5V1HJImXaoZG4SX3XAf/VTDfjakM+nYdNUZbgmlkhSxIE= +gavia-razer ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBN2ITm1zx3woIhDNRfPo+zRHsP28o4HgaJLgWWExx9VQUKY2f04rbWWcAGq+IqhKqs1Hrums7UPCW3pAV7/P1l8= +gavia-razer.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMxvQZbJbl8XxYEqaafA2M6kGfN5CNhYGiDi6Q13mmWt +brick001 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINZ2EBIcQWoJhK/sckTxEY/rw4qqoM9Ewuubw9i04mEY +brick001 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDBiI7G4Zw2IxEh1u/NOCaOw7DSM/m914S6pnigRN2zh4zZ/NfsFEbtnoFuY8dI/LfkH2CsZrJqhNJ3OanfvU+hp1sfQppKa7qExOIyU9EaDMvWWD35u1EWKookQqcWmEaCs4PElofafo9sKEJsZ+lq//mA+MjxPL+vNhLw1ZYJPkL+VMbEBlfNzzPdt4R8jb70bRyZQ5zKHic/WiLW73pJdr2khxke/+e7I2JtUoHLr9fyud6duCHBhgibHWxrtkoxkIm3iPhVcUFuZfBE7PHZLfE/69PchB5pU/Qy58Hl46QickhbxUuxG57ElHfOgrO8P8LszsYzK+fcSxwJmO5pO1p4tPNFQ7G+opwdPDLkkPpjyuBsa55vevo44hGoiKX8SFGJzr6RCINYqJ5CegpHjOZu2zJlRqVYx05Ze7WnnmZ3Rqm4JGi2ANumk6s7bvYdbbDuGG4kngLKgN9WOrSJzH+4VDK5MfJrkDxm9lDC5/U5jWPk/iouR3iKAF0/0NU= +brick001 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCnL2+v4FYLLE8+j/xiksxwWes84pagEwujBQo4UkJZAfYb0JF4GvGUG6WAFXr8qyq1veqFOq+bTw5spRsnQjLQ= +brick002 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINZ2EBIcQWoJhK/sckTxEY/rw4qqoM9Ewuubw9i04mEY +v-als-rac1-r8.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 +v-als-rac2-r8.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 +[localhost]:60188 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHz8y9R9PgOBYErNao5hOWzLknnRGINNbPNXlLQbho0x +[localhost]:59253 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOdgYJuqLMBE42XMaS88rLB5SctSbhzaGasvkALRe1OT +[localhost]:59253 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDn5fX6foU0dtniq51w5p/7XOi24d9z1GNnXKUGWww9n44epNQchxstQZBAX2aMeCZKu1sWcCoWrplfLlprbUE6yMk/Uc+Mvg8d+PsYdN8LxO63nmJ0X4d0hkKJG+4LBHZncxpjyIdIHmd10BsvQUDDWC6lcvkVpS+Wldn1V2PVFfnbL8x1nBDiG+hbzk1jD69cFETCJoa7RUeGX0Av2Qa8wvyEf0FBNTKluBZguoYR3VwP6ujGhXmTJJaA+ICCjluUAkDUj7O/FuMMbZcTKReV3BDUNliNFmmebb5lqC4nT/7ohaViAqvy6sIUToX3tlFO9eAF2cc94GETjsoBHntmyuvZPAVOrd1OSl6bsj6xqq521mVwPaD63lv56ZKuywHASmw6jLR89RjesV9hBqZX55htQ7t9D1QEmIZt80iKBF0KXoTn2DWkSRbh8HyiOKkYLKXFnx7eAcLDnZzmb3N5G34qJKJ0GEqFwySAAdIx8L6id2c/8F4U0gi6enFu1vM= +[localhost]:59253 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF4EhWxD7YnS9DzGpim9DizuWoFaLEmAf9TE+EX6l1BaOoVXQ4+8cweLZSsdq0yKXAVxO2SaZuDjbbpR826SWEM= +spot832-new.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFwuWqzNqHq0lXpGL2RpOclaYWVhkFgJtxPhXKaaW3ab +spot832-new.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC+JMv87hoA0ieLaGn7u9SbTfmb36wUnXEenfqwouT8ibGvV/ZKiqfldBp/oGgMfvijDSNO9feN5vcUd4KY09Y46FkM+gYPxbVh/2TT/fYjxwqRqF/rT0LBtrb2VvGkKb/4EhiHUuvdPmexX2fLPkHGiZSF5SYiParot2zY+OQUgDZl9F3I5fDES9Kc2Ymo0977byiFc8RkGAi4mFFmXP6vfzC+fQtHO5yunWf7+yGhoHD0AX0OLJ229Hgt3HGMPrS5HLfVlSapDWO45Koc38sHhVSrVYCHP36W6RK/oGGh9n/ISW5fm7yOlQQvTlUmjRN7dcNyfqEl+XTIdsFJlIgRd17IJy9YsXW6rkk6a4ymLkYB8/uERyN6T5QJzORrvptyHi5Rus1EBvF+YaVqbBdNQlPJ42dLRt+VtiecAIFSU318tdXI++LE7TDwOW3k1v4ldCmC3eEHe2G1PfZw80GSDJhIT510wWaepiIOs2ekRTEpskHe+4Nktr9ywi55ox8= +spot832-new.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGtCeWqaZJe560wL/MBHZWh5UciGxmPAqbxn13vuXBRLrrNRp4w25hApdchgrGwi0Jbaoc1M7FAUqXDM55Y6z/Q= +spot832-old.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMjYj4RBZ+DW4GwIrkF7ZCa9fN8rP7pN3xAOwoIFnS+7 +spot832.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFwuWqzNqHq0lXpGL2RpOclaYWVhkFgJtxPhXKaaW3ab +nid001041 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDRDn86LRaU3Hl9E+OTwHtyLhLRvjNCF3e/LAuRu/Ms06FNsXTK1iIb3QMnWjzzFd4CwQwrKYZy9umHIJOyCW/SbEI4GRPrr7NJpVOvkGKVBqSo5aYY3LhqCqKgsX7lbnhwAyvYvHoy9qd/XyzjUMwvUYf1G0dmkIN4AGauEUysn2ixgfhi6+sODsLI9fNrZftnTpYecw2NPP7cn8Dwknh0Fw3450FaXZpUryghdsZp7VvtGwVjQYy5C2PFj8GKqoPh5pIrq4R63hx0OmQOQlRp8cSLtElx1vNzbTRMh43Te3/SJQ66h3sG8AgsPejJgPYEVKJhLpC8CQFj3mQFygcBcp5jOfNnEH2PWZ2Xmzi1p3qrtj01ZML6tIZX9GSdIPif0N2/Zi7+h2wsC+/d4gWdHwX0wQ+o3gYVCKl1Ipf3HJbQ+ZkJ+SecV81nWmu0sGP5nrKALYrQjSwsoO1yFxNhzFk0+XztFoSrMVsfLGG0n4ahTc/yJdB9/VL2/TcujiH+u64cDE9HhOw/JrHtUr13KC/0giaSc9qbjjdhKaXTDcdz4v9NCCqa6jb9R9+MDuufCJy/hOvvYqg99iCGAS+fKPvxJQ3byXOmzZ/dNVw0iz9jQdyTMISmn5BW23YQBtu9RbA8uvzhlV5vsTjtjadbVrWx4VEFgDLtBy8E0kACWw== +ssh.nsls2.bnl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG9oLAbjVdnhcWNCRajuUJ4uStMfxlGiub3MoGHrzkEd +ssh.nsls2.bnl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7lHVUvBzOlypqzv1afk793tqadLHWg8gqGVvGjlTUC22m4bsV47YBOsu6TOw4+Q0wxIsM6JGZx+UEKfFyaiCo5hV3OxJDHjkhtDCEwm0zvFzLfVQ/gWKUmYDApF4NXlfCvDFykpRmP9YgurN3Tp/iZ35T+qlbDb+gYeZq37+jZgP5xusUer0a8kx2o4xLSJuh5JpM9hdkPL3t4EafmA8Diq6PG/Syr9mepIEDNdQo0eT7tTZWQ/L5I6RDn5n3baXW9jPPJ8Z6boq4eUJOcWVSafNwP/57AkqEz1zxKEspW6+H5K7pghGtnSS3lqNiAkoRWYhYHmQ1pwZrYu+rBeR8JtkKkHqU8TwYwqoXt0lDNgSn4CCsVoTMxU7ggWzovnEOr+uT5vEi+iWg82pbzA93/QUmPVUt+zkIBgN4sVAd2lt7Nw/l0r5F/CsE47SRs/++xhTB7Hh68lMsmdc27pLMbRcYEIsN4zw+JeMwch+6++tbWmEJyaHiYWnQnQBNYF0= +ssh.nsls2.bnl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBmA7BJrkeoE7nd4mCfETTeSVYVb4uLSp9LCQjDXXz3UUNRbHp1YJTWuYhi9QBfr008MlwqIr8UIGkVwt1nbmsM= +mars1.nsls2.bnl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGV3IWz/aoVLmufZQOZeHKP4O+TGcyL2QWSL/9tMhffO +mars1.nsls2.bnl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDc9LAgbzMUfYi4zZhsSnVFWp0UoaeNi8PtmrsECaJyPwDQRGqaggS4+RU6NmjofuE5LUccy4ts2i5EzW4wyr1As/1B1yZWN2/W5cXf8Oev9RF0ZtARcQgoIdQCLgLnOwI1gPaykktlWow//FAjHkABOi8zD8RE14QfITrtWcZocSxdowZJ6IfjGGr+t859srQ9O7M4D/Gp6i2QXmagGot17a3KTjLYq32ncmhOLFfhEk296vsKOZbjY7FmpBKcnhv9hqHjyHvoiIgB8X4FgYsRNmsE/rPcPMOU9Ku4vNoIX7PESsWDWfI2WsVyiqSq0X84KlOZeNilnki24G8gkj9C1HkkpdBvdTMOpbuUCHnNy43c562tiRXOaTXSF57h4TXHwUYEVOrBBbuwiZaz9efT88UJrOXI0uXEsp2Rvmx0Tr79wMoGzDaPd5wyVQ0wMOq9D9iErU8PDJDvV5p3Du4JshMLrwdO2uCE+enVSA2PZiI6Z8XAIxmZGYs/HAsJl68= +mars1.nsls2.bnl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHgsTT/3rHF/kCUHPZF34cPb3h3PDipJhO5C+A9DcFJwr6igIrctfFjhOshdNTZIYlrswRWhMPrvaWWHQqZRoLQ= +galibier.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMO8nDpZvvv46/Z6U+OEBeXDHY2BBXVh0J4vTuNLML0i +galibier.dhcp.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDEIcWPPcn4REvjMQN/QQqFhNfz+LiBQcXYt+dTha9m7WzSq5SKPW874JlukPUlwHxjJpMSzT0VLvtvkNZ/zTFqlxaHvQwTrelwsm7cFgiff39lL0nSeSfhTdpEENflR6FeBtUsdFR7XgKV+GH1LiLaFNU2IBvwb5A+apOreGsF+60wS2NCLnCijpRq6paymm8rHG3hWXCrX8SqWKRsKK/v453NNz1CzSxHAJKGVXdoi05/dCqFi60b86A2PKl8ZeS11CiXlb8l+IV0lD0n8pH4/UL1WgE0yGlnI0axZ1xlo9tz8q4xiUSJ9Wi5tnLyh7ggfqjNAuxb/UZMtqAvksVW7OBAABD+2zDm8E4C0w6bDYlXn0lmAEPXfn/DXdhyMjCDeS1ezZ42o1xNBeeQiudcV3kbKdTkK2wHZMe5UV6FGbpEyvMwE+krLVEyTHDOghPVsoExM9RqtV87LeEGFBVs2ULdc1nahRni3+YWxYjv6gbNloRoNSbkH3Bf6VTrkak= +galibier.dhcp.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAWrpyAER61BV9MRPnbLsqzYLjUHX0T+oC5nYbh2Qrjv2DkkWFAPwPbrGDcUvijzNhu5vg1cjleS7bmw9A5M7BA= +flow-tomo-stg.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILfypojAQ5RAOIALr0Myjmj+q5kNxY1aqEFOlVYYvmzX +wu.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuH8yG63JhFpM4TLy4Kdc+pDNb3Cwr69SndbhpG3v+i +ball.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFAwtty5JnXLnQxqZK0p+dVf7Zd1DveSMaFCz301yQq +gitlab.desy.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGUO0WVl6zlp7j3jO7kAEZBhR8BFz6sEjsSiygx44QoH +gitlab.desy.de ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8oZZEtgyfXkLXUy9sTnPQKx1txiDm/arcMgTyf2/DKEd4Qp85Mbz1FJOhR1ZEl++6/+hXCgoMlSjMMqpJEaeNm7Q5ke0imCZNKWNc1rhuTFUKS2E8Nw9tSLGnsggmrQFLTVEgqCvr01K/nO4dcQj/w1tvpXN4+lu1NjephpgT4qtw7CylnK2wHpjwthvbez8/bkiDT2vLAR7nabPMt0U0f2S0I+shzp4ymdlOnPBdbJ/iSvir4Wakp9RacY85b4RIDejEFppLw5fZCSqA7gZ3jW2QpQsSoyjpca2RAoiRl+i6SI8qV5xBJ1UNseoYQy53+3yaR4AOW9okUktAha7b +gitlab.desy.de ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDveYioBmJjmfK12v/xfJx+cpxHelIRVghS8xMRGKFjeM3ubrMSvP476JoV2LR12ubU/OKfU18oW/v7WoOegjio= +bl832spot.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFwuWqzNqHq0lXpGL2RpOclaYWVhkFgJtxPhXKaaW3ab +compute-dtn.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMc6rG/CXtukfw8UF5piyOG13sP/+EA0p7zNNiA6mMXF +compute-dtn.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCpVKKeAu0XBEAzktJkRerlhUBsDMqKfuDuf2Q9wDnOfuX6BjCebclMb+P8nARB1eFJVgTMiN4i/X+tOVGjxizOChsAdZQygtikQsz2LXmzjmdwqc0GgQsWXbQdtnpnqNTswglKZJ985Czm5MvhySdJU3Jql3CQ8deUNYzT1cLJ+gsPQbjFUQ9L1vIqMrrBlW/Nrh8rQv6HF4kkdcQXqPoTvKcaQAABxz76Ef0TS1SOIksDlgzzDbijVY/dYGcC1FTXuE0M4RISdASSoOH7Nb/El3/U90c3In8Wg/c2AJeOOFScBWdjgzvaDkOAqk8hk8w40aVNiShe40am2MExBGKlmyr43W6STF3y9wuyY3tXfr7OL0RgotYIo2fW30eXbeJz+trh/YtTm8H4i1vzGRxA7k8/qpq4Nxvl1aWzpATH+YgF7DcNwzLIUuwgOww2hiLw3mkQS03UFxknsbBRwjB0rypYrHrd8oEmeIlz11H6i1GZq4QRm8hc4FEJ7ENEmcs= +compute-dtn.als.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBByyawEDnVHMNcc9SEH9eKxIuWCA4++tUMgS3ezGkxL12OwVpdvncBM3j/u5ZeGzbT6KlPYAF9CQ8kALqh4K3Y8= From 03bf3b3b0421c053d409de08f5da34621c7a6d70 Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Thu, 24 Jul 2025 12:01:10 -0700 Subject: [PATCH 04/14] removed vscode files --- work/.bash_history | 4 - work/.gitconfig | 7 -- work/.ssh/known_hosts | 218 ------------------------------------------ 3 files changed, 229 deletions(-) delete mode 100644 work/.bash_history delete mode 100644 work/.gitconfig delete mode 100644 work/.ssh/known_hosts diff --git a/work/.bash_history b/work/.bash_history deleted file mode 100644 index 31c16de..0000000 --- a/work/.bash_history +++ /dev/null @@ -1,4 +0,0 @@ -pip install debugpy -ps -top - /usr/bin/env /usr/local/bin/python /app/work/.vscode-server/extensions/ms-python.debugpy-2025.10.0-linux-arm64/bundled/libs/debugpy/adapter/../../debugpy/launcher 33515 -- -m arroyosas.app.lse_operator_cli diff --git a/work/.gitconfig b/work/.gitconfig deleted file mode 100644 index 68b9f87..0000000 --- a/work/.gitconfig +++ /dev/null @@ -1,7 +0,0 @@ -# This is Git's per-user configuration file. -[user] -# Please adapt and uncomment the following lines: - name = Dylan McReynolds - email = dmcreynolds@lbl.gov -[safe] - directory = /Users/dylanmcreynolds/dev/scicatlive diff --git a/work/.ssh/known_hosts b/work/.ssh/known_hosts deleted file mode 100644 index 1824c38..0000000 --- a/work/.ssh/known_hosts +++ /dev/null @@ -1,218 +0,0 @@ -|1|oLQTBb+8Jr2218ocTQZExDA2p14=|h+VDGXBhYPQh/7aA5vDMJktjHCM= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCsxGw19ZL8EN+NZ9HhD+O/nATuvgZxcEuy/yXnGqz5wMzJj6rK7TsrdU8rdJNrhZDe3yjpCiKvqkbSKp22jK2/iMAeWDQvYpMgC6KyiNd0hztowtMFJEwb8gVmtkVioqIaf9ufJnOO0LX5A5J/4fQhICfbyPiX8SsjX0p655/kIm3T6hr7t89b4IkRu19/uWufbNaV/mZSFWl7asLKXJNTMhzEn6bsTcAqlm55Tp4NvCe1hvv6OY/vU5luDz09UDmnDfr/uukmVm5aIjtlZBGqbOe7huNJGIWhoGCN/SoArRu9T9c9fjOlRMOHcf0QYMQmxFQnR0TkJZQoJ5N+EYNUIB9dvnJs2mlN0ZEuUU0RwAUOge7RwujiZ2AWp/dV/PNvLGmDVUxiyXC0Uuw57Ga2e49hYisYU/J/NPp9AbHqO8M6kZqYdqWKYueIsM3FDti3vUbjV4J6sL6mOBbxuJpUhUEX5UXxGbR39hDVx9Lsj4dszu+mcBFnDNcpRCDjw3z+hDqdNNpzhIRlbHQErLBWL3vnn2MLnb/3z163gyRtu1iTuR5myBIs9jLDAsX94VbBzKWdCFe22x4Eo6HwB6u+UHlXov0fnBXtAmgwRegc1gQwxi2FXB/ty0q1EO+PYo3fjUVRRb4uqBBIvpFarwtL0T6iYAYgHY11vH9Z2BFAHQ== -|1|6pgLzLzkovLxCrnJoUrck4IcIp8=|WyH16xjYurzWSiM+Lv9ul+cOVnA= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCsxGw19ZL8EN+NZ9HhD+O/nATuvgZxcEuy/yXnGqz5wMzJj6rK7TsrdU8rdJNrhZDe3yjpCiKvqkbSKp22jK2/iMAeWDQvYpMgC6KyiNd0hztowtMFJEwb8gVmtkVioqIaf9ufJnOO0LX5A5J/4fQhICfbyPiX8SsjX0p655/kIm3T6hr7t89b4IkRu19/uWufbNaV/mZSFWl7asLKXJNTMhzEn6bsTcAqlm55Tp4NvCe1hvv6OY/vU5luDz09UDmnDfr/uukmVm5aIjtlZBGqbOe7huNJGIWhoGCN/SoArRu9T9c9fjOlRMOHcf0QYMQmxFQnR0TkJZQoJ5N+EYNUIB9dvnJs2mlN0ZEuUU0RwAUOge7RwujiZ2AWp/dV/PNvLGmDVUxiyXC0Uuw57Ga2e49hYisYU/J/NPp9AbHqO8M6kZqYdqWKYueIsM3FDti3vUbjV4J6sL6mOBbxuJpUhUEX5UXxGbR39hDVx9Lsj4dszu+mcBFnDNcpRCDjw3z+hDqdNNpzhIRlbHQErLBWL3vnn2MLnb/3z163gyRtu1iTuR5myBIs9jLDAsX94VbBzKWdCFe22x4Eo6HwB6u+UHlXov0fnBXtAmgwRegc1gQwxi2FXB/ty0q1EO+PYo3fjUVRRb4uqBBIvpFarwtL0T6iYAYgHY11vH9Z2BFAHQ== -|1|XkE6J1VmDGdUwqYBtndI31UGhLg=|MErdYzMrj5kiW2+54K1Fxl8YmA8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJhewbT3NACHwrXa4Fk6mMyEx/fKWRHB3X68lgynTKfnOsbgV+/PiIMK0t8IUnqQiyfZq1y0op0dSLS6VbeNQG0= -|1|ipFYNzQd4a97v04XAJO9Iha+h2g=|+ZFH+Pmjr1dIf8KPTUGYVe+c4D4= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHlB3v8dYtlwCfiMUXzhiRZ7g9WVGkG4PxR4poL0JOzQ2GuzKOYCCYhwIPCfZt4rLIgIO1DQDyH3xfdKrcEFzmM= -|1|S3Wauur3VtHMJfORQ77OQ8MpeH4=|735q3DTraOIFLfTH0VK21dwb6s8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBO/4L6ItJ2SWQNU/S1FxPwFzfJTxSaBFmCtZc6CwxZP5YlzIxH1P3QzPbGJFDa8F7/mwTmrU2xEsnmgDhjO0/ww= -|1|PNscsQBnaf8q0n1iUqm1Pg7jLX4=|OxOMtCuwvFZBZpNrkTZFQWCUZT8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKLwsepgXuwJiNn2yzqs4ya0r+vn0cco6EhSAIdXFXHmjnb18BjmyBy2vD0SkWEhmQd2pzyRDG9zztdPDzgzj0M= -|1|WNmm7RhWF/R++2tuIAxZThcofPE=|LgIxTHO3hh9JUEYRRnhyGGwbkec= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKLwsepgXuwJiNn2yzqs4ya0r+vn0cco6EhSAIdXFXHmjnb18BjmyBy2vD0SkWEhmQd2pzyRDG9zztdPDzgzj0M= -|1|/wYHBjzxZECfDHCegLo1OBVvhYo=|Olic3eMy46Xq+rFnT6vm1jh3Ugo= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHAY1h1zSs/H7YF/ZwYVgjT98V+CFWhegZeBdOQM/vqRa7exUC2iWAvqdJdn8jUTV3DuJ39L4GEcieaoZgstgMs= -|1|uISHxiURCZM4vraCMdrHVSTfUKI=|2dY8CV9j2a239O8uOCCfVcRzLOQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHAY1h1zSs/H7YF/ZwYVgjT98V+CFWhegZeBdOQM/vqRa7exUC2iWAvqdJdn8jUTV3DuJ39L4GEcieaoZgstgMs= -|1|e7CJjlUgogXTsgkJ6tu9jCnNf+Y=|xkcjgaJ7av8w8n/MruwvhnD9G38= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM/N4nhgFi1eAEbTeDh++XunjyJnqDYnww8TjME0M0m8UIgHddbR5IifCGYsH9i7BDHSnu0IshE5uyWBdclQd1c= -|1|EtKWx18cm02Hi6ejivlTF53c6gI=|cAZbXovGSz7Uj22sl/m1PZWYWJQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM/N4nhgFi1eAEbTeDh++XunjyJnqDYnww8TjME0M0m8UIgHddbR5IifCGYsH9i7BDHSnu0IshE5uyWBdclQd1c= -|1|vANa8YDpABD0Obi6t+jjqFiCt4U=|ywYEMrgPAVKvR/GY3Qe52Ax7P6s= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAMtclMfkkTXmtkuPK3Yngn10jFaBhFV0ZF83JajXyB/PoceKEPJ7umKfkXt1kmIVUiBAdoQKAxkU6Z3SzsB6dE= -|1|hg0Uf+ZrcKwtDNzD5Uh1Ykpjs0c=|CfVsPFCqzdTL1puNyJZZZZzOVSc= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAMtclMfkkTXmtkuPK3Yngn10jFaBhFV0ZF83JajXyB/PoceKEPJ7umKfkXt1kmIVUiBAdoQKAxkU6Z3SzsB6dE= -|1|+BcrtQq0HBw0Zrlv7g67nQlm5eU=|RpuKO29VLZ2O+QoiIDDqOD9rWXI= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAyMoWu8D8czQlhXxjrAKwis09qMF45i6bgZ3PT3h+2806Xm0MTOi1KuZGq/dgoavIXRjccsRbXIqn+7pNwMV/c= -|1|aaUzamZKlnSo0G9keqMkhMIwuJs=|SsBSiDJR+3Ou3a3SPMYEzlVjrJc= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAyMoWu8D8czQlhXxjrAKwis09qMF45i6bgZ3PT3h+2806Xm0MTOi1KuZGq/dgoavIXRjccsRbXIqn+7pNwMV/c= -|1|SRL+8UGymbZzRqMsGZYjSaMPIGk=|brD+29aHaBporEpCXf2Ra2Dr/FE= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBhojfVoCwUolhYtQVONCOGFganIyDN/DBQL5OYnep0AUOMZY4/gOGmGrd+FbcubmgIFLbypy1L8yulcXomBBPA= -|1|bzj2YaXmW2N0ribxMjLeBIV2NPg=|Xf1/OohXwkeo0KOvAhCx3UemBn4= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHlB3v8dYtlwCfiMUXzhiRZ7g9WVGkG4PxR4poL0JOzQ2GuzKOYCCYhwIPCfZt4rLIgIO1DQDyH3xfdKrcEFzmM= -|1|umkLQngyXlG32tVt5UnWoMoEl3w=|l1jJM4jvxgiDWIH3CjU41fskClg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHlB3v8dYtlwCfiMUXzhiRZ7g9WVGkG4PxR4poL0JOzQ2GuzKOYCCYhwIPCfZt4rLIgIO1DQDyH3xfdKrcEFzmM= -|1|0mStbkganhdcBvmjpAEJtQwP3YU=|S+qZOdbv2jIs0wXncK7v+ljtv+E= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHWDOZUjIodyH2EFSykUKkssg//iVloiiiYBVyI+v2Us5NBNoR9krSaOZ0DzsQQeJ/Im0BmCfSD536LyyOKSpa4= -|1|9Pq46p61AU3z91RSV1+I60cZonc=|EIzC/KZXedMTt1rotKrrMOYzEyQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHWDOZUjIodyH2EFSykUKkssg//iVloiiiYBVyI+v2Us5NBNoR9krSaOZ0DzsQQeJ/Im0BmCfSD536LyyOKSpa4= -|1|i3ybVxuRB+RU8VtFPpGgXQ7/jqE=|c0Tfs99FtJF2p2MBZusBcPIgwLU= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAIbubLUjYZpRZ+zNlZUSicqZyUtDBmbD8BrRt5LS1A1i9IvnJTyUd+IxUjcGwb9P3W3OIm/h6MjFcSd87VdeFE= -|1|9EEiZ40S6EsxwJZ8N3v9PqKXyZI=|zez/eE7aLVU338iJ9SkEo4MQAuU= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAIbubLUjYZpRZ+zNlZUSicqZyUtDBmbD8BrRt5LS1A1i9IvnJTyUd+IxUjcGwb9P3W3OIm/h6MjFcSd87VdeFE= -|1|2WllUfi6EPm7jTc5/dUYcXoMHGY=|zA2GHN7l5+GbQtCNY1ZEm4pcWM8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPcAtcgp6aBjQnXn7PgFbaXLJeg7jla7qHsFCUZD4dbZCkUhrmFSiI2tv8BsmeTIBT+2em7S77pi2WyDJB3NYiI= -|1|grkBrRGj/oA8sCzWnZuBNFl6qzE=|5Mszr2xUNsO3ucNRZ5T5n9PLAxM= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPcAtcgp6aBjQnXn7PgFbaXLJeg7jla7qHsFCUZD4dbZCkUhrmFSiI2tv8BsmeTIBT+2em7S77pi2WyDJB3NYiI= -|1|qnnxJ0xVWwbOxcRyOoSG4/RJyrA=|UPzObdC8N5Uq0qTzIyybRGePG5k= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBftMZAslmtXQgi97zBttEiN7N3IcRILReolKVNsh0NKC2k4F4XmON048L3vb+Km0vxEBWo72EslXJH8XuLBJmM= -|1|zqMg025+sCSSMzlacnrNCmrG4rg=|whh1xi90Fliq+as8iFnCtl9fjvQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP/rgL4f9OcRgSKp8Qlh2InGr1mkaEdCeN4GE5Uk8TyBxE5eMiQj/VdWMMUco68mOfphON8qQwo6wQemBCQ3MO0= -|1|N3+YD1Uss1C1QhRk3oeZ2jIuhsM=|wNwjkXbkFtsMxhmhJxA16ECMi44= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP/rgL4f9OcRgSKp8Qlh2InGr1mkaEdCeN4GE5Uk8TyBxE5eMiQj/VdWMMUco68mOfphON8qQwo6wQemBCQ3MO0= -|1|FBLDXNQQCdRe3ynHEcdbBuC3PZU=|+P3b3zex3aXBuDxpgndtC6/i1fw= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHrT0I4YXv+XGGJ0pS1tTOJ/IGipnHxInutATmZUOluVE1hyqYuXgF/4RNrTebd/sLMMjTUhlgjyW9iUnlWHeOc= -|1|QwxViOaqBsv0wTQ6MSImRiskpJI=|KjbMQ4Zk0bGjFReBvBImoSCLqhA= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBObvszHnNWm92I9L49m6tKNCyzr25CIhvfeTbjlbU9fM9t6jx5Vy6GyeHRe5OHh1M1s1ubj0w/+wmAiOYJlkiaY= -|1|N2zTAd3EEU+Xs8DxmtgzMOqLk3E=|FryXtv8e6l3m/rJELn18Vh1zoVQ= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== -|1|5z6xvv5dK0Vkxqty6tP/kotNxbs=|PoaxRadt5RHzXlN9ZFIL0NwNTmw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== -|1|ZbGZckp8bDw4pGPlsctFixLxRvI=|JXa755khBIB0ZnDJbUTxSj0AvlY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFNzVOPaTKYf9jRgb8kf8J7gUn6SXKFq0wHXGb+b3D4poH3EfumqVW3frKnokBXQSCCazBYr1bJBBYx1WwB7tx4= -|1|teTsC2ymON+MPH0slrr7NeuCnL8=|uXxnhqQeHiY5Dcz7OsO8JQZq7as= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFNzVOPaTKYf9jRgb8kf8J7gUn6SXKFq0wHXGb+b3D4poH3EfumqVW3frKnokBXQSCCazBYr1bJBBYx1WwB7tx4= -|1|VjoVwg4+EQ2axNq3ZGljX7OpGbA=|jpEP6hOgalSXA3jEpyruIA9GXNM= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= -|1|UWArgXiYT/Ts4ud2NhxCv7v4snE=|ledlDQt1Vle0gts5tZGelOtKRNo= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= -|1|Aw1CE2fECqqrAgojCK7w+GncRQU=|g11Mbjv7Ta5qPZKOy7lKAAKqulY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDfNbsZBeI5azDXigDH4rHG3AWUv39NHS3TqeZhx5JXayXk4NefB1vzu0YaLQdiJNb/wpFtWZvAsT72imbwQhq8= -|1|64LeD/xdjAO7rCrLJWP9jN5mx14=|fTzg/7loMk76khjvDmkKtzJcaMc= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHCdkn51AYQbFshdCe05ihCqsi2r1uCc8PMejcYbOElbAioII3EuWRu4HvbhphFO0GW8lRVJzQK2oZuqs2a4fTk= -|1|4oO9qHb4a8YHexH39VPe0cTsWwI=|mSjl6GgVKItb2ddp7A4v0Lm2T9s= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= -|1|gXT1JHjJzv0WS3hRSPU3uZuroc4=|KMydZo4sEAg19HX1QYJwhoPoUH4= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= -|1|n7wko4uyvHLrqUkSsg7E0WBrTbE=|Hq2uTJrN9zYmSARmhlumCcUY58c= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNdmMZocd4wveNmOP3GisN09VLbA8jk+dgnhu5eET5lM5PCCAL+ncWKNS0eoZb80Q7AHdktrKoXIxIQBC8nH60U= -|1|U9elZyav1pcgeEp4YDt1Mr/41LI=|kJCaJW64c4KD9FIG2HbEzstHzLs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNdmMZocd4wveNmOP3GisN09VLbA8jk+dgnhu5eET5lM5PCCAL+ncWKNS0eoZb80Q7AHdktrKoXIxIQBC8nH60U= -|1|6wHA9HZZShTuDxmOEuFdS6bUGpk=|/JYFZ/reIj+JtNXQNNVe4XZ2ATk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHWDOZUjIodyH2EFSykUKkssg//iVloiiiYBVyI+v2Us5NBNoR9krSaOZ0DzsQQeJ/Im0BmCfSD536LyyOKSpa4= -|1|TCRy8iVe4QXvSYClMza2Yfp3rSM=|UmxpGVFxy8y8nxueW8uugxhXSqY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPB5+pBnO8jrjwSzWSWnYcRief8Shq7uyQk1/VD4EWz2fv7VtUeCKM6Mi3GKsmug98cOT8YW42YJRHHNFmAUL38= -|1|Ja7Rq2sYfIgBx4ZnbsqW9GDcd/E=|Ua4M0WsyBEnShPIJ5Iys02cgv3A= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPB5+pBnO8jrjwSzWSWnYcRief8Shq7uyQk1/VD4EWz2fv7VtUeCKM6Mi3GKsmug98cOT8YW42YJRHHNFmAUL38= -|1|ibII59MpfbqPb4YmUqfvas25S6I=|5d4n1PGeB+jZwHEN+i7DaNMCF50= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFNzVOPaTKYf9jRgb8kf8J7gUn6SXKFq0wHXGb+b3D4poH3EfumqVW3frKnokBXQSCCazBYr1bJBBYx1WwB7tx4= -|1|hhWQdOwz1WGw0UhwPdS7BYhbtYQ=|vsOhrtHT3Bm1wYxFEMgcja30B9g= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFNzVOPaTKYf9jRgb8kf8J7gUn6SXKFq0wHXGb+b3D4poH3EfumqVW3frKnokBXQSCCazBYr1bJBBYx1WwB7tx4= -|1|UELXjPq02100ptKuK9Y6qMh8hLE=|sWGtwbeTUxRDqJEM0GMbvjXd8jg= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== -|1|fbZPpWmk5J+1vvITE89isKtdgng=|61DbUL55x637uVoaRbA9LdAhWpk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNdmMZocd4wveNmOP3GisN09VLbA8jk+dgnhu5eET5lM5PCCAL+ncWKNS0eoZb80Q7AHdktrKoXIxIQBC8nH60U= -|1|kAFz5ftLBer/1hd8MFGtv67tbHU=|WLxHPH9uTp4gkKYvDBqErfftsOg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNdmMZocd4wveNmOP3GisN09VLbA8jk+dgnhu5eET5lM5PCCAL+ncWKNS0eoZb80Q7AHdktrKoXIxIQBC8nH60U= -|1|8KvP3PflsfmVY6ARGXmBlfA4nEI=|FRJW4a6kVZbZ+aImD+FWu1+j9sw= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGFCN3yy1pPzoeCuxF0PFS39TnRHA5txt9gxjw21Ge3K6/RwtvStyvMuBu5Ezj0TiehLBIjS33T1HJMvGHKH72o= -|1|7zW6yfhY8sRIqDKUEMU1ZKli8DM=|cbPtJeRKH8hgNBdlMO6Yg3ou1wk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGFCN3yy1pPzoeCuxF0PFS39TnRHA5txt9gxjw21Ge3K6/RwtvStyvMuBu5Ezj0TiehLBIjS33T1HJMvGHKH72o= -|1|q2X8cEvRemusgd8i90E86MlRiHU=|lX2EmXUexGk9WTSLAHl+EudfJ78= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB+LokNTenJdckPQZ+iPBc2awmkWFCQdFL3AJ9bgfHXIPFbMztJu5g/hjbB5aQdPudpxv1CrpWcyyzvgmb1qdVo= -|1|wUDCT/vVTMf/lQSqej4cQWAUA7M=|X3XwQa1OnLeT99ycmB171nG1e4o= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB+LokNTenJdckPQZ+iPBc2awmkWFCQdFL3AJ9bgfHXIPFbMztJu5g/hjbB5aQdPudpxv1CrpWcyyzvgmb1qdVo= -|1|Zt2oEyNzQZX+X99ZPUPbfkJuG4w=|02QqzClYjTfs7RMNgaTbpqnIqo0= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOf2slGQs78P/qBCJv36sAAEN544s6fsiKeZfTswDx+GYwNSIrT4H536pyjDi9xL3Zt8PhVHNuXS0EmHrhKGQA0= -|1|ZBeLquLPBizh4B49W/rx+qWQ2ZE=|5/bu6qC5odfr2rh1ES/7oRchtLQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOf2slGQs78P/qBCJv36sAAEN544s6fsiKeZfTswDx+GYwNSIrT4H536pyjDi9xL3Zt8PhVHNuXS0EmHrhKGQA0= -|1|cNTW7cBL/pabsixmTWrHERspR48=|/9olIR1rxd87+qncnbTh5AunUl8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOf2slGQs78P/qBCJv36sAAEN544s6fsiKeZfTswDx+GYwNSIrT4H536pyjDi9xL3Zt8PhVHNuXS0EmHrhKGQA0= -|1|YDOBwhyG4/SrbCnvAitax6Jl3cw=|8ryF3xT+krDs5IFJFlhV62hwAzs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHIOmwK6H8uKrKmV4GlKlDAkAUbJyUstYn0ZGD59U1X5Tkrxc84dh5BEIxAtR49YUb09kPzUQieKHPdNZqiPNjw= -|1|6QXFoikMw4uNl4zS4wfsPAX2Xbg=|E0RnWWhmDG2ucaU4teZiTgKhTGA= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHIOmwK6H8uKrKmV4GlKlDAkAUbJyUstYn0ZGD59U1X5Tkrxc84dh5BEIxAtR49YUb09kPzUQieKHPdNZqiPNjw= -|1|PsRccDFS2a2TARaDQ23kWHF3Drg=|JX4bIDXMIFjHk2vd92E3oDf+wEY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHIOmwK6H8uKrKmV4GlKlDAkAUbJyUstYn0ZGD59U1X5Tkrxc84dh5BEIxAtR49YUb09kPzUQieKHPdNZqiPNjw= -|1|2jbzcaFnVOT7DLqLEBOb9THLT5c=|O2Uhkl9Qacv81bELl09jh4tTs4M= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ3+krUkaqvkhSeJ3i8zztEm0NUAPXeRTgnx6eB1PmT1+HubDgDkUX1uLpzxkt2sd4BuY13bxz8lIWYRPLv5fxg= -|1|hkDAjX0/NJMe+5eF+glqk7mCE4A=|ZYZe/yV2QD9rSYxyupYuZ0grt64= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ3+krUkaqvkhSeJ3i8zztEm0NUAPXeRTgnx6eB1PmT1+HubDgDkUX1uLpzxkt2sd4BuY13bxz8lIWYRPLv5fxg= -|1|73IeS+4ApoLU9PFYtk/CG1OqhC0=|zU2bMPayJ0fCBKUuDazqLmE3XTw= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ3+krUkaqvkhSeJ3i8zztEm0NUAPXeRTgnx6eB1PmT1+HubDgDkUX1uLpzxkt2sd4BuY13bxz8lIWYRPLv5fxg= -|1|lhBvPbzJ0BmSRkJ0uUgaezxSdB8=|aoXqJPab0oRBtoWN/D8kvA6qjDs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP/rgL4f9OcRgSKp8Qlh2InGr1mkaEdCeN4GE5Uk8TyBxE5eMiQj/VdWMMUco68mOfphON8qQwo6wQemBCQ3MO0= -|1|sFp2uGn8J/Vf3wb5dE3WJFZDG0w=|Mm1gFAh0DtsmE7vZZrY5rhrRjNk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBftMZAslmtXQgi97zBttEiN7N3IcRILReolKVNsh0NKC2k4F4XmON048L3vb+Km0vxEBWo72EslXJH8XuLBJmM= -|1|FyqsJRPsN0WQEdmLgRnnbyocdiI=|Zu5EEWJ+mxUIHKzeUDG1qFlC9vo= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== -|1|ICI740nkLGR1E0eGaO/8ZfVXo44=|nVttxOe5qIkQFEdFdEgd5IvV3lQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP/rgL4f9OcRgSKp8Qlh2InGr1mkaEdCeN4GE5Uk8TyBxE5eMiQj/VdWMMUco68mOfphON8qQwo6wQemBCQ3MO0= -|1|rL72DAW3AZLdebWDc9pl4aw3SLQ=|O82i4pC1VcouAyhPIIp3AMV3z6I= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== -|1|EUMnkvjtvnbLjBUhg+7OguriQYk=|9K7oLGS2vVP5SAMNyJIstuxj8as= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKHwDjgt/Zt48sEvtjrVoVlLJH2h/2H/bRhAkVmQgQTMl1Y9XKzs5h7LNHtI3Msq7Syy/34s/4D1uekE/PeEVM0= -|1|2/jEAFY7D1CcyAlEIw5DJbRda+E=|Tf+7+oqYSXwCCa3y6TwXmqyxItU= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKHwDjgt/Zt48sEvtjrVoVlLJH2h/2H/bRhAkVmQgQTMl1Y9XKzs5h7LNHtI3Msq7Syy/34s/4D1uekE/PeEVM0= -|1|G2zEaxXc0OmsH70Dif+ekxY4k2g=|ig0s7xxZ1T0ZYhF7QZ547ostxuc= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCkK1QaseDoGfW37ePp/9cpb5fayFqFiARt176u9y4FvcWKtkndal0w2qcYa/aiT6PXi7pGXzrUNhuGkhyYnFDA= -|1|Pb32AOsEHq9b7HXaPoRWw0MJe00=|UML0v/6LSgw1/SsvsWzF3CGS6Vo= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCkK1QaseDoGfW37ePp/9cpb5fayFqFiARt176u9y4FvcWKtkndal0w2qcYa/aiT6PXi7pGXzrUNhuGkhyYnFDA= -|1|nAsrypb7IhFsysiDQN7xzv2pqIw=|ZaOc3/WyEGuGleXOw5lF+ZfUMJE= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKHwDjgt/Zt48sEvtjrVoVlLJH2h/2H/bRhAkVmQgQTMl1Y9XKzs5h7LNHtI3Msq7Syy/34s/4D1uekE/PeEVM0= -|1|SRsBRKCCfXmmZ7Ujzk/wQPkJ/fk=|B+FHEx8PTqcCJoi4wnEidqJf6t8= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== -|1|zqnOzuGdj9kWT0jGc8Fdt+OuY1c=|1yI5uUvz+ow1v5ppVdZ+XExaQds= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== -|1|U3GdhG8t4Z3fTSu/lyokB1M6egs=|7POfk5ArvJUQCtxtKi6njKOVZOI= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== -|1|LujDJmpQE/K7ESBe45W90EJuRxI=|noaCbM3NrlQevWiNQosdckno0Sk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP/rgL4f9OcRgSKp8Qlh2InGr1mkaEdCeN4GE5Uk8TyBxE5eMiQj/VdWMMUco68mOfphON8qQwo6wQemBCQ3MO0= -|1|2xEIhm5VLoJH+Oz2z8+V/IThkho=|ivLLB8e3oxTXNwn/FeiJZfVKs40= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCkK1QaseDoGfW37ePp/9cpb5fayFqFiARt176u9y4FvcWKtkndal0w2qcYa/aiT6PXi7pGXzrUNhuGkhyYnFDA= -|1|1yoJiW82Tb0xMB7/JeC1w3G6I5w=|voepd4IKw8dhL8MgykSTSlHI1HI= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= -|1|UWVb+icrp7ny52/DNHQ5eQ3jHVc=|G1DqVwJSz7vxUR1rpn+T1WwptPU= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= -|1|3L/hJKbuWId4maRoXKMWU85GwdI=|mZWnnrFxR7/Wb5TfUb04K0qUhc4= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= -|1|5E1HBtOcHE5KHah6W3Wx1oBtc9g=|o3vwa7Lb0C/8Mcuyn+/cgPO7btI= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWyaDEYmeUNfG2Qg8z+vrdkTLs50iE3vHgXSEL1iiXlgj2bu9yVikTHlJQ7anyfQdCmTaUaA63jeOWFTAuTu4= -|1|q2C1+zn46BEYQLxjum2fsqtyJfQ=|h2wpdoZL5kqSRmaRbQRQsMXL8iE= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHIOmwK6H8uKrKmV4GlKlDAkAUbJyUstYn0ZGD59U1X5Tkrxc84dh5BEIxAtR49YUb09kPzUQieKHPdNZqiPNjw= -|1|0SsmWOSoMIY/U7Gm+w6+M4WWugE=|/LPM9biP8UaZjZuSeHGshIOBH9k= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHIOmwK6H8uKrKmV4GlKlDAkAUbJyUstYn0ZGD59U1X5Tkrxc84dh5BEIxAtR49YUb09kPzUQieKHPdNZqiPNjw= -|1|PMy3Hu134U9vhGtg+LWUVFt3Vm0=|pj1Ji96bOa7+9Vb3VFBhWMEs1wM= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 -|1|IJOCC/UmFGyZiJgCFoVXhFtN3jc=|kM4unFFbiR3KeepyaQjzoOK+ZIY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKobTkssam7CBtB2RDTKJ+ibMHLX6qFC5qaAsVbsIWnsKNDrDhhm/c2VMwGLi7Jx+1QRzampOiAwSL95tHMDIhU= -remote.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Znlg9LWle4Az9Z07yNYuoLFZk3TQK8EnczAIFVEiiI4i6nxpzVPb6Oh2VmMqsxoGeufPg5KVsJNvCYvZsl0bzOzgujydUAnoCYjeruw41aOPaz5vbE4CYZAAlYQDw4Of7VNiyq9tMoN2NiAa3qFR/46SeejOE18ioERDWIkIQ0f5+5FIljjq3kCFyGMygx7VhDHduS9qYFyb/yjWvR4lntC2QeznfmFIGsEfpOctchd9RzS4DSFNf6Dz4dnpGYyy5A86SJGx4yzSef0agX1E6MrP8ZNk3tO9nBAcNvO5MmXOpVqhdOxRqw5fm4iZtP4tCNK1+KpH0BjQWcqOjJuX -bl832viz5x.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHaV0vOQVqV0Sj6V0u0tKTruCwIfPjwNf4vec3/3PynW -bl832viz5x.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCiDJLPAUDw3kPGyNlJ90XmHuIgN3s/Pv7vQ76VfLYSa1gZEKhyIupCmmryzeYBAet29jA7vwtQG1Mq1v9gZNkUDK4AQUBbxb/yrEPytlRUdy2/22o5U/WIexNlfJujlVy6xDivWScmN1z7pZsh84HbwPMtAs4DRtLinzaHl2d10INHq0OaTtNRk+Q5qyeZ/UHKRqzTCFwpG0ItlMiJdzbLXbUvnHVfUTPppvfWg7qu3VlrfBmt99ciOmElVugbacc4e/hZHw/d6e1wQw5IvpKOQEpNXy2VT7/qkIzEGQVBo1pbC4FmZ5g+uixQ3oTthmZO37cMdT0hk9tZBSx1nDb9 -bl832viz5x.als.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKjxl2e9/aPSU5WTQifxyXEbMs2h4I8zUUUMx1LR05gk25wgLD6FqOiynWWOGmXXeQ+mqOQSGfKkdbr5YDvDZbo= -131.243.82.233 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB6cYzTQfymXWDn9cNcoTLRFOcFgfonxvKAc4FuyE9NX -131.243.82.233 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUE4ZSzUvyT7Dnr51B9DnK8TkWhmsLWfuykJr9fFlgvTq9FYE4nGzasYXOcsbMj9UQIsF5AxVYZFKn3ADG5MCndudfOFkqLWKt23b40QFr1IDhSDMKajgAm0qQYkAS9xGRVcrhJ6HOPY/rxCGRF6/62S+cgTMfhzmmW10/DbPbQyLXC1VVxs44fMesM7sxQfDQpiy01xGnKm8kAVGgN8Bx0bAu18d6+KSyK318CnyLvyjESSXQWmwoNjfMr606VpwCWaVe1eUZ2Eg3FiZR1Hm2UB75QTb0EexZe+Qox/ehPwdggO45c91WJW8y3hob4mxTZyFn/Lm297Q/1WjAFtyX -131.243.82.233 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJFfc4BdOFbgnses3bcGoZNiY+TYjxsyUEIZMmeGCipB7qBUgM7rx8jlpicD7YR6VInMKEVTBKYZ2nimvQZ0wyw= -bl832viz7x.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB6cYzTQfymXWDn9cNcoTLRFOcFgfonxvKAc4FuyE9NX -synology332.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFPPApO/SLT93CBqZTvSU1E84XRXqVYrblfq2OXsqLwL -synology332.dhcp.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAJQxxpE+Q7cWd2/zLja6iGcTxTwZrvYhzcyPUEm6k+4h0hThXO9ch0EbUkqvlqYxz24uXCUY87+PuBO2ZcWjxOHHEnQTekgrkHXEY9htIn+O93GhBEkrZtjJwg98WIX+aNYGvNxtHoBeRrTFjW3Z/Ob8fq7ooDBmYC1PeoWn1/rFHhuWOTBhjY1U/AwHOsisWFhU+H5BdGdQflIlNRH1uNAwEoXskQ5vgNJfqB4yxw/2IoWkGrKC6wAYbBsfVIFK/dxnltnjKc7eaL7JOee80eci1RJ08jNp10INAZW9WEVbIpSr0EvllyZfneJuKQwgx6HbEvFbwGiuBEpf1tlS+QEiUYhlYSe5bkNfVA3zWE+2yBkl8eBUkphFc0wspkAtJk7sgsCLYe2q/ZHue98a1dtuIkVu5+Zz3QcUgffnNzq2G76sz8C8gCDz3rATFnTFeFLReC/mM56K6QgUbGJsnYkpcx382iissZ19v4ie4ouuLFGiF1h55J5a0gCEH+FU= -synology332.dhcp.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP2QKUNuoGUiGJR1+jI23wx4JMZuAKUg5wGdJyrS/klVsOt3BAw+l3OSYHYa2AkHa3zT9jmdxs09r0G9HzHcg2I= -perlmutter-p1.nersc.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDRDn86LRaU3Hl9E+OTwHtyLhLRvjNCF3e/LAuRu/Ms06FNsXTK1iIb3QMnWjzzFd4CwQwrKYZy9umHIJOyCW/SbEI4GRPrr7NJpVOvkGKVBqSo5aYY3LhqCqKgsX7lbnhwAyvYvHoy9qd/XyzjUMwvUYf1G0dmkIN4AGauEUysn2ixgfhi6+sODsLI9fNrZftnTpYecw2NPP7cn8Dwknh0Fw3450FaXZpUryghdsZp7VvtGwVjQYy5C2PFj8GKqoPh5pIrq4R63hx0OmQOQlRp8cSLtElx1vNzbTRMh43Te3/SJQ66h3sG8AgsPejJgPYEVKJhLpC8CQFj3mQFygcBcp5jOfNnEH2PWZ2Xmzi1p3qrtj01ZML6tIZX9GSdIPif0N2/Zi7+h2wsC+/d4gWdHwX0wQ+o3gYVCKl1Ipf3HJbQ+ZkJ+SecV81nWmu0sGP5nrKALYrQjSwsoO1yFxNhzFk0+XztFoSrMVsfLGG0n4ahTc/yJdB9/VL2/TcujiH+u64cDE9HhOw/JrHtUr13KC/0giaSc9qbjjdhKaXTDcdz4v9NCCqa6jb9R9+MDuufCJy/hOvvYqg99iCGAS+fKPvxJQ3byXOmzZ/dNVw0iz9jQdyTMISmn5BW23YQBtu9RbA8uvzhlV5vsTjtjadbVrWx4VEFgDLtBy8E0kACWw== -v-als-rac2.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 -v-als-raccomp1.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 -v-als-rac3.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 -v-als-rac4.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 -v-als-rac5.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 -v-als-rac6.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 -[localhost]:54100 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGNu/cTu8uiDHOOseEJNUV1r7trl0c3MOJXSxzaotrQo -[localhost]:54100 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDBy1cBmEP1wpdXyfUhyaczXYDGUHj0zo/1aynOfKlF7de9NSXjngYWpXFiCFPqT8wOop9Pg7YojO6Jtv/PrxUSXfZHSBdj4Jui8ADP67RhL+V0wAZpUTQ/DKF1eLmh71hcC+3s7NnVNNNpLiN0wjpT8RM3NBl2RBrbItRaXzqPrd/hp0qRWqZqRf8K2fCIUVq1loarsuP9/zacgLPx8eOrbdERMtxYdDpXOGSprt6wni19PLGEXnOYfOTwujkNQ8jbQihkJmMrnm35vrkwiylNYkpcfneTckRHcT6BkVBWM4PbIHxIJzfXq9WKLMI5JYKB7FfTlkvD5cJFY+/L11apHBCwj0ZYNIFhByGtLb1/EZxzsZiilmAVcg9kmcqg/tWdxKWM69BRXGkVk4gYN9/vvR4xmm0NNS7FSIlotn3vb0coYtGrAaZWCj2/r7SZ59Sq5FHz81vlqAauKbuleSThlED5S909VNkKR3XFV7/XfaNvxPSmm8J/9nEST/0345U= -[localhost]:54100 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGLhGCRSWGKrzLnhN9G4sAj8mNnCjkhR0qcnaEnT+6iAkQt4lFQEkYrHozfPweM9/z5nU5CPL0rkIiK7osszw5o= -lovelace-als.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJDNxI+uGlS7g0JYSYnrJl5d2aToFELb4E6jJsu5mGl8 -flow-prd.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILfypojAQ5RAOIALr0Myjmj+q5kNxY1aqEFOlVYYvmzX -v-als-rac1.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 -github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl -github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk= -github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg= -saul-p1.nersc.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDRDn86LRaU3Hl9E+OTwHtyLhLRvjNCF3e/LAuRu/Ms06FNsXTK1iIb3QMnWjzzFd4CwQwrKYZy9umHIJOyCW/SbEI4GRPrr7NJpVOvkGKVBqSo5aYY3LhqCqKgsX7lbnhwAyvYvHoy9qd/XyzjUMwvUYf1G0dmkIN4AGauEUysn2ixgfhi6+sODsLI9fNrZftnTpYecw2NPP7cn8Dwknh0Fw3450FaXZpUryghdsZp7VvtGwVjQYy5C2PFj8GKqoPh5pIrq4R63hx0OmQOQlRp8cSLtElx1vNzbTRMh43Te3/SJQ66h3sG8AgsPejJgPYEVKJhLpC8CQFj3mQFygcBcp5jOfNnEH2PWZ2Xmzi1p3qrtj01ZML6tIZX9GSdIPif0N2/Zi7+h2wsC+/d4gWdHwX0wQ+o3gYVCKl1Ipf3HJbQ+ZkJ+SecV81nWmu0sGP5nrKALYrQjSwsoO1yFxNhzFk0+XztFoSrMVsfLGG0n4ahTc/yJdB9/VL2/TcujiH+u64cDE9HhOw/JrHtUr13KC/0giaSc9qbjjdhKaXTDcdz4v9NCCqa6jb9R9+MDuufCJy/hOvvYqg99iCGAS+fKPvxJQ3byXOmzZ/dNVw0iz9jQdyTMISmn5BW23YQBtu9RbA8uvzhlV5vsTjtjadbVrWx4VEFgDLtBy8E0kACWw== -franklin.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPCxtA5uLx1nEz+O2eywalOsOsV3yaYVkxxHQyk+Y55u -franklin.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrS8+YYTPVsYQ2NA4H9JGsCZusnubOzFPusm/iag4J9Z8anLsJYHeLeLmpWmJ8URc4JH843qdhHi918utlBUr6Ierjxp9b7Azcqj/804CVtHDhW3ABJTzaLOta2xGFP2E2AeOeD3dkQ1DFbr+wfclahkVYbH0oK6KsNS2MCspDZ6BJu8qed5czwQPCr824uKQbAvS41aQWKREDLHRAgzZ8tVhz1f93b1CLfcN0WgEGm1BKqCgDGCExyqWbVi9nSfNPrPR+/ChDVXiOMmow2yargemyJEtt4Sr7gY7FnPOF3+0kYVZ/fQKU30PhUb8/ZhriSQKJGLGQpdTjTipEZJAdDtOaXvDWD++i9iYRLsiUKn2l1Y3JrC4fR9v9bE7r7ngxtrC1Hwc4zXskSzMsSGvBAYi4PC5mxf8rR3NsA9n84fe7XvxworGyX+UWJO7XL8YrlCSNebMy28t0BoIwEg2KQn3+IC3600oVTstvg9MpP6XeGdqDQ6TjZeczZOuk67c= -franklin.als.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAKHzMUjQMTwzDn2YNFMdZ17/R7hX+RSJluSutgWy15rMU9wc5bdAOSkJN3BT1W+7vlKfzroszC8V1ERcRiwm1M= -lamarr.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfz0l7TRR9dwXdPZRVTqkOFQ3ChT2fIoNeb5BuJtTkf -lamarr.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCsgU/h61zIwsxdBeAyZzxjcQWZJ86JgXMcBNkbX2cP2t9CgWKWxlIN4v/veWL5lPO4Sij6uFzWXnAm4JqHK4t23qJ2aXPzo5YyY863qNVbJh7G1sYbkqBOmTDI1yY7Of8RVSa4GmIU+DBcrVfJcSzJIWrQm7XI0KIIj+CSu4N1hHAViQ2tlTw2rklwEGbXfnbjzHoDuxJHCHumJaYzQvcA2sg2mNiZnQrbrBPl4WXp8tqwb8sSeswvkKJsdMrUyT+kCQxLZM1TNOmCf2hdn1en55LgNxBQLOj8dA5JTzoePwDl7u3nlVyqRTOO0sGUof6lOholR8gveV/2pqMISXtU9M84x41pBrC3FD1rp5dgxaDkNjv9IUkym9hW0IZR96bFgEcpiwBe3iJwB9gIW9gBXQpMXzAK3KsHUa3Or85JjAVjh3HpJKp6bLowwOZshLw7BH4USZlVnNMwu16rNMxwlSwkcbNMYc7hFTBqEIGDqPhO6lCZjGbM5cLRDGC40CU= -lamarr.als.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBApUPo5RUh8p6ud8FZGkm0HM5cxwbGQpWkfO1+AAcKR2AjOaqm66jrGN4ng/XX4VifqVLGVyQb/oDQ2uq1wCB6U= -ochoa.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAVyt8IG9RdYHbu9CIbQ+nmYFDtP86pkij7CTj7oQETr -ochoa.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCn2DSKeBD3DYx8SzfwVc0fisHcvwCjtkt89JzBS/BQYERIUbEiN4K08Dj5V2iMbg39oacsh9quXHIJfnK49YTR2B+yqiVg3xvxu50UC+YzWfaRzGVJltrivHyI0grvzTlveCVcs61LFieo21KyI2YSJukUhVKKJX5aJ6WbKkFeNoCbh0VkcdlwLl05z7Q9iQMTmsas5FskhghamMaCNKSnShONI9UT8QXQBjM3xvhLubW4w0V1bqfRpEXMJcidWfvitV5fR3IQ/0FX/EtvHHZ2Yvex/8KR76clcPdP4I8V9j/ruU2g5n8q18uSSCIqBo2KXCL0ew0QdK0xPBom+sgUEDh4m1REP3xS5ydyypFuES5F6RiG119Bro3dgklhBPeq3mw2T0BSUsnM3OCQbHrdkUCOVnJggy5cEsVDA6yBvagXozQl95TpUAiASZBgojM+HGFiuO1+OmrA1dIBsXspjHX8f1o8cFB2ssNppp5xUBVhrYxMKQ9j9lxqEkMpeR0= -ochoa.als.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGWt22VlxD83LzBnKGLHvyh0OlPRh1+nyNOC0vro20TYbR9rMg7hqwjwFxQzVrB82YEVKKIfHLKIGEG0ZnQ1sDU= -[localhost]:64031 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICULZSKozTfldOUE6NPRjFfKOrHWi4fBs+UGkLHqnnl8 -[localhost]:64031 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDFrhe2Ck4/kqfJN082qGBOGwsL+FcXmT8CHCbn4bOlCXTlSJlQTf1pJfUm9vqHDXs/oHPpUkMVlmjbEmyTfdTJVy2YSMBM4tsQK2G0+YmCxmz73CNYhN1R3t2vqwL+5DWVv1Kij74jC57KLrNVk2OBlNq7VL5+DEx2BQDa833+RNdSq+OmD13xoTI/XGW/YtEDpc+sGzPX6/+2rUL6Y+qUoUFzZZKXNt0X58CDSl4SCv1IQRxRP/RhuoDlmeLxGWodYQpGQNX3vPb0dmkhu0jAmuEjLa9MQIqBYPsJWiM8Ng+piVQQPunkiaNyCvTnpmyVhx/359xHUjwIV/EsnpghJlx29oNZJpXPFcV7KCSKeqADyiFTiJ6Rur9ogQwEpKwDu2G4v9LlbCWrMy9shIIXcrR1sg70Ojc722YbQYLhqP06I2Jg0h7mZhGsbp7ze3d7UHTADp7Cd+d9hkLungRVWNIGt1gx7ZmiH85+S1/tBzhPxYD0ehioXKBxYUcTBmE= -[localhost]:64031 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMCyxONjlpjBh69dg57l1TCoQKCTjJjeleCOa9ypCUER9VAUUvvzP2cBPMgYvmGTZ6STVtsx7CoE8aUIw6Qx4ow= -[localhost]:50606 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP1IZ+wx8552etEN3SrSYa6FUdiCQOiAlS7OpXeeRkp5 -[localhost]:50606 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmCH9YSeVyuVQTegkdEaC3p943RIux59YI1mtcdKHP2v1FigBU0c2bQ8NyKHv7miFBBEBvb1JRWagaP+2e/Tg9PCpHABaKWb63qymCr4zKhvzIr0/lCtrAv+Q0XbrihhG0F/vXkW2bLOGrCNyZplsj27lcSZqqes0MIt9P2Pjy8FcopBojYgmt6fYTVFvgxvvVo0UVgNTWXmDIrbIN6ijgbJEgIknRalfBlM8l9RaYMaCpwNqY/L+lK56W3UsBEdj2Gipg5InBigZtNAsBvtmKmksK68Pzqv7ZfZnYH6C6tuCVX25gRWcsl2yF8gWVk4OUE3qYCTzcUfaaJYE9VWnqML0pXwJbtw+DbGgvRzdZaSL5wIjn9VC8pcrT50n13/vFR95bdzUtArVUgmLulUqb80vwFsnX01nvbqGLAGMNZi8NUwEWzk71dSvJ8j1aLNFyQ3dfcpq5l4HHd8d93K/xN5iqOy4ZRxeMITxAoqaw0g2PnUov4eP0J7JR04KuWIM= -[localhost]:50606 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF3zhdd/D2IJbaa4JmxJAJjYndtOZGeFylm6hiTSS0e+zP2QmIh2fshw0/iI2GJ/wqp/23frzzK0aNYo6+cCuP0= -[localhost]:50643 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGyiavIq0sORWUuJYWvIhM4Yv3qGN1yWuspCp/mWPXNy -[localhost]:50643 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7D6aEI/0imJdSPOSIGu+IRX6AnUIoM2hOtAKWtxiUCBNLrpWRv5RoMAaeIGRmoGgia006vS5b5gIDidO4ozPGjQNT8kXQr7aVfpny6gCV9Fz9bY1KwFaxJW9XeReAnEVGSVNrNe1ZhZFIU0c6GoxPaKodRl/zz0Wcz5SGouIMBAfUy/OriBZYXBttT2u5rczPAS38kAxUjQ8dJ3GzEUN6QaWbaBSBEpBAuZ/s6zc5AkJOtmwfYgN84IBgd95EQ9hEh5mUjDnDuE/v0FSd/4vJlRihs04hMDhz5YYGalPy+XVw6Et+9HyHxAmLTK3+ubFeFEF8YRoSEXBDTm6FF50jjiXpC0XxEdlRhGP3iDd2eAiGCtKl7LD5pwx2MF0DKIJn44iUs1rWe3d+aWGHIZ/r4nM7oW99i0+G7w4dIDTcElUoAG6HYV1jRfTUm8OKrsWIaClplg2VxxqVofi232kmQ2wQVL+vliJQOet8J9ebGGFKAjBwQH8zMoq2kBRbV/c= -[localhost]:50643 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJfugyIJuOr0cxuiNO4lYd9Q4w2cyzWuJobMWDaTeyuZfW6RuU1iYd8uyBGhDA026K4FWk3AIuZY7NHi3oWppdo= -[localhost]:50869 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP+AkUXXPgat6VT+J/NDXMwaeDmP1N4YIwsuSp+e2DY1 -[localhost]:50869 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCkeOHTLg/sY5kKurGODAhrDvwek0cnoAylud4ZSVdpVcSqVU3UZrtJEi0GGiAkmBDp5E5iqKSO3FNvD/BAUEuD+94Q527+chDQ/WY/jlpu6aN3O9HYnHXC/QC4ls7jSefuw8rbQMqqJDL9hAI4jnq8uMGbU0hJo3Rt7rWKuuoOiJAD4mbBgzqAQKnbi6o5U9bvuo8IhUtLlh3wiDI82GFmPXIEc7PGE7cqzMJTPktPK2ta5kt+SaO2ELY+TjZSnOCw5CNojoeu/RVBWCHQExQlCJfWutePTfJhn/TSjw/ZwwrEvp+h2hBLTDCY64e+jnTc+dd1Pzc40a2U74FRCrhNEnoGDKBtCPVqaDl7yEx8lRcENQFScCiP771FPkMkwbZXqQ35LdB83RUDmv5xXqgVZSr+ns7fzz0LXpprYlizeDc5PP/WbNkP95JVXCEEs/NkYXp3RZ8ijwIBeTxKZ4FdnIienYWSvmnQvQoxx/CVwGZsQGIUS3NWjiJcfx+NGo0= -[localhost]:50869 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBD/LMEd3POm1ZzZgNGNo50OeDPCCINivXlRZO9MHIVTctZuUVH/vIT+kd/Rfoapvg6ckNnHuRDQwHtRVoeBUZsw= -[localhost]:61867 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG1a81ia7HFOKpkoaFFOZcSqURpZ+SmphsR2RIn5HtzT -[localhost]:61867 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCiGCLgD+BBiH/IGMoaRrpDNCLxARFnQg2O1Rxo23kNGQ6+u5pkXXSEGZL724BlW08swtgRo9lbphOeI/ZbgF8MBu8FcUe/MnNBx/OiT88bRANOdjHGssY2s/SrnFAf/GznFk1BntIOorYGoi0khPVdDeuh/ekcgudzv5IdgBBFe1cytsFakRSfdHhv1ZcbMykApRKLG4ng88b3JH+1N4eiKA9g78UN2P7vPkBLaGVibz07TUytaFC5pKd4+5ksP3RwXs7waq0uKfFRCsxUSKfYXBKMgkOCaLz8Mkw9SmWrh9Z7rfeWp8khhWOGP3ekYAOqp2Zzs4of4chav41+ED3PU2k775OmWaFnAWDld+bP9g8VXB8BW9SYvfGb3VYGgyBVmc4tJQF8mpJUENefnQZD8Ubf0MLtWUUxOe90WCV7kuPyxASwGw9c4HyKs5h+lM0QOo+l1k59LSlQwNzaTyRoHbKvrZtlcvOBGvRceu4ZTLWQH5R9JBK5YbWilcagTpM= -[localhost]:61867 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPnbl3cFAguwZw70X31/efrGMuyUi6x7Mn848l31f9OBJM9IjyjAthj0neWb/zVJQ+fP/agcliQembG/ZRCw1/Q= -cosmic-dtn.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFM+QMMMaL9kOBrnnM4+1RxRx8IJzaTOS0ePmzPfHci0 -[localhost]:60547 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJferFh68ukZ91FIa7f8WLpmK5uF2f7NweENiAFrAc/Z -[localhost]:60547 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC0orq5JHo9ld7A+IosUQo8w+unCOa34K4r1PMm4adzAZJJ00hFecX9MVgE8fDCSl07axTKBAjhupU1qLjFMOMwh+iyY9z764wPn/RkvmoUKF2h3CPQ2nEpaiyQqEow3SDZL+zVqPTkE2KJtD5W4o5V3wI7s9B0IAe2eDEHJBtY177ctHQJnUXjPc1js3Beel4LtXVBOErTgnCyh99jfk16fMguyNtmITmR2GzhaDW36VOLxsSUhmRoS5fr38zXNVk7WCOtQZP/xoEXt3pPIGHP/wIaaiu32ae2IDxigUU74CMyPP4MYT42wDSccVj6ew/CsVlduxjGPIR0FtSWDqO3Edwj/cpjsubQXwrVvZ1GNDnyCHVGLi1iWOI3Bl6o2MEOyg+a9waUWdh9emyN+EU3Knjv3AAO0D68LeMeQJyDianCcEXj8jj/ZvlWl4Bk0Hg6khJNeHMoanj2t2jcFa0qNbzHw34BKndDHCiZZxv6LSlNybgBZpzhzRhH6W4cQBU= -[localhost]:60547 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBJuKZukZ3GFpgoJalYy2Lh4EJOC2E1B4WQxUIMdrtJ4VkEZKQ6dT/0w2/2IYp920PQdXdwv3sgvWnMxQB5Cz/A= -[localhost]:61256 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxKO3BcSQnKpsx+9qJLXMn7h91gnu8aqrxVMGnKX+Zd -[localhost]:61256 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDL27gLM5+VFhzwhE7FW9+bi7vxffRfkua3U1B+YR+MioAwXgO+IidUpQ5CYcJTIKMcNEebRCrMvJekurhb0wKSFm8R9vzuIoHAS/E5r/ebGNhbi+ozV3tCahxEEl61aqR2nd5seCKl5X+HQyhO/vk1/4pK6R85udplwvdY2Uv4kl4QfOsZFlJ0l4aMDHl9/eNyMCTTS9WcIAw7KiaZiGvzigrIlRI5rFiW+nxGqUbiP+90HrBY+SMq8sd/O/CWE8Y1jahkc4PU+zUqDszp0tbbCSz3u+fzaue1svoGYc0wfL1omaDm5PMeTPJG+MgKqwUEw5dnVnTJqCarvPf+VZ09ZJA8roSSiMCVyydNECf7y2VDlyQTs8uhn2KMd9OIGMI0BuU4PfaLg08OToVPhgB56DPpDHCP1VxkGmu5dP9JgBT2skaavwzlu5nblfdKbtDVEybjjVQeHP6jL2r3nICrJlefanT1uDEv2M1C2ODWA5FIzDfvy61rbZZ7xhB6yp0= -[localhost]:61256 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMBCIm7cm5j8SQulTk0ZRlUyXIxiux8fvYJKtwSQzjik7p+BIXYbWuNboYhXxOzyS1ks8sPMuHHKcAiuX0ZWQpk= -flow-microscopy.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILfypojAQ5RAOIALr0Myjmj+q5kNxY1aqEFOlVYYvmzX -perlmutter.nersc.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDRDn86LRaU3Hl9E+OTwHtyLhLRvjNCF3e/LAuRu/Ms06FNsXTK1iIb3QMnWjzzFd4CwQwrKYZy9umHIJOyCW/SbEI4GRPrr7NJpVOvkGKVBqSo5aYY3LhqCqKgsX7lbnhwAyvYvHoy9qd/XyzjUMwvUYf1G0dmkIN4AGauEUysn2ixgfhi6+sODsLI9fNrZftnTpYecw2NPP7cn8Dwknh0Fw3450FaXZpUryghdsZp7VvtGwVjQYy5C2PFj8GKqoPh5pIrq4R63hx0OmQOQlRp8cSLtElx1vNzbTRMh43Te3/SJQ66h3sG8AgsPejJgPYEVKJhLpC8CQFj3mQFygcBcp5jOfNnEH2PWZ2Xmzi1p3qrtj01ZML6tIZX9GSdIPif0N2/Zi7+h2wsC+/d4gWdHwX0wQ+o3gYVCKl1Ipf3HJbQ+ZkJ+SecV81nWmu0sGP5nrKALYrQjSwsoO1yFxNhzFk0+XztFoSrMVsfLGG0n4ahTc/yJdB9/VL2/TcujiH+u64cDE9HhOw/JrHtUr13KC/0giaSc9qbjjdhKaXTDcdz4v9NCCqa6jb9R9+MDuufCJy/hOvvYqg99iCGAS+fKPvxJQ3byXOmzZ/dNVw0iz9jQdyTMISmn5BW23YQBtu9RbA8uvzhlV5vsTjtjadbVrWx4VEFgDLtBy8E0kACWw== -[localhost]:50557 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfmZyzUQd0nTpEVTEx/+8ZmR/MxdIycqcTnNyTr6zD/ -[localhost]:50557 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQClkZRTkEgR6XWntrHrgSgKMfgal8MTbVTP8tkp9GEzL/R+ddNvHMCifgIMzhMRn5o5QyQiX51n7oV/0J+6fB9WM/bOIhR5veZbaXe55c5UMyoO9c8Xa6cBoiTVicMlmNIQIaMGlsFDpcO05cTtDjvG/q79oF1+d9pjt6QsYzMPWHp/Ivjtexh03srJdI6YJs1eIPFuKI043j7ufrsqsM7YJVHwMbV+K9+T2zqXiJBXrJIMzBN9m5B8VXZNRjTDe8eHISk95suMF6cVc1t3SJ5oFqpS6VKUGRhjvLjQVm2bWuh+nLrYq9hBz7UHJOXnE8mUB3ZEBXX51ptjiU6WVxH39aSS8eqoHh5GtzdwWefIoMraRkoQuYvj+stfkGF6DhUIp6uq9OtKazj2tuTr4vby56FX/9MVCgBOQvCJ9joM39YmqFrLuCuGeWAkGWJk/NIN3S6bEUkuEQZf5W4+A4qzggoxvDqz0vEafgIY/JuCJoJTQfZXoHAHC2AaXKCFasc= -[localhost]:50557 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGo/OIooeQQM0lRdLLu5u2vuBD3aSk/h1y4z4+8zq3N84/XFfuFYL1Qeebf2jQcP+O+CquINI+VRI8ZA9sCOStQ= -[35.197.38.19]:6000 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDJ1ECo6+6KgC3jHBpGnAuKjhpMHDgpso92ywkOU9NvDntTgP7yKgbxmzxmJZmV8QwES0Z0F3ijNQ3kl8xwCfqh2zWZgu8LxfSZMaXH4jQCHDtMTDtw60stwDnEhhe69qgzmttXqObzw0wpyCQ9FG3P6lNGzal6CckIXpL5aIjkz1gdTxPfH7nkF6J5hm80qfwivAV6AoiiGemVq9oLyXqWvpmMgG8kqS65zeNWjgtMuUW0LExtkOAUznRcP7UvoQXp19uZ3VSe/I4KwC60BzXUx91Fq32BhcDPT74gEidvXcqVa2819kwpFkQ/ImN3XUs3PcMgHmTsTZ0W9VgeDg57dqCierzAZ5oaCrZ4UXv6CyLT2qvWIQr4gWgcm9m0QyaX+1X2NEmYb/1Sy/gOdQ5SIbKOoCTgdySnmOVsFeCHChH8yOV+zCuuHT+FP3PIPgY+Gg6QvGXdm6TFdZUwehTR4Ahzvw/V9cAyjmCmDGQZ70rLBjzkYFUgh8avViTgwTs= -dtn01.nersc.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMjMlrBKPnyeW5Pzdw+UZJTiTAUeFAAhQaGxSXn5DAQu -dtn01.nersc.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDaiRyQyuZWNCFGQzFzsnWlVGegwNd30e6xvwVazR5hoty24uZvVC5YAmoW8r2kd6q7EUTyxJzOIkNzK7dK+UF2krX5/qU1sKHe6eCgrZ5eXrmmtz4tEt+yR2ES3YchEXOvCB4YG58JvspA7Unf+1FwnxQ0keOg8ZYtYdNSEAaiUyjFE/OFIAk4cNOuK240GpbD+xMfFVT6+RKfjTCTGgupbzxMIPJ4C+WNpYRwGcujQlh+er23C0W6xx79LQ11Tl2lyXnm6OnFzqZ/MXmnPSzdqQ5JioRWX+VIB63jx7UqIrD5fasw/L4KXAZGkSe5fWYlLXYkr11mQrzTNTvzdHDYjAHUmQ5wEausk+oUPirOywLp8brOkUdASmilFpg8eBE7xycsinPGuVvex0hlu3M3P2MHa50ZUyxc2qPz4Uh9KbfG6VrG8lrC6lLnpMtWz22h3Au1H68KWX3gr40XToGlVVVAHZAor0kjtMpqug/eZKTRcLlazZvtKZF8tlnwjJFmU0jWj/IbUSqiomPKMGQu64pDh6TbN9Yu7Ue89XNV/Pu5EPUCu6EEFRbKxeMWlPEv6KksFLnGWHOK7b8s1u85FWLVRqp5R+bf7WvUdjjrIwd/e6yzszUuHbF2r/6E0yfU/bk0QFyg0k2fewz/9HlnludObxvIGphV91GWAQIvlQ== -dtn01.nersc.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM/rtu1QrCA0EnQd4sZslkVsWwCN/3PpodgA2+F3k2XjQzPnvowishsHsx8bgCVllDTZZq6xCGUF1TrQ21zYmWw= -bl832epicsub22.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBDC1R842nbHTojWZ+O6gU5thRScoxuQ6rEGqQ386RgX -bl832epicsub22.dhcp.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCubRWkHloyL+R7h/0QIeTJdXmGylLhOlbplfehSlAL+GswnTy73YZfZXEhKvEXu+PmKxazYMXVy3nlOc+MhvfpAMTv/6TOe8QIZHoLSLrsN5g3tuttFgnqBpBmE6YHp+9uanhah5rkHIrP3dwq2mYPxRpTIRJx4xzrTd/yTLMVOq3+5xZKmzMWz46iJh54rCeZiXEHWRcW15t/TTxzY03VxQLdBPXcDRHSGW2oTg5LIlrlGDTmWhJU3gtGUxaXWyiM90+AS0WXs32pP5w6eJ8/XLy6kSa0AVB2VgwDITpJbWDzt9pzzqexEawpJXCcZiRESOz75KtoEgRbzsfJ4IdDd+RhZDvfnWJjwjBpkf4jCbKIO4aF4332yGNaVUu4tnQ62nsqclKbVwjzD+bZRMKk0vESmui3oDo8EvJv31UzHT8gUt9em0PHVGNF9prCli88F5WzomWLU5wGK3JyNlOKZOn8n1XvAUMT38D0CdGmdsr4WdeiQB5vs5CJ3Kq4cF0= -bl832epicsub22.dhcp.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC1GFWDRI0e8PR0gZym01hMaj4uc9ZKuuNOSjuQIFBE1NM+LLkr9DfzeegW7vsnRXSq/1OpPNWAkGaqRW665Kw0= -lovelace-als ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJDNxI+uGlS7g0JYSYnrJl5d2aToFELb4E6jJsu5mGl8 -[localhost]:51848 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIILXxanqvWOMlrHMpxjvrHiIr4x9jVXq00gk0v4dTclk -[localhost]:52103 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFm8n/ncLeHOpaHlD1a4eUQNzWPXTPMoj7TsAJtWks3C -[localhost]:52103 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCsFVFUTIvteD9AWwCnJh6YGV4XXBPGdj6A+mFnqmCsjtvSvzcm/i3YGZtA3jIA3ZmpVkPS3gPPKG5zh1LcGAvdErBjrA3QXzgyGJbzASFXRLzlcabD3UK1fkUTtMVOXKIHtYfCThrCBZxt4CaL9p+JUeEq4nWYQ9QNdQE9M+HNnYbQRlZo9BeWA5WrybNmSfD+rhpCvK8+KEziFDlOUy9BvhQk8Y6nu8nwbaaPT7wXs3AVJclyo9567QCstOi5kQFadum/WZTp1aOwXysU6X05Mun/hC7LdM2CaKgygoUEurALfyiOnnli09QvQgDafvLyrz/AtzG/kmDehmUQ8JJwLnELQSDXJ4hNCUK5IsrbEIbmr/BDLEvkfwCW0gd98VnxtkEofnN+SrN3/OjoBGxj3iNYSta0ee1/Mla0XdL5Rk0DNANcXfKvG/QL5l7NJpS+j72464WjrG/BZp3xDCuQvZi/v0DsCfLOfNxLh9kPs2bNVUvm1QwAoV7KFQ3MwgE= -[localhost]:52103 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKus09S72ACZHjX0gNin6GFXQflQ0JzBd7TPPMu/mNeA92Xg9xRX9QO1vu2W32RpOf7CdcPa6jMrNnfYGMcj9L8= -[localhost]:53268 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBSAINYgRIMPvKP+84fsxskB/mAqN251IcSaXQ23N33Q -[localhost]:53268 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC00IlOMOUpT7wMy+ZAVQtcCOlkMd537uCnbZsbxMgYUWa6DSzJuu95bVP9egOKHcc8HNTLZu3wAinHWRo/jI6TZEYiTBuhLEDoZ862RhN9UZ4HV2ui58Mo/KnJXolwqDtMA+PTyYjY0X7AQngKMww8GP1X5wxMdzQmjLfYq6Mf7oopmK005oDucu/J8gqwTWL+brpGpUdh9tnfIi6HtwEsQ2Rf6puG3lvEy44ibZlikrkN9SsZ86GlndOPaTJIlFz02ZSj35QxwkKIAzXV6H5Qwedw65CY6pqjzipfq0b9XEV4akji86PcMmOVXRamoeqUQW2pOKXJ7kcrdqSdpFa7luBt1EmqzOamyqXJw0h+OQHR9zwqzXg7Luw1+kwSZkH46gcfVcnfLUSWRaHS6W2T9QgjIX/vBxloWYWKEgMuHU41m2j1oFIdd7GuDLCv8BlTpoJUpbZhguqDtDXxcbdUSgzImOfpYZkQ/Z2Fa0XVaZPG2iFTogmX7Ai09WLmVPM= -[localhost]:53268 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAXh1pfs5B/4mk1e9eSSOihNz4/XOg8vtNt+Bzg2vCCKslKB2PprglN+J9EtJql2MLp28vQA+8SUxPNVS/0YxpA= -[127.0.0.1]:53268 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBSAINYgRIMPvKP+84fsxskB/mAqN251IcSaXQ23N33Q -|1|fvPvPtsjwY/anj/8pwSonZYtlU4=|FolwgkcaG9xh5GOZWGD0gtMuYes= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBH7hyrzud/xfGZebTH5lFHLaQwjTDlDvmwTeXF4tWa4J91zaXRb7zKT907tCzMOeCODJxndWxsqprwkD9up0EXI= -ssh.diamond.ac.uk ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINRS80z7bO2nBIxB3rRAh2LIwPCg00MAOwLKrCxVa7gT -riemann ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID5oApZaBnaqHkH8S/fknazn4yjW3nusaFe0mtT5RwdT -riemann ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCKGFZNtPXnfgIpn9mh55ClKIZfJ87dyZPRiLm7pMQ14GIvWfhpNKBgTb6CApALBpq3tBVt9L+lqswKcH/O5PIEBpYjjC0v8VKOWq8wxZTo49+YEHGDhfdc6t0uNcLeDQscUtuXbL7OLSskJ5qwd3sbt0VpYKRLowFVl15CnDKcRujIWx2jb7fPQF1dOzD1Zod//+Szz1SjS03ea870oRNP3qtgPay9eFk15otl0d+KQLiNzC3yKEmzNipg74FcFEirOBsug2vCF2vI9rJxu4c6dWUi1Kwekz1jE67u6BFnbJFQ35I2fs/b4vAvEkGIFUgYyt9/SvYsIqoaqQm/nuHTJSl2K/O3N5mYYP7LXKR8btKZHzAL4iFLYTqKw7XI3rcLNfXE2xO8BLeYpKSg+Ept0bm+jxdaMYKCcqWAMBER7AMhuF725hf0Dfzbgw8G6RflN9wWhanHlwveJ84hX0fw7WiBpARP3as1HJK/I53xIcyzOvaqVNg+zy8RdSOu8mE= -riemann ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG4vdL6QxcP+p1+mVaGRjr96pqEsX0SBOtKpd7U0ndI/nMFoIuwH1BG6Ku8grw6MajhuGrcUSdMkprWDYTtj1/E= -riemann.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID5oApZaBnaqHkH8S/fknazn4yjW3nusaFe0mtT5RwdT -35.233.175.44 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINZl1hcINHKFkGHHf+kj4kF0IlSXEePBfqFdbmIoo8CB -35.233.175.44 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDZMwHeRUlkZNO8HrkCKYiGvAs0c/bcFQFCNJ7Vt9QVm9iv9SN/qX7pveGOVHDqZ6NWmNZl6zIaPtkjNF87pKt0I4YSyrl7IzU8rGVz8U9nPtze+C0kXTELUOk2s5zZKWT3Knb8EHGkoJVY6zknTTp50hJh9LQoIK9OZSDzLBYY8Y62cJ6By8z8RHhtRX9hyuOK8ky0V7FjcKl6G/ilvuzrRpGSLhY1tSryKITgOsfrN04iOAzv0L9LTkQK2NGz1hOVWkpwqsHWbYxbS2L8Q9tsmnFaaboi2Bf/vBGzuOSn2MZaM8SWDRCNekZ7KA3zZERxITMbTMjl9yb121IkT5CQwaV8fFlFRFH4b3sfbhiQMSQ7ErEXz7GUppwtX89OWDd4LF0At7zVpJ4UC1UHIiS55jRO41pd3m8Oy2XJvM95uaGK7kN37PXadiGQHUjPxdjxnij2pcAW7lOYTvBWu7GfKxVFggFjTR9gGjvEfZsm5hPlbs8oBFWs+qrOEbbi2us= -35.233.175.44 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCrdc2mOmk71akLIK1tAs8fwSYoORYZ/gsAT1aLJBXRzecEBejNEmkwpYAnEjgVyTHWpj+Np8zZ120zNAawi9FQ= -teocali.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDiI4CEllqunClOOJaHTK2sKGnOolA34JAwrIe1m3+cu -teocali.dhcp.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDDcYkiJimYmUxRDeqIqMBcBDIhc8ig1yk/HktFeRC/GYQ7is3ZaDgI0+VXHo6NIiUHYirfY2P5ArKYwahetz1UBizDZ8PjuW5PdZrbMULbkC7EMx+jzVtcUzWhJQGFQqDH3QBfahkmI8er/uhcmvMC7P4lv2ANMLAvCPCHnnh47fTrn18On5fcYag17xvPciLNa+H5w23K8pbFLjbWwcDNqn4Sla/Ff8+B5K0unw5un2Lx5acDaF00stFD2D+IClUNfcPZXStoUYNgY6KSgIHLv1rV4VeczPDu0pVD8b5ch658DnzIhgGzjSp+N2pz12EHZaO/0Z8K70u1+62RodyBcQNyCwu0ac/vEu9msCnIa/cxkKy3P5Zd3qIJ24+D7LnSwL65UtqzeobHL2yH/9Rufj8oJb0T+qTXZNtbRr4vpe4cAsFvXnNudXlek89zm9kQ/9uJ+S4LrrChDZcp0J1bNoMulcR5Puljj+x4QpvF5mKHE3GIutnujLn213gWryc= -teocali.dhcp.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLQrnLqJ9vTpmwfjD6yoAvgo1+YPoH8tMA1qzj9bD98KFdd2l8ju9Dx0GCg012K7YJzRXgJMKlmKoz/OW0wYy0U= -polaris.alcf.anl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAEZpkhqxD9p7RKXzy8p6rWF59jjNerksNiiCYPCDxHy -polaris.alcf.anl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIUiTFHF1odmb63k1XU/RGKWkEo/zFKKhX6Km7Gar5TefAt90NEca8o0BrKFpEAM2/mo87D1eQ5cZMMNDg7JGW4= -gavia-razer ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMxvQZbJbl8XxYEqaafA2M6kGfN5CNhYGiDi6Q13mmWt -gavia-razer ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCVukXIWIYzl2/hNrlzCjWGn+2khnlt1WLoLqKlFJRa433mgvdo8shdP4PkCf2LGW/JLKzzm9eGFk7ktIojJuB3lX69u8D9Jf/RVCuSsAIUOAVbP+ImjDZOZBUR3dZxBPEtpXNjcUNWrof7Tg1UJexHWQp9JhsckwVZFf3hhC3cFUflT6faKH03Xns5tXtT514dSBT71jtmuKrAq8Jtdhpc8G6DrAQtvezdzk8LEANIxYxhMy0AMQf+bZsBmijF8SmM23Sv3+Rm+lldabM/3MBZq93l9WiIo2ZtyYkBBescgPx5z3yskePcCToDdB4eS/hDI/ckHluOkeq+koYIMV/WZotU57QSd7lHwbuj4I2AUxEcOB4BrxpmbpjxAcL6HY2K8Q0j6PRZbAi6oaThGlsgzy1cq+w4j1godxpACnUtTDp1YSyrgCUUYtnjDhKYOKyyVXE11aVAyWP+eXHeTk5V1HJImXaoZG4SX3XAf/VTDfjakM+nYdNUZbgmlkhSxIE= -gavia-razer ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBN2ITm1zx3woIhDNRfPo+zRHsP28o4HgaJLgWWExx9VQUKY2f04rbWWcAGq+IqhKqs1Hrums7UPCW3pAV7/P1l8= -gavia-razer.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMxvQZbJbl8XxYEqaafA2M6kGfN5CNhYGiDi6Q13mmWt -brick001 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINZ2EBIcQWoJhK/sckTxEY/rw4qqoM9Ewuubw9i04mEY -brick001 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDBiI7G4Zw2IxEh1u/NOCaOw7DSM/m914S6pnigRN2zh4zZ/NfsFEbtnoFuY8dI/LfkH2CsZrJqhNJ3OanfvU+hp1sfQppKa7qExOIyU9EaDMvWWD35u1EWKookQqcWmEaCs4PElofafo9sKEJsZ+lq//mA+MjxPL+vNhLw1ZYJPkL+VMbEBlfNzzPdt4R8jb70bRyZQ5zKHic/WiLW73pJdr2khxke/+e7I2JtUoHLr9fyud6duCHBhgibHWxrtkoxkIm3iPhVcUFuZfBE7PHZLfE/69PchB5pU/Qy58Hl46QickhbxUuxG57ElHfOgrO8P8LszsYzK+fcSxwJmO5pO1p4tPNFQ7G+opwdPDLkkPpjyuBsa55vevo44hGoiKX8SFGJzr6RCINYqJ5CegpHjOZu2zJlRqVYx05Ze7WnnmZ3Rqm4JGi2ANumk6s7bvYdbbDuGG4kngLKgN9WOrSJzH+4VDK5MfJrkDxm9lDC5/U5jWPk/iouR3iKAF0/0NU= -brick001 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCnL2+v4FYLLE8+j/xiksxwWes84pagEwujBQo4UkJZAfYb0JF4GvGUG6WAFXr8qyq1veqFOq+bTw5spRsnQjLQ= -brick002 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINZ2EBIcQWoJhK/sckTxEY/rw4qqoM9Ewuubw9i04mEY -v-als-rac1-r8.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 -v-als-rac2-r8.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFu3AA7ajnsyej1ez+0ki5A2REeWGeeNOLs127o4hwk2 -[localhost]:60188 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHz8y9R9PgOBYErNao5hOWzLknnRGINNbPNXlLQbho0x -[localhost]:59253 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOdgYJuqLMBE42XMaS88rLB5SctSbhzaGasvkALRe1OT -[localhost]:59253 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDn5fX6foU0dtniq51w5p/7XOi24d9z1GNnXKUGWww9n44epNQchxstQZBAX2aMeCZKu1sWcCoWrplfLlprbUE6yMk/Uc+Mvg8d+PsYdN8LxO63nmJ0X4d0hkKJG+4LBHZncxpjyIdIHmd10BsvQUDDWC6lcvkVpS+Wldn1V2PVFfnbL8x1nBDiG+hbzk1jD69cFETCJoa7RUeGX0Av2Qa8wvyEf0FBNTKluBZguoYR3VwP6ujGhXmTJJaA+ICCjluUAkDUj7O/FuMMbZcTKReV3BDUNliNFmmebb5lqC4nT/7ohaViAqvy6sIUToX3tlFO9eAF2cc94GETjsoBHntmyuvZPAVOrd1OSl6bsj6xqq521mVwPaD63lv56ZKuywHASmw6jLR89RjesV9hBqZX55htQ7t9D1QEmIZt80iKBF0KXoTn2DWkSRbh8HyiOKkYLKXFnx7eAcLDnZzmb3N5G34qJKJ0GEqFwySAAdIx8L6id2c/8F4U0gi6enFu1vM= -[localhost]:59253 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF4EhWxD7YnS9DzGpim9DizuWoFaLEmAf9TE+EX6l1BaOoVXQ4+8cweLZSsdq0yKXAVxO2SaZuDjbbpR826SWEM= -spot832-new.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFwuWqzNqHq0lXpGL2RpOclaYWVhkFgJtxPhXKaaW3ab -spot832-new.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC+JMv87hoA0ieLaGn7u9SbTfmb36wUnXEenfqwouT8ibGvV/ZKiqfldBp/oGgMfvijDSNO9feN5vcUd4KY09Y46FkM+gYPxbVh/2TT/fYjxwqRqF/rT0LBtrb2VvGkKb/4EhiHUuvdPmexX2fLPkHGiZSF5SYiParot2zY+OQUgDZl9F3I5fDES9Kc2Ymo0977byiFc8RkGAi4mFFmXP6vfzC+fQtHO5yunWf7+yGhoHD0AX0OLJ229Hgt3HGMPrS5HLfVlSapDWO45Koc38sHhVSrVYCHP36W6RK/oGGh9n/ISW5fm7yOlQQvTlUmjRN7dcNyfqEl+XTIdsFJlIgRd17IJy9YsXW6rkk6a4ymLkYB8/uERyN6T5QJzORrvptyHi5Rus1EBvF+YaVqbBdNQlPJ42dLRt+VtiecAIFSU318tdXI++LE7TDwOW3k1v4ldCmC3eEHe2G1PfZw80GSDJhIT510wWaepiIOs2ekRTEpskHe+4Nktr9ywi55ox8= -spot832-new.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGtCeWqaZJe560wL/MBHZWh5UciGxmPAqbxn13vuXBRLrrNRp4w25hApdchgrGwi0Jbaoc1M7FAUqXDM55Y6z/Q= -spot832-old.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMjYj4RBZ+DW4GwIrkF7ZCa9fN8rP7pN3xAOwoIFnS+7 -spot832.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFwuWqzNqHq0lXpGL2RpOclaYWVhkFgJtxPhXKaaW3ab -nid001041 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDRDn86LRaU3Hl9E+OTwHtyLhLRvjNCF3e/LAuRu/Ms06FNsXTK1iIb3QMnWjzzFd4CwQwrKYZy9umHIJOyCW/SbEI4GRPrr7NJpVOvkGKVBqSo5aYY3LhqCqKgsX7lbnhwAyvYvHoy9qd/XyzjUMwvUYf1G0dmkIN4AGauEUysn2ixgfhi6+sODsLI9fNrZftnTpYecw2NPP7cn8Dwknh0Fw3450FaXZpUryghdsZp7VvtGwVjQYy5C2PFj8GKqoPh5pIrq4R63hx0OmQOQlRp8cSLtElx1vNzbTRMh43Te3/SJQ66h3sG8AgsPejJgPYEVKJhLpC8CQFj3mQFygcBcp5jOfNnEH2PWZ2Xmzi1p3qrtj01ZML6tIZX9GSdIPif0N2/Zi7+h2wsC+/d4gWdHwX0wQ+o3gYVCKl1Ipf3HJbQ+ZkJ+SecV81nWmu0sGP5nrKALYrQjSwsoO1yFxNhzFk0+XztFoSrMVsfLGG0n4ahTc/yJdB9/VL2/TcujiH+u64cDE9HhOw/JrHtUr13KC/0giaSc9qbjjdhKaXTDcdz4v9NCCqa6jb9R9+MDuufCJy/hOvvYqg99iCGAS+fKPvxJQ3byXOmzZ/dNVw0iz9jQdyTMISmn5BW23YQBtu9RbA8uvzhlV5vsTjtjadbVrWx4VEFgDLtBy8E0kACWw== -ssh.nsls2.bnl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG9oLAbjVdnhcWNCRajuUJ4uStMfxlGiub3MoGHrzkEd -ssh.nsls2.bnl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7lHVUvBzOlypqzv1afk793tqadLHWg8gqGVvGjlTUC22m4bsV47YBOsu6TOw4+Q0wxIsM6JGZx+UEKfFyaiCo5hV3OxJDHjkhtDCEwm0zvFzLfVQ/gWKUmYDApF4NXlfCvDFykpRmP9YgurN3Tp/iZ35T+qlbDb+gYeZq37+jZgP5xusUer0a8kx2o4xLSJuh5JpM9hdkPL3t4EafmA8Diq6PG/Syr9mepIEDNdQo0eT7tTZWQ/L5I6RDn5n3baXW9jPPJ8Z6boq4eUJOcWVSafNwP/57AkqEz1zxKEspW6+H5K7pghGtnSS3lqNiAkoRWYhYHmQ1pwZrYu+rBeR8JtkKkHqU8TwYwqoXt0lDNgSn4CCsVoTMxU7ggWzovnEOr+uT5vEi+iWg82pbzA93/QUmPVUt+zkIBgN4sVAd2lt7Nw/l0r5F/CsE47SRs/++xhTB7Hh68lMsmdc27pLMbRcYEIsN4zw+JeMwch+6++tbWmEJyaHiYWnQnQBNYF0= -ssh.nsls2.bnl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBmA7BJrkeoE7nd4mCfETTeSVYVb4uLSp9LCQjDXXz3UUNRbHp1YJTWuYhi9QBfr008MlwqIr8UIGkVwt1nbmsM= -mars1.nsls2.bnl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGV3IWz/aoVLmufZQOZeHKP4O+TGcyL2QWSL/9tMhffO -mars1.nsls2.bnl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDc9LAgbzMUfYi4zZhsSnVFWp0UoaeNi8PtmrsECaJyPwDQRGqaggS4+RU6NmjofuE5LUccy4ts2i5EzW4wyr1As/1B1yZWN2/W5cXf8Oev9RF0ZtARcQgoIdQCLgLnOwI1gPaykktlWow//FAjHkABOi8zD8RE14QfITrtWcZocSxdowZJ6IfjGGr+t859srQ9O7M4D/Gp6i2QXmagGot17a3KTjLYq32ncmhOLFfhEk296vsKOZbjY7FmpBKcnhv9hqHjyHvoiIgB8X4FgYsRNmsE/rPcPMOU9Ku4vNoIX7PESsWDWfI2WsVyiqSq0X84KlOZeNilnki24G8gkj9C1HkkpdBvdTMOpbuUCHnNy43c562tiRXOaTXSF57h4TXHwUYEVOrBBbuwiZaz9efT88UJrOXI0uXEsp2Rvmx0Tr79wMoGzDaPd5wyVQ0wMOq9D9iErU8PDJDvV5p3Du4JshMLrwdO2uCE+enVSA2PZiI6Z8XAIxmZGYs/HAsJl68= -mars1.nsls2.bnl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHgsTT/3rHF/kCUHPZF34cPb3h3PDipJhO5C+A9DcFJwr6igIrctfFjhOshdNTZIYlrswRWhMPrvaWWHQqZRoLQ= -galibier.dhcp.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMO8nDpZvvv46/Z6U+OEBeXDHY2BBXVh0J4vTuNLML0i -galibier.dhcp.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDEIcWPPcn4REvjMQN/QQqFhNfz+LiBQcXYt+dTha9m7WzSq5SKPW874JlukPUlwHxjJpMSzT0VLvtvkNZ/zTFqlxaHvQwTrelwsm7cFgiff39lL0nSeSfhTdpEENflR6FeBtUsdFR7XgKV+GH1LiLaFNU2IBvwb5A+apOreGsF+60wS2NCLnCijpRq6paymm8rHG3hWXCrX8SqWKRsKK/v453NNz1CzSxHAJKGVXdoi05/dCqFi60b86A2PKl8ZeS11CiXlb8l+IV0lD0n8pH4/UL1WgE0yGlnI0axZ1xlo9tz8q4xiUSJ9Wi5tnLyh7ggfqjNAuxb/UZMtqAvksVW7OBAABD+2zDm8E4C0w6bDYlXn0lmAEPXfn/DXdhyMjCDeS1ezZ42o1xNBeeQiudcV3kbKdTkK2wHZMe5UV6FGbpEyvMwE+krLVEyTHDOghPVsoExM9RqtV87LeEGFBVs2ULdc1nahRni3+YWxYjv6gbNloRoNSbkH3Bf6VTrkak= -galibier.dhcp.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAWrpyAER61BV9MRPnbLsqzYLjUHX0T+oC5nYbh2Qrjv2DkkWFAPwPbrGDcUvijzNhu5vg1cjleS7bmw9A5M7BA= -flow-tomo-stg.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILfypojAQ5RAOIALr0Myjmj+q5kNxY1aqEFOlVYYvmzX -wu.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuH8yG63JhFpM4TLy4Kdc+pDNb3Cwr69SndbhpG3v+i -ball.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFAwtty5JnXLnQxqZK0p+dVf7Zd1DveSMaFCz301yQq -gitlab.desy.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGUO0WVl6zlp7j3jO7kAEZBhR8BFz6sEjsSiygx44QoH -gitlab.desy.de ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8oZZEtgyfXkLXUy9sTnPQKx1txiDm/arcMgTyf2/DKEd4Qp85Mbz1FJOhR1ZEl++6/+hXCgoMlSjMMqpJEaeNm7Q5ke0imCZNKWNc1rhuTFUKS2E8Nw9tSLGnsggmrQFLTVEgqCvr01K/nO4dcQj/w1tvpXN4+lu1NjephpgT4qtw7CylnK2wHpjwthvbez8/bkiDT2vLAR7nabPMt0U0f2S0I+shzp4ymdlOnPBdbJ/iSvir4Wakp9RacY85b4RIDejEFppLw5fZCSqA7gZ3jW2QpQsSoyjpca2RAoiRl+i6SI8qV5xBJ1UNseoYQy53+3yaR4AOW9okUktAha7b -gitlab.desy.de ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDveYioBmJjmfK12v/xfJx+cpxHelIRVghS8xMRGKFjeM3ubrMSvP476JoV2LR12ubU/OKfU18oW/v7WoOegjio= -bl832spot.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFwuWqzNqHq0lXpGL2RpOclaYWVhkFgJtxPhXKaaW3ab -compute-dtn.als.lbl.gov ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMc6rG/CXtukfw8UF5piyOG13sP/+EA0p7zNNiA6mMXF -compute-dtn.als.lbl.gov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCpVKKeAu0XBEAzktJkRerlhUBsDMqKfuDuf2Q9wDnOfuX6BjCebclMb+P8nARB1eFJVgTMiN4i/X+tOVGjxizOChsAdZQygtikQsz2LXmzjmdwqc0GgQsWXbQdtnpnqNTswglKZJ985Czm5MvhySdJU3Jql3CQ8deUNYzT1cLJ+gsPQbjFUQ9L1vIqMrrBlW/Nrh8rQv6HF4kkdcQXqPoTvKcaQAABxz76Ef0TS1SOIksDlgzzDbijVY/dYGcC1FTXuE0M4RISdASSoOH7Nb/El3/U90c3In8Wg/c2AJeOOFScBWdjgzvaDkOAqk8hk8w40aVNiShe40am2MExBGKlmyr43W6STF3y9wuyY3tXfr7OL0RgotYIo2fW30eXbeJz+trh/YtTm8H4i1vzGRxA7k8/qpq4Nxvl1aWzpATH+YgF7DcNwzLIUuwgOww2hiLw3mkQS03UFxknsbBRwjB0rypYrHrd8oEmeIlz11H6i1GZq4QRm8hc4FEJ7ENEmcs= -compute-dtn.als.lbl.gov ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBByyawEDnVHMNcc9SEH9eKxIuWCA4++tUMgS3ezGkxL12OwVpdvncBM3j/u5ZeGzbT6KlPYAF9CQ8kALqh4K3Y8= From 27dcac10daa17963aa945cf7e2ae45589ee67d4c Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Thu, 24 Jul 2025 15:40:10 -0400 Subject: [PATCH 05/14] fix listener cli --- src/arroyosas/app/tiled_ws_cli.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/arroyosas/app/tiled_ws_cli.py b/src/arroyosas/app/tiled_ws_cli.py index 35113bc..556f012 100644 --- a/src/arroyosas/app/tiled_ws_cli.py +++ b/src/arroyosas/app/tiled_ws_cli.py @@ -1,5 +1,6 @@ import asyncio import logging +import time import typer @@ -49,7 +50,8 @@ def start( # Create and start listener listener = TiledClientListener.from_settings(app_settings, operator) asyncio.run(listener.start()) - + while True: + time.sleep(5) if __name__ == "__main__": app() From ded49b9e473bf016ceb707e1b19cad3aa917a8bf Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Thu, 24 Jul 2025 23:12:57 -0400 Subject: [PATCH 06/14] fill sasstart with real values from stream --- src/arroyosas/tiled/tiled_websocket.py | 78 ++++++++++++++------------ 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/src/arroyosas/tiled/tiled_websocket.py b/src/arroyosas/tiled/tiled_websocket.py index fc97ba6..684c43a 100644 --- a/src/arroyosas/tiled/tiled_websocket.py +++ b/src/arroyosas/tiled/tiled_websocket.py @@ -6,18 +6,18 @@ from collections import defaultdict from typing import Any, Dict -# import numpy as np +from arroyosas.schemas import ( # SASStop,; SerializableNumpyArrayModel, + RawFrameEvent, + SASMessage, + SASStart, +) from arroyopy.listener import Listener from arroyopy.operator import Operator from tiled.client import from_uri from tiled.client.base import BaseClient from tiled.client.stream import Subscription +from tiled.structures.array import ArrayStructure -from arroyosas.schemas import ( # SASStop,; SerializableNumpyArrayModel, - RawFrameEvent, - SASMessage, - SASStart, -) logger = logging.getLogger(__name__) @@ -35,11 +35,16 @@ def __init__( self, operator: Operator, tiled_client: BaseClient, + stream_name: str = "primary", + data_source: str = "pil2M_image", create_run_logs: bool = False, log_dir: str = "tiled_logs", ): + self.operator = operator self.tiled_client = tiled_client + self.stream_name = stream_name # The name of the stream to listen to e.g. 'primary' + self.data_source = data_source # The name of the data source to listen to e.g. 'pil2M_image' self.create_run_logs = create_run_logs if not os.path.exists(log_dir): os.makedirs(log_dir, exist_ok=True) @@ -104,7 +109,6 @@ def on_new_stream(self, sub, data): stream_sub.add_callback(self.on_node_in_stream) stream_sub.start() - def load_data(self, sub, data): patch = data['patch'] logger.debug(data['uri']) if logger.isEnabledFor(logging.DEBUG) else None @@ -122,30 +126,30 @@ def on_node_in_stream(self, sub, data): # Log what we're comparing for debugging logger.info( - f"Checking key '{key}' against target '{self.target}'" + f"Checking key '{key}'" ) if logger.isEnabledFor(logging.INFO) else None - if key != self.target: - logger.info( - f"Key '{key}' does not match target '{self.target}', skipping" - ) if logger.isEnabledFor(logging.INFO) else None - return - logger.info( - f"Key '{key}' matches target '{self.target}', proceeding" + f"Key '{key}', proceeding" ) if logger.isEnabledFor(logging.INFO) else None - - stream_sub = Subscription( - self.tiled_client.context, sub.segments + [key], start=0 - ) - stream_sub.add_callback(self.load_data) - stream_sub.start() - self.publish_event(data) + try: + stream_sub = Subscription( + self.tiled_client.context, sub.segments + [key], start=0 + ) + stream_sub.add_callback(self.load_data) + stream_sub.start() + self.publish_event(data) + except Exception as e: + logger.error(f"Error processing node {sub.segments + [key]}: {e}") async def start(self) -> None: """Start the listener by calling _start method.""" self._running = True await asyncio.to_thread(self._start) + while True: + if not self._running: + break + await asyncio.sleep(1) def _start(self) -> None: """ @@ -165,7 +169,12 @@ def _start(self) -> None: catalog_sub = Subscription(node.context) catalog_sub.add_callback(self.on_new_run) # catalog_sub.add_callback(self.test) - catalog_sub.start() + try: + catalog_sub.start() + except Exception as e: + # self.context.revoke_api_key(key_info["first_eight"]) + + return print("I'm running") async def stop(self) -> None: @@ -179,17 +188,18 @@ def send_to_operator(self, message: SASMessage) -> None: def publish_start(self, data: Dict[str, Any]) -> None: # We need to make a request to get image information - # from tiled.structures.array import ArrayStructure - # structure = ArrayStructure.from_json(data["data_source"]["structure"]) - # structure.dtype.to_numpy_dtype() + + # structure = ArrayStructure.from_json(data["data_source"]["structure"]) + structure = self.tiled_client[data['key']]['streams'][self.stream_name][self.data_source]._structure start = SASStart( run_name=data['key'], run_id=data['key'], - width=0, - height=0, - data_type="", + width=structure.shape[1], + height=structure.shape[2], + data_type=structure.data_type.to_numpy_dtype().str, tiled_url=self.tiled_client.uri, ) + logging.debug(f"sending start message: {start}") if logging.getLogger().isEnabledFor(logging.DEBUG) else None self.send_to_operator(start) def publish_event(self, data: Dict[str, Any]) -> None: @@ -265,6 +275,8 @@ def from_settings(cls, settings: Any, op: Operator) -> "TiledClientListener": return cls( op, client, + settings.stream_name, + settings.data_source, log_dir, ) @@ -279,9 +291,8 @@ def from_settings(cls, settings: Any, op: Operator) -> "TiledClientListener": "api_key": None, # Replace with actual API key if needed "base_segments": [], # "frames_segments": ["primary", "data"], - "stream_name": "primary", - "target": "pil2M_image", - "log_dir": "tiled_event_logs", # Directory for JSON logs + "stream_name": "primary", + "log_dir": "tiled_event_logs", # Directory for JSON log } class Settings: @@ -299,6 +310,3 @@ async def process(self, message: SASMessage) -> None: listener = TiledClientListener.from_settings(settings, n_operator) asyncio.run(listener.start()) - - while True: - time.sleep(5) # Keep the script running From cd51d8ccc1db9e8c62f8f18a23ab938504a646b7 Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Thu, 24 Jul 2025 23:13:36 -0400 Subject: [PATCH 07/14] more scan jsons --- .../on_new_run_0001.json | 125 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 109 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 587 ++ .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 109 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 587 ++ .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 94 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 125 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 6558 ++++++++++++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 5752 +++++++++++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 109 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 587 ++ .../on_node_in_stream_0001.json | 94 + .../on_node_in_stream_0002.json | 4112 ++++++++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 310 + .../on_new_stream_0002.json | 8917 +++++++++++++++++ .../on_node_in_stream_0001.json | 69 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_streams_namespace_0001.json | 0 .../on_new_run_0001.json | 107 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 310 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 69 + .../on_node_in_stream_0003.json | 55 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 125 + .../on_new_stream_0001.json | 8917 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 107 + .../on_streams_namespace_0001.json | 0 174 files changed, 365609 insertions(+) create mode 100644 tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_new_run_0001.json create mode 100644 tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_new_stream_0001.json create mode 100644 tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_new_stream_0002.json create mode 100644 tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_18ccfb19-a67e-487b-9207-413fc2331a1c/on_new_run_0001.json create mode 100644 tiled_logs/run_18ccfb19-a67e-487b-9207-413fc2331a1c/on_new_stream_0001.json create mode 100644 tiled_logs/run_18ccfb19-a67e-487b-9207-413fc2331a1c/on_new_stream_0002.json create mode 100644 tiled_logs/run_18ccfb19-a67e-487b-9207-413fc2331a1c/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_18ccfb19-a67e-487b-9207-413fc2331a1c/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_18ccfb19-a67e-487b-9207-413fc2331a1c/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_18ccfb19-a67e-487b-9207-413fc2331a1c/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_22238aa8-ce2c-4c5f-bfb2-eb586c64decf/on_new_run_0001.json create mode 100644 tiled_logs/run_22238aa8-ce2c-4c5f-bfb2-eb586c64decf/on_new_stream_0001.json create mode 100644 tiled_logs/run_22238aa8-ce2c-4c5f-bfb2-eb586c64decf/on_new_stream_0002.json create mode 100644 tiled_logs/run_22238aa8-ce2c-4c5f-bfb2-eb586c64decf/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_22238aa8-ce2c-4c5f-bfb2-eb586c64decf/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_26b4482a-0bee-4565-81ce-69bff5502665/on_new_run_0001.json create mode 100644 tiled_logs/run_26b4482a-0bee-4565-81ce-69bff5502665/on_new_stream_0001.json create mode 100644 tiled_logs/run_26b4482a-0bee-4565-81ce-69bff5502665/on_new_stream_0002.json create mode 100644 tiled_logs/run_26b4482a-0bee-4565-81ce-69bff5502665/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_26b4482a-0bee-4565-81ce-69bff5502665/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_26b4482a-0bee-4565-81ce-69bff5502665/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_4308376e-cc77-40c1-90d4-e5ea125f3645/on_new_run_0001.json create mode 100644 tiled_logs/run_4308376e-cc77-40c1-90d4-e5ea125f3645/on_new_stream_0001.json create mode 100644 tiled_logs/run_4308376e-cc77-40c1-90d4-e5ea125f3645/on_new_stream_0002.json create mode 100644 tiled_logs/run_4308376e-cc77-40c1-90d4-e5ea125f3645/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_4308376e-cc77-40c1-90d4-e5ea125f3645/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_4308376e-cc77-40c1-90d4-e5ea125f3645/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_4308376e-cc77-40c1-90d4-e5ea125f3645/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_473607e9-c11e-4752-b240-d4853000db45/on_new_run_0001.json create mode 100644 tiled_logs/run_473607e9-c11e-4752-b240-d4853000db45/on_new_stream_0001.json create mode 100644 tiled_logs/run_473607e9-c11e-4752-b240-d4853000db45/on_new_stream_0002.json create mode 100644 tiled_logs/run_473607e9-c11e-4752-b240-d4853000db45/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_473607e9-c11e-4752-b240-d4853000db45/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_4ec3af96-ad81-4b8e-9222-9a146ed6c790/on_new_run_0001.json create mode 100644 tiled_logs/run_4ec3af96-ad81-4b8e-9222-9a146ed6c790/on_new_stream_0001.json create mode 100644 tiled_logs/run_4ec3af96-ad81-4b8e-9222-9a146ed6c790/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_4ec3af96-ad81-4b8e-9222-9a146ed6c790/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_58c71f19-f97e-44c9-9e80-f8fb60600f54/on_new_run_0001.json create mode 100644 tiled_logs/run_58c71f19-f97e-44c9-9e80-f8fb60600f54/on_new_stream_0001.json create mode 100644 tiled_logs/run_58c71f19-f97e-44c9-9e80-f8fb60600f54/on_new_stream_0002.json create mode 100644 tiled_logs/run_58c71f19-f97e-44c9-9e80-f8fb60600f54/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_58c71f19-f97e-44c9-9e80-f8fb60600f54/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_58c71f19-f97e-44c9-9e80-f8fb60600f54/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_6d770093-58e9-4756-8461-1f192fb02dc8/on_new_run_0001.json create mode 100644 tiled_logs/run_6d770093-58e9-4756-8461-1f192fb02dc8/on_new_stream_0001.json create mode 100644 tiled_logs/run_6d770093-58e9-4756-8461-1f192fb02dc8/on_new_stream_0002.json create mode 100644 tiled_logs/run_6d770093-58e9-4756-8461-1f192fb02dc8/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_6d770093-58e9-4756-8461-1f192fb02dc8/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_6d770093-58e9-4756-8461-1f192fb02dc8/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_6e57d905-4184-4d42-b5a0-89628d8fa1c1/on_new_run_0001.json create mode 100644 tiled_logs/run_6e57d905-4184-4d42-b5a0-89628d8fa1c1/on_new_stream_0001.json create mode 100644 tiled_logs/run_6e57d905-4184-4d42-b5a0-89628d8fa1c1/on_new_stream_0002.json create mode 100644 tiled_logs/run_6e57d905-4184-4d42-b5a0-89628d8fa1c1/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_6e57d905-4184-4d42-b5a0-89628d8fa1c1/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_6e57d905-4184-4d42-b5a0-89628d8fa1c1/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_6e57d905-4184-4d42-b5a0-89628d8fa1c1/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_705e636a-5a07-471b-ba09-27f3b2ba7c8f/on_new_run_0001.json create mode 100644 tiled_logs/run_705e636a-5a07-471b-ba09-27f3b2ba7c8f/on_new_stream_0001.json create mode 100644 tiled_logs/run_705e636a-5a07-471b-ba09-27f3b2ba7c8f/on_new_stream_0002.json create mode 100644 tiled_logs/run_705e636a-5a07-471b-ba09-27f3b2ba7c8f/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_705e636a-5a07-471b-ba09-27f3b2ba7c8f/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_705e636a-5a07-471b-ba09-27f3b2ba7c8f/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_705e636a-5a07-471b-ba09-27f3b2ba7c8f/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_7a5929f3-c516-4a29-9a3c-5e30f0911edc/on_new_run_0001.json create mode 100644 tiled_logs/run_7a5929f3-c516-4a29-9a3c-5e30f0911edc/on_new_stream_0001.json create mode 100644 tiled_logs/run_7a5929f3-c516-4a29-9a3c-5e30f0911edc/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_7a5929f3-c516-4a29-9a3c-5e30f0911edc/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_85cb1d46-3df1-4403-a112-7611465fba29/on_new_run_0001.json create mode 100644 tiled_logs/run_85cb1d46-3df1-4403-a112-7611465fba29/on_new_stream_0001.json create mode 100644 tiled_logs/run_85cb1d46-3df1-4403-a112-7611465fba29/on_new_stream_0002.json create mode 100644 tiled_logs/run_85cb1d46-3df1-4403-a112-7611465fba29/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_85cb1d46-3df1-4403-a112-7611465fba29/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_85cb1d46-3df1-4403-a112-7611465fba29/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_85cb1d46-3df1-4403-a112-7611465fba29/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_88e7b6e6-f785-4103-a4bd-53689192b830/on_new_run_0001.json create mode 100644 tiled_logs/run_88e7b6e6-f785-4103-a4bd-53689192b830/on_new_stream_0001.json create mode 100644 tiled_logs/run_88e7b6e6-f785-4103-a4bd-53689192b830/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_88e7b6e6-f785-4103-a4bd-53689192b830/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_89060c75-1027-4dcc-9134-6dd64133616e/on_new_run_0001.json create mode 100644 tiled_logs/run_89060c75-1027-4dcc-9134-6dd64133616e/on_new_stream_0001.json create mode 100644 tiled_logs/run_89060c75-1027-4dcc-9134-6dd64133616e/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_89d5dde9-a22c-4cc6-96c2-5e80c047b1d2/on_new_run_0001.json create mode 100644 tiled_logs/run_89d5dde9-a22c-4cc6-96c2-5e80c047b1d2/on_new_stream_0001.json create mode 100644 tiled_logs/run_89d5dde9-a22c-4cc6-96c2-5e80c047b1d2/on_new_stream_0002.json create mode 100644 tiled_logs/run_89d5dde9-a22c-4cc6-96c2-5e80c047b1d2/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_89d5dde9-a22c-4cc6-96c2-5e80c047b1d2/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_89d5dde9-a22c-4cc6-96c2-5e80c047b1d2/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_89d5dde9-a22c-4cc6-96c2-5e80c047b1d2/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_8b4975da-d016-46a4-9b61-6ab380d4f82e/on_new_run_0001.json create mode 100644 tiled_logs/run_8b4975da-d016-46a4-9b61-6ab380d4f82e/on_new_stream_0001.json create mode 100644 tiled_logs/run_8b4975da-d016-46a4-9b61-6ab380d4f82e/on_new_stream_0002.json create mode 100644 tiled_logs/run_8b4975da-d016-46a4-9b61-6ab380d4f82e/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_8b4975da-d016-46a4-9b61-6ab380d4f82e/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_8b4975da-d016-46a4-9b61-6ab380d4f82e/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_8c95c048-e8e9-4ba3-bec2-13e72da94445/on_new_run_0001.json create mode 100644 tiled_logs/run_8c95c048-e8e9-4ba3-bec2-13e72da94445/on_new_stream_0001.json create mode 100644 tiled_logs/run_8c95c048-e8e9-4ba3-bec2-13e72da94445/on_new_stream_0002.json create mode 100644 tiled_logs/run_8c95c048-e8e9-4ba3-bec2-13e72da94445/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_8c95c048-e8e9-4ba3-bec2-13e72da94445/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_8c95c048-e8e9-4ba3-bec2-13e72da94445/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_8c95c048-e8e9-4ba3-bec2-13e72da94445/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_8fd7944f-912b-4c4a-8079-4ab22519c7d2/on_new_run_0001.json create mode 100644 tiled_logs/run_8fd7944f-912b-4c4a-8079-4ab22519c7d2/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_93287a66-2b02-4f7a-9606-fad07b377afb/on_new_run_0001.json create mode 100644 tiled_logs/run_93287a66-2b02-4f7a-9606-fad07b377afb/on_new_stream_0001.json create mode 100644 tiled_logs/run_93287a66-2b02-4f7a-9606-fad07b377afb/on_new_stream_0002.json create mode 100644 tiled_logs/run_93287a66-2b02-4f7a-9606-fad07b377afb/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_93287a66-2b02-4f7a-9606-fad07b377afb/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_93287a66-2b02-4f7a-9606-fad07b377afb/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_93287a66-2b02-4f7a-9606-fad07b377afb/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_9714c1c6-ca6a-45f1-b2b7-887df7cb7e36/on_new_run_0001.json create mode 100644 tiled_logs/run_9714c1c6-ca6a-45f1-b2b7-887df7cb7e36/on_new_stream_0001.json create mode 100644 tiled_logs/run_9714c1c6-ca6a-45f1-b2b7-887df7cb7e36/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_9959dc22-f2b4-4830-814c-6e6a701f7e57/on_new_run_0001.json create mode 100644 tiled_logs/run_9959dc22-f2b4-4830-814c-6e6a701f7e57/on_new_stream_0001.json create mode 100644 tiled_logs/run_9959dc22-f2b4-4830-814c-6e6a701f7e57/on_new_stream_0002.json create mode 100644 tiled_logs/run_9959dc22-f2b4-4830-814c-6e6a701f7e57/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_9959dc22-f2b4-4830-814c-6e6a701f7e57/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_9959dc22-f2b4-4830-814c-6e6a701f7e57/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_9959dc22-f2b4-4830-814c-6e6a701f7e57/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_9e7b0b02-327b-4154-89f9-ae37e1ed76e5/on_new_run_0001.json create mode 100644 tiled_logs/run_9e7b0b02-327b-4154-89f9-ae37e1ed76e5/on_new_stream_0001.json create mode 100644 tiled_logs/run_9e7b0b02-327b-4154-89f9-ae37e1ed76e5/on_new_stream_0002.json create mode 100644 tiled_logs/run_9e7b0b02-327b-4154-89f9-ae37e1ed76e5/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_9e7b0b02-327b-4154-89f9-ae37e1ed76e5/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_9e7b0b02-327b-4154-89f9-ae37e1ed76e5/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_aa3b2b26-c39a-4d4a-a89e-4b8ef9e7a2e2/on_new_run_0001.json create mode 100644 tiled_logs/run_aa3b2b26-c39a-4d4a-a89e-4b8ef9e7a2e2/on_new_stream_0001.json create mode 100644 tiled_logs/run_aa3b2b26-c39a-4d4a-a89e-4b8ef9e7a2e2/on_new_stream_0002.json create mode 100644 tiled_logs/run_aa3b2b26-c39a-4d4a-a89e-4b8ef9e7a2e2/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_aa3b2b26-c39a-4d4a-a89e-4b8ef9e7a2e2/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_aa3b2b26-c39a-4d4a-a89e-4b8ef9e7a2e2/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_af3d96b4-31f9-4e67-b915-da113f84a8b9/on_new_run_0001.json create mode 100644 tiled_logs/run_af3d96b4-31f9-4e67-b915-da113f84a8b9/on_new_stream_0001.json create mode 100644 tiled_logs/run_af3d96b4-31f9-4e67-b915-da113f84a8b9/on_new_stream_0002.json create mode 100644 tiled_logs/run_af3d96b4-31f9-4e67-b915-da113f84a8b9/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_af3d96b4-31f9-4e67-b915-da113f84a8b9/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_af3d96b4-31f9-4e67-b915-da113f84a8b9/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_b8a18420-3eb0-4aac-b7fe-89e6eca737f0/on_new_run_0001.json create mode 100644 tiled_logs/run_b8a18420-3eb0-4aac-b7fe-89e6eca737f0/on_new_stream_0001.json create mode 100644 tiled_logs/run_b8a18420-3eb0-4aac-b7fe-89e6eca737f0/on_new_stream_0002.json create mode 100644 tiled_logs/run_b8a18420-3eb0-4aac-b7fe-89e6eca737f0/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_b8a18420-3eb0-4aac-b7fe-89e6eca737f0/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_c90217ee-916d-4ffb-b32d-e4031cc0f195/on_new_run_0001.json create mode 100644 tiled_logs/run_c90217ee-916d-4ffb-b32d-e4031cc0f195/on_new_stream_0001.json create mode 100644 tiled_logs/run_c90217ee-916d-4ffb-b32d-e4031cc0f195/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_c90217ee-916d-4ffb-b32d-e4031cc0f195/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_cdd90d52-49e8-43f9-92c3-49aad29a4473/on_new_run_0001.json create mode 100644 tiled_logs/run_cdd90d52-49e8-43f9-92c3-49aad29a4473/on_new_stream_0001.json create mode 100644 tiled_logs/run_cdd90d52-49e8-43f9-92c3-49aad29a4473/on_new_stream_0002.json create mode 100644 tiled_logs/run_cdd90d52-49e8-43f9-92c3-49aad29a4473/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_cdd90d52-49e8-43f9-92c3-49aad29a4473/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_cdd90d52-49e8-43f9-92c3-49aad29a4473/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_cdd90d52-49e8-43f9-92c3-49aad29a4473/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_d1ae2a9f-2a8a-46ff-9806-093bb2230d3f/on_new_run_0001.json create mode 100644 tiled_logs/run_d1ae2a9f-2a8a-46ff-9806-093bb2230d3f/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_d4470937-a78a-478c-ae29-5464bbc99148/on_new_run_0001.json create mode 100644 tiled_logs/run_d4470937-a78a-478c-ae29-5464bbc99148/on_new_stream_0001.json create mode 100644 tiled_logs/run_d4470937-a78a-478c-ae29-5464bbc99148/on_new_stream_0002.json create mode 100644 tiled_logs/run_d4470937-a78a-478c-ae29-5464bbc99148/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_d4470937-a78a-478c-ae29-5464bbc99148/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_d4470937-a78a-478c-ae29-5464bbc99148/on_node_in_stream_0003.json create mode 100644 tiled_logs/run_d4470937-a78a-478c-ae29-5464bbc99148/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_de2e27ed-bbbd-4e3b-a5ed-5823a8ffb283/on_new_run_0001.json create mode 100644 tiled_logs/run_de2e27ed-bbbd-4e3b-a5ed-5823a8ffb283/on_new_stream_0001.json create mode 100644 tiled_logs/run_de2e27ed-bbbd-4e3b-a5ed-5823a8ffb283/on_new_stream_0002.json create mode 100644 tiled_logs/run_de2e27ed-bbbd-4e3b-a5ed-5823a8ffb283/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_de2e27ed-bbbd-4e3b-a5ed-5823a8ffb283/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_de2e27ed-bbbd-4e3b-a5ed-5823a8ffb283/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_efcc9714-e8af-40e7-b4e7-691baf9335c1/on_new_run_0001.json create mode 100644 tiled_logs/run_efcc9714-e8af-40e7-b4e7-691baf9335c1/on_streams_namespace_0001.json diff --git a/tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_new_run_0001.json b/tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_new_run_0001.json new file mode 100644 index 0000000..7b0ca1d --- /dev/null +++ b/tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_new_run_0001.json @@ -0,0 +1,125 @@ +{ + "event_name": "on_new_run", + "sequence": 1, + "timestamp": 1753390134.3032699, + "subscription_segments": [ + "/" + ], + "callback_data": { + "sequence": 51, + "timestamp": "2025-07-24T20:48:54.289606", + "key": "12e72233-4f7b-49e2-8579-fe1c8cb730cf", + "structure_family": "container", + "specs": [ + { + "name": "BlueskyRun", + "version": "3.0" + } + ], + "metadata": { + "start": { + "uid": "12e72233-4f7b-49e2-8579-fe1c8cb730cf", + "time": 1753390134.130121, + "username": "egann", + "beamline_name": "SMI", + "facility": "NSLS-II", + "tstamp": 1752211775.3666577, + "beamline_attenuators": {}, + "sample_name": "test_test", + "SAXS_setup": { + "sdd": 5000, + "beam_centre": [ + 746, + 1105 + ], + "bs": "rod", + "energy": 16100 + }, + "x0": 1499.8220000000001, + "beamline_beamsize": "3.5um", + "start_datetime": "2025-07-16T13:25:25.696186", + "proposal": { + "proposal_id": "317903", + "title": "Advancing Real-Time Characterization of Polymer Membrane Formation Using X-Ray Scattering", + "type": "General User", + "pi_name": "Gregory Su" + }, + "beamline_sample_environment": "in-air", + "versions": { + "ophyd": "1.10.5", + "bluesky": "1.8.2.dev1119+gfb1e9960", + "ophyd_async": "0.10.0a4" + }, + "alignment_LUT": { + "-2000": { + "x": -2000, + "y": 7105.626, + "z": 2000, + "th": 0.4 + }, + "0": { + "x": 0, + "y": 7092.411, + "z": 2000, + "th": 0.4 + }, + "2000": { + "x": 2000, + "y": 7075.913, + "z": 2000, + "th": 0.4 + } + }, + "project_name": "calibration", + "cycle": "2025-2", + "scan_id": 971161, + "th0": 1.180005, + "data_session": "pass-317903", + "plan_type": "generator", + "plan_name": "rel_scan", + "detectors": [ + "pil2M" + ], + "motors": [ + "stage_y" + ], + "num_points": 21, + "num_intervals": 20, + "plan_args": { + "detectors": [ + "SAXS_Detector(prefix='XF:12ID2-ES{Pilatus:Det-2M}', name='pil2M', read_attrs=['cam', 'cam.file_number', 'tiff', 'stats1', 'stats1.total'], configuration_attrs=['cam', 'cam.acquire_period', 'cam.acquire_time', 'cam.image_mode', 'cam.manufacturer', 'cam.model', 'cam.num_exposures', 'cam.num_images', 'cam.trigger_mode', 'tiff', 'stats1', 'stats1.bgd_width', 'stats1.centroid_threshold', 'stats1.compute_centroid', 'stats1.compute_histogram', 'stats1.compute_profiles', 'stats1.compute_statistics', 'stats1.hist_max', 'stats1.hist_min', 'stats1.hist_size', 'stats1.profile_cursor', 'stats1.profile_size', 'stats1.ts_num_points'])" + ], + "num": 21, + "args": [ + "EpicsMotor(prefix='XF:12IDC-OP:2{HEX:Stg-Ax:Y}Mtr', name='stage_y', parent='stage', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_setpoint'])", + -0.5, + 0.5 + ], + "per_step": "None" + }, + "hints": { + "dimensions": [ + [ + [ + "stage_y" + ], + "primary" + ] + ] + }, + "plan_pattern": "inner_product", + "plan_pattern_module": "bluesky.plan_patterns", + "plan_pattern_args": { + "num": 21, + "args": [ + "EpicsMotor(prefix='XF:12IDC-OP:2{HEX:Stg-Ax:Y}Mtr', name='stage_y', parent='stage', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_setpoint'])", + -0.5, + 0.5 + ] + } + } + }, + "data_sources": [], + "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" + } +} \ No newline at end of file diff --git a/tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_new_stream_0001.json b/tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_new_stream_0001.json new file mode 100644 index 0000000..0928308 --- /dev/null +++ b/tiled_logs/run_12e72233-4f7b-49e2-8579-fe1c8cb730cf/on_new_stream_0001.json @@ -0,0 +1,8917 @@ +{ + "event_name": "on_new_stream", + "sequence": 1, + "timestamp": 1753390135.4358015, + "subscription_segments": [ + "12e72233-4f7b-49e2-8579-fe1c8cb730cf", + "streams" + ], + "callback_data": { + "sequence": 1, + "timestamp": "2025-07-24T20:48:55.155366", + "key": "baseline", + "structure_family": "composite", + "specs": [ + { + "name": "BlueskyEventStream", + "version": "3.0" + } + ], + "metadata": { + "configuration": { + "xbpm3_pos": { + "data": { + "xbpm3_pos_x_user_offset": 0.0, + "xbpm3_pos_x_user_offset_dir": 0, + "xbpm3_pos_x_velocity": 1.0, + "xbpm3_pos_x_acceleration": 0.2, + "xbpm3_pos_x_motor_egu": "mm", + "xbpm3_pos_y_user_offset": 0.0, + "xbpm3_pos_y_user_offset_dir": 0, + "xbpm3_pos_y_velocity": 1.0, + "xbpm3_pos_y_acceleration": 0.2, + "xbpm3_pos_y_motor_egu": "mm" + }, + "timestamps": { + "xbpm3_pos_x_user_offset": 1753386189.372093, + "xbpm3_pos_x_user_offset_dir": 1753386189.372093, + "xbpm3_pos_x_velocity": 1753386189.372093, + "xbpm3_pos_x_acceleration": 1753386189.372093, + "xbpm3_pos_x_motor_egu": 1753386189.372093, + "xbpm3_pos_y_user_offset": 1753386187.260721, + "xbpm3_pos_y_user_offset_dir": 1753386187.260721, + "xbpm3_pos_y_velocity": 1753386187.260721, + "xbpm3_pos_y_acceleration": 1753386187.260721, + "xbpm3_pos_y_motor_egu": 1753386187.260721 + }, + "data_keys": { + "xbpm3_pos_x_user_offset": { + "source": "PV:XF:12IDB-BI:2{XBPM:3-Ax:X}Mtr.OFF", + "dtype": "number", + "shape": [], + "units": "mm", + "lower_ctrl_limit": -9007199254740991, + "upper_ctrl_limit": 9007199254740991, + "precision": 6, + "dtype_numpy": " Date: Fri, 25 Jul 2025 19:14:21 -0400 Subject: [PATCH 08/14] send images from web socket --- .vscode/launch.json | 9 +- src/arroyosas/app/tiled_ws_cli.py | 2 - src/arroyosas/tiled/tiled_websocket.py | 144 ++++++++++++++----------- 3 files changed, 87 insertions(+), 68 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 38d77fe..d22966d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -11,9 +11,10 @@ "request": "launch", "module": "arroyosas.app.tiled_ws_cli", "env": { - "TILED_URI": "ws://localhost:8000", - "TILED_API_KEY": "32bf4b533d638f470270e0725d14a7bc153114641a7dfda58f96e7926160e9e126272add" - } + "TILED_URI": "https://tield-dev.nsls2.bnl.gov", + + }, + "justMyCode": true }, { "name": "tiled_websocket", @@ -21,7 +22,7 @@ "request": "launch", "module": "arroyosas.tiled.tiled_websocket", "env": { - "TILED_API_KEY": "32bf4b533d638f470270e0725d14a7bc153114641a7dfda58f96e7926160e9e126272add" + } }, { diff --git a/src/arroyosas/app/tiled_ws_cli.py b/src/arroyosas/app/tiled_ws_cli.py index 556f012..1fc818b 100644 --- a/src/arroyosas/app/tiled_ws_cli.py +++ b/src/arroyosas/app/tiled_ws_cli.py @@ -50,8 +50,6 @@ def start( # Create and start listener listener = TiledClientListener.from_settings(app_settings, operator) asyncio.run(listener.start()) - while True: - time.sleep(5) if __name__ == "__main__": app() diff --git a/src/arroyosas/tiled/tiled_websocket.py b/src/arroyosas/tiled/tiled_websocket.py index 684c43a..72ec192 100644 --- a/src/arroyosas/tiled/tiled_websocket.py +++ b/src/arroyosas/tiled/tiled_websocket.py @@ -10,13 +10,13 @@ RawFrameEvent, SASMessage, SASStart, + SerializableNumpyArrayModel ) from arroyopy.listener import Listener from arroyopy.operator import Operator from tiled.client import from_uri from tiled.client.base import BaseClient from tiled.client.stream import Subscription -from tiled.structures.array import ArrayStructure logger = logging.getLogger(__name__) @@ -36,7 +36,7 @@ def __init__( operator: Operator, tiled_client: BaseClient, stream_name: str = "primary", - data_source: str = "pil2M_image", + target: str = "pil2M_image", create_run_logs: bool = False, log_dir: str = "tiled_logs", ): @@ -44,7 +44,7 @@ def __init__( self.operator = operator self.tiled_client = tiled_client self.stream_name = stream_name # The name of the stream to listen to e.g. 'primary' - self.data_source = data_source # The name of the data source to listen to e.g. 'pil2M_image' + self.target = target # The name of the data source to listen to e.g. 'pil2M_image' self.create_run_logs = create_run_logs if not os.path.exists(log_dir): os.makedirs(log_dir, exist_ok=True) @@ -58,87 +58,103 @@ def on_new_run(self, sub: Subscription, data: Dict[str, Any]): """ Handle new run events by creating a subscription for the run. """ - uid = data["key"] - logger.debug(f"New run {uid}") if logger.isEnabledFor(logging.DEBUG) else None - - # Create new folder for this run - if self.create_run_logs: - self.create_run_folder(uid) - self.log_message_to_json("on_new_run", sub, data) - - # Subscribe to the run - run_sub = Subscription(self.tiled_client.context, [uid], start=0) - run_sub.add_callback(self.on_streams_namespace) - run_sub.start() - # Publish start event - self.publish_start(data) + try: + uid = data["key"] + logger.debug(f"New run {uid}") if logger.isEnabledFor(logging.DEBUG) else None + + # Create new folder for this run + if self.create_run_logs: + self.create_run_folder(uid) + self.log_message_to_json("on_new_run", sub, data) + + # Subscribe to the run + run_sub = Subscription(self.tiled_client.context, [uid], start=0) + run_sub.add_callback(self.on_streams_namespace) + run_sub.start() + # Publish start event + self.publish_start(data) + except Exception as e: + logger.error(f"Error processing new run {data}: {e}") + return def on_streams_namespace(self, sub, data): """ Handle new streams namespace events by subscribing to the 'streams' segment. For example, this might be the creation of 'baseline' or 'primary' streams. """ - logger.debug(data) if logger.isEnabledFor(logging.DEBUG) else None - - # Log the event - if self.create_run_logs: - self.log_message_to_json("on_streams_namespace", sub, data) + try: + logger.debug(data) if logger.isEnabledFor(logging.DEBUG) else None - streams_sub = Subscription( - self.tiled_client.context, sub.segments + ["streams"], start=0 - ) - streams_sub.add_callback(self.on_new_stream) - streams_sub.start() + # Log the event + if self.create_run_logs: + self.log_message_to_json("on_streams_namespace", sub, data) + streams_sub = Subscription( + self.tiled_client.context, sub.segments + ["streams"], start=0 + ) + streams_sub.add_callback(self.on_new_stream) + streams_sub.start() + except Exception as e: + logger.error(f"Error processing streams namespace {data}: {e}") + return def on_new_stream(self, sub, data): """ Handle new stream """ - logger.debug(data) if logger.isEnabledFor(logging.DEBUG) else None - stream_name = data["key"] - logger.info(f"new stream {stream_name}") if logger.isEnabledFor( - logging.INFO - ) else None - - if self.create_run_logs: - self.log_message_to_json("on_new_stream", sub, data) + try: + logger.debug(data) if logger.isEnabledFor(logging.DEBUG) else None + stream_name = data["key"] + if stream_name != self.stream_name: + logger.debug(f"Skipping stream {stream_name}, not the target stream") if logger.isEnabledFor( + logging.INFO + ) else None + return + logger.info(f"new stream {stream_name}") if logger.isEnabledFor( + logging.INFO + ) else None + + if self.create_run_logs: + self.log_message_to_json("on_new_stream", sub, data) - stream_sub = Subscription( - self.tiled_client.context, sub.segments + [stream_name], start=0 - ) - stream_sub.add_callback(self.on_node_in_stream) - stream_sub.start() + stream_sub = Subscription( + self.tiled_client.context, sub.segments + [stream_name], start=0 + ) + stream_sub.add_callback(self.on_node_in_stream) + stream_sub.start() + except Exception as e: + logger.error(f"Error processing new stream {data}: {e}") + return def load_data(self, sub, data): - patch = data['patch'] - logger.debug(data['uri']) if logger.isEnabledFor(logging.DEBUG) else None - slice_ = tuple(slice(offset, offset + shape) for offset, shape in zip(patch["offset"], patch["shape"])) # GET /array/full/... - node = self.tiled_client['/'.join(sub.segments)] # GET /metadata/... wasteful to do it on each load_data call - images = node.read(slice=slice_) # could be sub.node.read(...) - logger.debug(f"images shape {images.shape}") if logger.isEnabledFor(logging.DEBUG) else None - + try: + patch = data['patch'] + logger.debug(data['uri']) if logger.isEnabledFor(logging.DEBUG) else None + slice_ = tuple(slice(offset, offset + shape) for offset, shape in zip(patch["offset"], patch["shape"])) # GET /array/full/... + node = self.tiled_client['/'.join(sub.segments)] # GET /metadata/... wasteful to do it on each load_data call + data['images'] = node.read(slice=slice_) # could be sub.node.read(...) + logger.debug(f"images shape {data['images'].shape}") if logger.isEnabledFor(logging.DEBUG) else None + self.publish_event(data) + except Exception as e: + logger.error(f"Error loading data for {sub.segments}: {e}") + return + def on_node_in_stream(self, sub, data): logger.debug(data) if logger.isEnabledFor(logging.DEBUG) else None key = data["key"] - if self.create_run_logs: self.log_message_to_json("on_node_in_stream", sub, data) - # Log what we're comparing for debugging - logger.info( - f"Checking key '{key}'" - ) if logger.isEnabledFor(logging.INFO) else None - - logger.info( - f"Key '{key}', proceeding" - ) if logger.isEnabledFor(logging.INFO) else None + if key != self.target: + logger.debug(f"Skipping node {key}, not the target node") if logger.isEnabledFor( + logging.INFO + ) else None + return try: stream_sub = Subscription( self.tiled_client.context, sub.segments + [key], start=0 ) stream_sub.add_callback(self.load_data) stream_sub.start() - self.publish_event(data) except Exception as e: logger.error(f"Error processing node {sub.segments + [key]}: {e}") @@ -188,9 +204,12 @@ def send_to_operator(self, message: SASMessage) -> None: def publish_start(self, data: Dict[str, Any]) -> None: # We need to make a request to get image information - # structure = ArrayStructure.from_json(data["data_source"]["structure"]) - structure = self.tiled_client[data['key']]['streams'][self.stream_name][self.data_source]._structure + if self.tiled_client[data['key']]['streams'].get(self.stream_name) is None: + logger.debug(f"Stream {self.stream_name} not found for key {data['key']}") + return + + structure = self.tiled_client[data['key']]['streams'][self.stream_name][self.target]._structure start = SASStart( run_name=data['key'], run_id=data['key'], @@ -206,10 +225,11 @@ def publish_event(self, data: Dict[str, Any]) -> None: """ Publish an event to the operator. """ + serializable_array = SerializableNumpyArrayModel(array=data['images']) event = RawFrameEvent( - image=None, + image=serializable_array, frame_number=data.get("sequence", 0), - tiled_url="", # Placeholder for actual URL if needed + tiled_url=data['uri'], # Placeholder for actual URL if needed ) self.send_to_operator(event) @@ -266,7 +286,7 @@ def from_settings(cls, settings: Any, op: Operator) -> "TiledClientListener": """Create a TiledClientListener from settings.""" client = from_uri( settings.uri, - api_key=settings.api_key, + api_key="01992146236c6ec3e6a6571421690b89986641d3a12ffd3aacad9edda69d5ff3557b47b9", ) # Create log directory if specified in settings From 7085782950c673b5b4791f415da0dc43aea248f2 Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Fri, 25 Jul 2025 12:32:30 -0700 Subject: [PATCH 09/14] add more sample runs --- .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 369 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 369 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 369 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 132 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 629 ++ .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 132 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 132 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 629 ++ .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 132 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 369 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 369 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 369 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 132 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 629 ++ .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 132 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 369 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 114 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 587 ++ .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 94 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 132 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 629 ++ .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 132 + .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 + .../on_new_stream_0001.json | 8941 +++++++++++++++++ .../on_new_stream_0002.json | 357 + .../on_node_in_stream_0001.json | 4112 ++++++++ .../on_node_in_stream_0002.json | 95 + .../on_streams_namespace_0001.json | 18 + 138 files changed, 315560 insertions(+) create mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_run_0001.json create mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_stream_0001.json create mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_stream_0002.json create mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_new_run_0001.json create mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_new_stream_0001.json create mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_new_stream_0002.json create mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_new_run_0001.json create mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_new_stream_0001.json create mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_new_stream_0002.json create mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_new_run_0001.json create mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_new_stream_0001.json create mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_new_stream_0002.json create mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_run_0001.json create mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_stream_0001.json create mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_stream_0002.json create mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_new_run_0001.json create mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_new_stream_0001.json create mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_new_stream_0002.json create mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_new_run_0001.json create mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_new_stream_0001.json create mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_new_stream_0002.json create mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_new_run_0001.json create mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_new_stream_0001.json create mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_new_stream_0002.json create mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_new_run_0001.json create mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_new_stream_0001.json create mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_new_stream_0002.json create mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_run_0001.json create mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_stream_0001.json create mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_stream_0002.json create mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_new_run_0001.json create mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_new_stream_0001.json create mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_new_stream_0002.json create mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_new_run_0001.json create mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_new_stream_0001.json create mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_new_stream_0002.json create mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_new_run_0001.json create mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_new_stream_0001.json create mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_new_stream_0002.json create mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_new_run_0001.json create mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_new_stream_0001.json create mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_new_stream_0002.json create mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_new_run_0001.json create mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_new_stream_0001.json create mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_new_stream_0002.json create mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_run_0001.json create mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_stream_0001.json create mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_stream_0002.json create mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_new_run_0001.json create mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_new_stream_0001.json create mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_new_stream_0002.json create mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_new_run_0001.json create mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_new_stream_0001.json create mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_new_stream_0002.json create mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_new_run_0001.json create mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_new_stream_0001.json create mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_new_stream_0002.json create mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_new_run_0001.json create mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_new_stream_0001.json create mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_new_stream_0002.json create mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_new_run_0001.json create mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_new_stream_0001.json create mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_new_stream_0002.json create mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_run_0001.json create mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_stream_0001.json create mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_stream_0002.json create mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_new_run_0001.json create mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_new_stream_0001.json create mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_new_stream_0002.json create mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_streams_namespace_0001.json diff --git a/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_run_0001.json b/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_run_0001.json new file mode 100644 index 0000000..44abc9a --- /dev/null +++ b/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_run_0001.json @@ -0,0 +1,130 @@ +{ + "event_name": "on_new_run", + "sequence": 1, + "timestamp": 1753468883.5598931, + "subscription_segments": [ + "/" + ], + "callback_data": { + "sequence": 185, + "timestamp": "2025-07-25T18:41:23.523160", + "key": "01561d2b-368c-42db-b619-43a3c1510a89", + "structure_family": "container", + "specs": [ + { + "name": "BlueskyRun", + "version": "3.0" + } + ], + "metadata": { + "start": { + "uid": "01561d2b-368c-42db-b619-43a3c1510a89", + "time": 1753468883.3793726, + "username": "egann", + "beamline_name": "SMI", + "facility": "NSLS-II", + "tstamp": 1752211775.3666577, + "beamline_attenuators": { + "att1_7_status": { + "material": "Sn_60um", + "thickness": "4x" + } + }, + "sample_name": "test_test", + "SAXS_setup": { + "sdd": 5000, + "beam_centre": [ + 746, + 1105 + ], + "bs": "rod", + "energy": 16100 + }, + "x0": 1499.8220000000001, + "beamline_beamsize": "3.5um", + "start_datetime": "2025-07-16T13:25:25.696186", + "proposal": { + "proposal_id": "317903", + "title": "Advancing Real-Time Characterization of Polymer Membrane Formation Using X-Ray Scattering", + "type": "General User", + "pi_name": "Gregory Su" + }, + "beamline_sample_environment": "in-air", + "versions": { + "ophyd": "1.10.5", + "bluesky": "1.8.2.dev1119+gfb1e9960", + "ophyd_async": "0.10.0a4" + }, + "alignment_LUT": { + "-2000": { + "x": -2000, + "y": 7105.626, + "z": 2000, + "th": 0.4 + }, + "0": { + "x": 0, + "y": 7092.411, + "z": 2000, + "th": 0.4 + }, + "2000": { + "x": 2000, + "y": 7075.913, + "z": 2000, + "th": 0.4 + } + }, + "project_name": "Blade_HOPI_4wt_70water", + "cycle": "2025-2", + "scan_id": 971295, + "th0": 1.180005, + "data_session": "pass-317903", + "plan_type": "generator", + "plan_name": "rel_scan", + "detectors": [ + "pil2M" + ], + "motors": [ + "stage_y" + ], + "num_points": 21, + "num_intervals": 20, + "plan_args": { + "detectors": [ + "SAXS_Detector(prefix='XF:12ID2-ES{Pilatus:Det-2M}', name='pil2M', read_attrs=['cam', 'cam.file_number', 'tiff', 'stats1', 'stats1.total'], configuration_attrs=['cam', 'cam.acquire_period', 'cam.acquire_time', 'cam.image_mode', 'cam.manufacturer', 'cam.model', 'cam.num_exposures', 'cam.num_images', 'cam.trigger_mode', 'tiff', 'stats1', 'stats1.bgd_width', 'stats1.centroid_threshold', 'stats1.compute_centroid', 'stats1.compute_histogram', 'stats1.compute_profiles', 'stats1.compute_statistics', 'stats1.hist_max', 'stats1.hist_min', 'stats1.hist_size', 'stats1.profile_cursor', 'stats1.profile_size', 'stats1.ts_num_points'])" + ], + "num": 21, + "args": [ + "EpicsMotor(prefix='XF:12IDC-OP:2{HEX:Stg-Ax:Y}Mtr', name='stage_y', parent='stage', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_readback', 'user_setpoint'])", + -0.5, + 0.5 + ], + "per_step": "None" + }, + "hints": { + "dimensions": [ + [ + [ + "stage_y" + ], + "primary" + ] + ] + }, + "plan_pattern": "inner_product", + "plan_pattern_module": "bluesky.plan_patterns", + "plan_pattern_args": { + "num": 21, + "args": [ + "EpicsMotor(prefix='XF:12IDC-OP:2{HEX:Stg-Ax:Y}Mtr', name='stage_y', parent='stage', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_readback', 'user_setpoint'])", + -0.5, + 0.5 + ] + } + } + }, + "data_sources": [], + "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" + } +} \ No newline at end of file diff --git a/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_stream_0001.json b/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_stream_0001.json new file mode 100644 index 0000000..5c97341 --- /dev/null +++ b/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_stream_0001.json @@ -0,0 +1,8941 @@ +{ + "event_name": "on_new_stream", + "sequence": 1, + "timestamp": 1753468884.7427838, + "subscription_segments": [ + "01561d2b-368c-42db-b619-43a3c1510a89", + "streams" + ], + "callback_data": { + "sequence": 1, + "timestamp": "2025-07-25T18:41:24.384868", + "key": "baseline", + "structure_family": "composite", + "specs": [ + { + "name": "BlueskyEventStream", + "version": "3.0" + } + ], + "metadata": { + "configuration": { + "GV7": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att2_5": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "xbpm2": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att1_8": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att2_9": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "Pilatus900kw": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "energy": { + "data": { + "energy_bragg_user_offset": 1.423, + "energy_bragg_user_offset_dir": 0, + "energy_bragg_velocity": 5.0, + "energy_bragg_acceleration": 0.5, + "energy_bragg_motor_egu": "deg", + "energy_enableivu": true, + "energy_enabledcmgap": true, + "energy_target_harmonic": 21 + }, + "timestamps": { + "energy_bragg_user_offset": 1753452747.267282, + "energy_bragg_user_offset_dir": 1753452747.267282, + "energy_bragg_velocity": 1753452747.267282, + "energy_bragg_acceleration": 1753452747.267282, + "energy_bragg_motor_egu": 1753452747.267282, + "energy_enableivu": 1753452747.2856257, + "energy_enabledcmgap": 1753452747.2856383, + "energy_target_harmonic": 1753452747.28565 + }, + "data_keys": { + "energy_bragg_user_offset": { + "source": "PV:XF:12ID:m65.OFF", + "dtype": "number", + "shape": [], + "units": "deg", + "lower_ctrl_limit": -9007199254740991, + "upper_ctrl_limit": 9007199254740991, + "precision": 5, + "dtype_numpy": "" + }, + "hints": { + "dimensions": [ + [ + [ + "thorlabs_su_readback" + ], + "primary" + ] + ] + }, + "plan_pattern": "inner_product", + "plan_pattern_module": "bluesky.plan_patterns", + "plan_pattern_args": { + "num": 360, + "args": [ + "ThorlabsMotor(prefix='XF:12ID2-ES{DDSM100-Ax:X1}Mtr', name='thorlabs_su', settle_time=0.0, timeout=None, read_attrs=['readback', 'setpoint', 'done'], configuration_attrs=[], limits=None, egu='')", + 87, + 72 + ] + } + } + }, + "data_sources": [], + "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" + } +} \ No newline at end of file diff --git a/tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_stream_0001.json b/tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_stream_0001.json new file mode 100644 index 0000000..434b8d4 --- /dev/null +++ b/tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_stream_0001.json @@ -0,0 +1,8941 @@ +{ + "event_name": "on_new_stream", + "sequence": 1, + "timestamp": 1753469265.3057973, + "subscription_segments": [ + "4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6", + "streams" + ], + "callback_data": { + "sequence": 1, + "timestamp": "2025-07-25T18:47:44.912434", + "key": "baseline", + "structure_family": "composite", + "specs": [ + { + "name": "BlueskyEventStream", + "version": "3.0" + } + ], + "metadata": { + "configuration": { + "GV7": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att2_5": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "xbpm2": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att1_8": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att2_9": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "Pilatus900kw": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "energy": { + "data": { + "energy_bragg_user_offset": 1.423, + "energy_bragg_user_offset_dir": 0, + "energy_bragg_velocity": 5.0, + "energy_bragg_acceleration": 0.5, + "energy_bragg_motor_egu": "deg", + "energy_enableivu": true, + "energy_enabledcmgap": true, + "energy_target_harmonic": 21 + }, + "timestamps": { + "energy_bragg_user_offset": 1753452747.267282, + "energy_bragg_user_offset_dir": 1753452747.267282, + "energy_bragg_velocity": 1753452747.267282, + "energy_bragg_acceleration": 1753452747.267282, + "energy_bragg_motor_egu": 1753452747.267282, + "energy_enableivu": 1753452747.2856257, + "energy_enabledcmgap": 1753452747.2856383, + "energy_target_harmonic": 1753452747.28565 + }, + "data_keys": { + "energy_bragg_user_offset": { + "source": "PV:XF:12ID:m65.OFF", + "dtype": "number", + "shape": [], + "units": "deg", + "lower_ctrl_limit": -9007199254740991, + "upper_ctrl_limit": 9007199254740991, + "precision": 5, + "dtype_numpy": "" + }, + "hints": { + "dimensions": [ + [ + [ + "thorlabs_su_readback" + ], + "primary" + ] + ] + }, + "plan_pattern": "inner_product", + "plan_pattern_module": "bluesky.plan_patterns", + "plan_pattern_args": { + "num": 360, + "args": [ + "ThorlabsMotor(prefix='XF:12ID2-ES{DDSM100-Ax:X1}Mtr', name='thorlabs_su', settle_time=0.0, timeout=None, read_attrs=['readback', 'setpoint', 'done'], configuration_attrs=[], limits=None, egu='')", + 87, + 72 + ] + } + } + }, + "data_sources": [], + "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" + } +} \ No newline at end of file diff --git a/tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_stream_0001.json b/tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_stream_0001.json new file mode 100644 index 0000000..16f6b9e --- /dev/null +++ b/tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_stream_0001.json @@ -0,0 +1,8941 @@ +{ + "event_name": "on_new_stream", + "sequence": 1, + "timestamp": 1753471271.7619412, + "subscription_segments": [ + "9bc37976-7488-4818-849b-f3b3af542bd6", + "streams" + ], + "callback_data": { + "sequence": 1, + "timestamp": "2025-07-25T19:21:11.417794", + "key": "baseline", + "structure_family": "composite", + "specs": [ + { + "name": "BlueskyEventStream", + "version": "3.0" + } + ], + "metadata": { + "configuration": { + "GV7": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att2_5": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "xbpm2": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att1_8": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att2_9": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "Pilatus900kw": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "energy": { + "data": { + "energy_bragg_user_offset": 1.423, + "energy_bragg_user_offset_dir": 0, + "energy_bragg_velocity": 5.0, + "energy_bragg_acceleration": 0.5, + "energy_bragg_motor_egu": "deg", + "energy_enableivu": true, + "energy_enabledcmgap": true, + "energy_target_harmonic": 21 + }, + "timestamps": { + "energy_bragg_user_offset": 1753452747.267282, + "energy_bragg_user_offset_dir": 1753452747.267282, + "energy_bragg_velocity": 1753452747.267282, + "energy_bragg_acceleration": 1753452747.267282, + "energy_bragg_motor_egu": 1753452747.267282, + "energy_enableivu": 1753452747.2856257, + "energy_enabledcmgap": 1753452747.2856383, + "energy_target_harmonic": 1753452747.28565 + }, + "data_keys": { + "energy_bragg_user_offset": { + "source": "PV:XF:12ID:m65.OFF", + "dtype": "number", + "shape": [], + "units": "deg", + "lower_ctrl_limit": -9007199254740991, + "upper_ctrl_limit": 9007199254740991, + "precision": 5, + "dtype_numpy": "" + }, + "hints": { + "dimensions": [ + [ + [ + "thorlabs_su_readback" + ], + "primary" + ] + ] + }, + "plan_pattern": "inner_product", + "plan_pattern_module": "bluesky.plan_patterns", + "plan_pattern_args": { + "num": 360, + "args": [ + "ThorlabsMotor(prefix='XF:12ID2-ES{DDSM100-Ax:X1}Mtr', name='thorlabs_su', settle_time=0.0, timeout=None, read_attrs=['readback', 'setpoint', 'done'], configuration_attrs=[], limits=None, egu='')", + 87, + 72 + ] + } + } + }, + "data_sources": [], + "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" + } +} \ No newline at end of file diff --git a/tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_stream_0001.json b/tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_stream_0001.json new file mode 100644 index 0000000..2b79dcf --- /dev/null +++ b/tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_stream_0001.json @@ -0,0 +1,8941 @@ +{ + "event_name": "on_new_stream", + "sequence": 1, + "timestamp": 1753466126.9802625, + "subscription_segments": [ + "cd9508f2-d386-419c-9e05-322fb2110e9e", + "streams" + ], + "callback_data": { + "sequence": 1, + "timestamp": "2025-07-25T17:55:26.640498", + "key": "baseline", + "structure_family": "composite", + "specs": [ + { + "name": "BlueskyEventStream", + "version": "3.0" + } + ], + "metadata": { + "configuration": { + "GV7": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att2_5": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "xbpm2": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att1_8": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att2_9": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "Pilatus900kw": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "energy": { + "data": { + "energy_bragg_user_offset": 1.423, + "energy_bragg_user_offset_dir": 0, + "energy_bragg_velocity": 5.0, + "energy_bragg_acceleration": 0.5, + "energy_bragg_motor_egu": "deg", + "energy_enableivu": true, + "energy_enabledcmgap": true, + "energy_target_harmonic": 21 + }, + "timestamps": { + "energy_bragg_user_offset": 1753452747.267282, + "energy_bragg_user_offset_dir": 1753452747.267282, + "energy_bragg_velocity": 1753452747.267282, + "energy_bragg_acceleration": 1753452747.267282, + "energy_bragg_motor_egu": 1753452747.267282, + "energy_enableivu": 1753452747.2856257, + "energy_enabledcmgap": 1753452747.2856383, + "energy_target_harmonic": 1753452747.28565 + }, + "data_keys": { + "energy_bragg_user_offset": { + "source": "PV:XF:12ID:m65.OFF", + "dtype": "number", + "shape": [], + "units": "deg", + "lower_ctrl_limit": -9007199254740991, + "upper_ctrl_limit": 9007199254740991, + "precision": 5, + "dtype_numpy": "" + }, + "hints": { + "dimensions": [ + [ + [ + "thorlabs_su_readback" + ], + "primary" + ] + ] + }, + "plan_pattern": "inner_product", + "plan_pattern_module": "bluesky.plan_patterns", + "plan_pattern_args": { + "num": 360, + "args": [ + "ThorlabsMotor(prefix='XF:12ID2-ES{DDSM100-Ax:X1}Mtr', name='thorlabs_su', settle_time=0.0, timeout=None, read_attrs=['readback', 'setpoint', 'done'], configuration_attrs=[], limits=None, egu='')", + 87, + 72 + ] + } + } + }, + "data_sources": [], + "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" + } +} \ No newline at end of file diff --git a/tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_stream_0001.json b/tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_stream_0001.json new file mode 100644 index 0000000..27abc01 --- /dev/null +++ b/tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_stream_0001.json @@ -0,0 +1,8941 @@ +{ + "event_name": "on_new_stream", + "sequence": 1, + "timestamp": 1753468478.4005013, + "subscription_segments": [ + "f0223532-0d03-41a0-9545-1c4bcb56149f", + "streams" + ], + "callback_data": { + "sequence": 1, + "timestamp": "2025-07-25T18:34:38.080802", + "key": "baseline", + "structure_family": "composite", + "specs": [ + { + "name": "BlueskyEventStream", + "version": "3.0" + } + ], + "metadata": { + "configuration": { + "GV7": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att2_5": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "xbpm2": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att1_8": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "att2_9": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "Pilatus900kw": { + "data": {}, + "timestamps": {}, + "data_keys": {} + }, + "energy": { + "data": { + "energy_bragg_user_offset": 1.423, + "energy_bragg_user_offset_dir": 0, + "energy_bragg_velocity": 5.0, + "energy_bragg_acceleration": 0.5, + "energy_bragg_motor_egu": "deg", + "energy_enableivu": true, + "energy_enabledcmgap": true, + "energy_target_harmonic": 21 + }, + "timestamps": { + "energy_bragg_user_offset": 1753452747.267282, + "energy_bragg_user_offset_dir": 1753452747.267282, + "energy_bragg_velocity": 1753452747.267282, + "energy_bragg_acceleration": 1753452747.267282, + "energy_bragg_motor_egu": 1753452747.267282, + "energy_enableivu": 1753452747.2856257, + "energy_enabledcmgap": 1753452747.2856383, + "energy_target_harmonic": 1753452747.28565 + }, + "data_keys": { + "energy_bragg_user_offset": { + "source": "PV:XF:12ID:m65.OFF", + "dtype": "number", + "shape": [], + "units": "deg", + "lower_ctrl_limit": -9007199254740991, + "upper_ctrl_limit": 9007199254740991, + "precision": 5, + "dtype_numpy": " Date: Fri, 25 Jul 2025 16:21:29 -0700 Subject: [PATCH 10/14] clean tiled logs --- .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 369 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 369 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 369 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 107 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 310 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 69 - .../on_node_in_stream_0003.json | 55 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 132 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 629 -- .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 132 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 107 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 310 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 69 - .../on_node_in_stream_0003.json | 55 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 132 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 629 -- .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 132 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 369 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 369 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 369 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 132 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 629 -- .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 132 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 107 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 310 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 69 - .../on_node_in_stream_0003.json | 55 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 369 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 114 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 587 -- .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 94 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 132 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 629 -- .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 132 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 130 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 357 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 95 - .../on_streams_namespace_0001.json | 18 - .../on_new_run_0001.json | 107 - .../on_new_stream_0001.json | 8941 ----------------- .../on_new_stream_0002.json | 310 - .../on_node_in_stream_0001.json | 4112 -------- .../on_node_in_stream_0002.json | 69 - .../on_node_in_stream_0003.json | 55 - .../on_streams_namespace_0001.json | 18 - 166 files changed, 370008 deletions(-) delete mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_run_0001.json delete mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_stream_0001.json delete mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_stream_0002.json delete mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_new_run_0001.json delete mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_new_stream_0001.json delete mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_new_stream_0002.json delete mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_029c2b33-c503-4398-ba4e-1b346e929b0c/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_new_run_0001.json delete mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_new_stream_0001.json delete mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_new_stream_0002.json delete mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_0fedcda4-49c4-4953-bb9b-c4fa31e7e29f/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_run_0001.json delete mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_stream_0001.json delete mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_new_stream_0002.json delete mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_node_in_stream_0003.json delete mode 100644 tiled_logs/run_1f8941fe-b390-4acf-aaa6-72079d441ce9/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_new_run_0001.json delete mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_new_stream_0001.json delete mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_new_stream_0002.json delete mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_33fce133-4b27-4249-b5d5-1b0f689403a6/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_run_0001.json delete mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_stream_0001.json delete mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_stream_0002.json delete mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_new_run_0001.json delete mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_new_stream_0001.json delete mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_new_stream_0002.json delete mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_55ba6376-60db-46b1-b3b5-f0841f2c67c7/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_new_run_0001.json delete mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_new_stream_0001.json delete mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_new_stream_0002.json delete mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_65d9eb98-aa3b-4035-babd-4791f202a868/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_new_run_0001.json delete mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_new_stream_0001.json delete mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_new_stream_0002.json delete mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_node_in_stream_0003.json delete mode 100644 tiled_logs/run_707255ae-6542-4c0e-93b5-8fcfe8f84df3/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_new_run_0001.json delete mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_new_stream_0001.json delete mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_new_stream_0002.json delete mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_78a82de3-5f51-4812-ab40-d2db500343b5/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_new_run_0001.json delete mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_new_stream_0001.json delete mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_new_stream_0002.json delete mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_9a460d4d-df3f-4d41-9663-0d7627ba8be2/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_run_0001.json delete mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_stream_0001.json delete mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_stream_0002.json delete mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_new_run_0001.json delete mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_new_stream_0001.json delete mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_new_stream_0002.json delete mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_a2887b9f-4182-421a-a826-8f15e9840519/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_new_run_0001.json delete mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_new_stream_0001.json delete mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_new_stream_0002.json delete mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_aa47ff20-cd1b-4547-a099-4a6751572bc8/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_new_run_0001.json delete mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_new_stream_0001.json delete mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_new_stream_0002.json delete mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_afe8cd53-86c0-4f4f-a60c-371fed7c6448/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_new_run_0001.json delete mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_new_stream_0001.json delete mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_new_stream_0002.json delete mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_bba25ddf-de0f-4c92-a980-ac97f323b439/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_new_run_0001.json delete mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_new_stream_0001.json delete mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_new_stream_0002.json delete mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_ca77be00-1963-4246-9dcf-ee015f6b615e/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_run_0001.json delete mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_stream_0001.json delete mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_stream_0002.json delete mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_new_run_0001.json delete mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_new_stream_0001.json delete mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_new_stream_0002.json delete mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_node_in_stream_0003.json delete mode 100644 tiled_logs/run_d0e4b039-fd23-4b59-bc83-60bf63c6dc07/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_new_run_0001.json delete mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_new_stream_0001.json delete mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_new_stream_0002.json delete mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_d318beea-902a-4a01-877b-77c3393e88b6/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_new_run_0001.json delete mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_new_stream_0001.json delete mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_new_stream_0002.json delete mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_d96351b0-b22d-45eb-b7a2-c5c383cbd72a/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_new_run_0001.json delete mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_new_stream_0001.json delete mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_new_stream_0002.json delete mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_da9ff562-66c7-43b4-9ede-dd25fc3b6d9c/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_new_run_0001.json delete mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_new_stream_0001.json delete mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_new_stream_0002.json delete mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_dc733789-2ed7-4632-8cab-852b9c993f1c/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_new_run_0001.json delete mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_new_stream_0001.json delete mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_new_stream_0002.json delete mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_deed0b8f-e292-4f3c-aae2-c8e5058dcc8d/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_run_0001.json delete mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_stream_0001.json delete mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_stream_0002.json delete mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_new_run_0001.json delete mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_new_stream_0001.json delete mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_new_stream_0002.json delete mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_f24fd256-0e5c-4ab7-bba4-a94ca34e454f/on_streams_namespace_0001.json delete mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_new_run_0001.json delete mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_new_stream_0001.json delete mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_new_stream_0002.json delete mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_node_in_stream_0001.json delete mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_node_in_stream_0002.json delete mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_node_in_stream_0003.json delete mode 100644 tiled_logs/run_f36e2aae-43bd-4db7-a8b6-b75af787e61b/on_streams_namespace_0001.json diff --git a/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_run_0001.json b/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_run_0001.json deleted file mode 100644 index 44abc9a..0000000 --- a/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_run_0001.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "event_name": "on_new_run", - "sequence": 1, - "timestamp": 1753468883.5598931, - "subscription_segments": [ - "/" - ], - "callback_data": { - "sequence": 185, - "timestamp": "2025-07-25T18:41:23.523160", - "key": "01561d2b-368c-42db-b619-43a3c1510a89", - "structure_family": "container", - "specs": [ - { - "name": "BlueskyRun", - "version": "3.0" - } - ], - "metadata": { - "start": { - "uid": "01561d2b-368c-42db-b619-43a3c1510a89", - "time": 1753468883.3793726, - "username": "egann", - "beamline_name": "SMI", - "facility": "NSLS-II", - "tstamp": 1752211775.3666577, - "beamline_attenuators": { - "att1_7_status": { - "material": "Sn_60um", - "thickness": "4x" - } - }, - "sample_name": "test_test", - "SAXS_setup": { - "sdd": 5000, - "beam_centre": [ - 746, - 1105 - ], - "bs": "rod", - "energy": 16100 - }, - "x0": 1499.8220000000001, - "beamline_beamsize": "3.5um", - "start_datetime": "2025-07-16T13:25:25.696186", - "proposal": { - "proposal_id": "317903", - "title": "Advancing Real-Time Characterization of Polymer Membrane Formation Using X-Ray Scattering", - "type": "General User", - "pi_name": "Gregory Su" - }, - "beamline_sample_environment": "in-air", - "versions": { - "ophyd": "1.10.5", - "bluesky": "1.8.2.dev1119+gfb1e9960", - "ophyd_async": "0.10.0a4" - }, - "alignment_LUT": { - "-2000": { - "x": -2000, - "y": 7105.626, - "z": 2000, - "th": 0.4 - }, - "0": { - "x": 0, - "y": 7092.411, - "z": 2000, - "th": 0.4 - }, - "2000": { - "x": 2000, - "y": 7075.913, - "z": 2000, - "th": 0.4 - } - }, - "project_name": "Blade_HOPI_4wt_70water", - "cycle": "2025-2", - "scan_id": 971295, - "th0": 1.180005, - "data_session": "pass-317903", - "plan_type": "generator", - "plan_name": "rel_scan", - "detectors": [ - "pil2M" - ], - "motors": [ - "stage_y" - ], - "num_points": 21, - "num_intervals": 20, - "plan_args": { - "detectors": [ - "SAXS_Detector(prefix='XF:12ID2-ES{Pilatus:Det-2M}', name='pil2M', read_attrs=['cam', 'cam.file_number', 'tiff', 'stats1', 'stats1.total'], configuration_attrs=['cam', 'cam.acquire_period', 'cam.acquire_time', 'cam.image_mode', 'cam.manufacturer', 'cam.model', 'cam.num_exposures', 'cam.num_images', 'cam.trigger_mode', 'tiff', 'stats1', 'stats1.bgd_width', 'stats1.centroid_threshold', 'stats1.compute_centroid', 'stats1.compute_histogram', 'stats1.compute_profiles', 'stats1.compute_statistics', 'stats1.hist_max', 'stats1.hist_min', 'stats1.hist_size', 'stats1.profile_cursor', 'stats1.profile_size', 'stats1.ts_num_points'])" - ], - "num": 21, - "args": [ - "EpicsMotor(prefix='XF:12IDC-OP:2{HEX:Stg-Ax:Y}Mtr', name='stage_y', parent='stage', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_readback', 'user_setpoint'])", - -0.5, - 0.5 - ], - "per_step": "None" - }, - "hints": { - "dimensions": [ - [ - [ - "stage_y" - ], - "primary" - ] - ] - }, - "plan_pattern": "inner_product", - "plan_pattern_module": "bluesky.plan_patterns", - "plan_pattern_args": { - "num": 21, - "args": [ - "EpicsMotor(prefix='XF:12IDC-OP:2{HEX:Stg-Ax:Y}Mtr', name='stage_y', parent='stage', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_readback', 'user_setpoint'])", - -0.5, - 0.5 - ] - } - } - }, - "data_sources": [], - "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" - } -} \ No newline at end of file diff --git a/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_stream_0001.json b/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_stream_0001.json deleted file mode 100644 index 5c97341..0000000 --- a/tiled_logs/run_01561d2b-368c-42db-b619-43a3c1510a89/on_new_stream_0001.json +++ /dev/null @@ -1,8941 +0,0 @@ -{ - "event_name": "on_new_stream", - "sequence": 1, - "timestamp": 1753468884.7427838, - "subscription_segments": [ - "01561d2b-368c-42db-b619-43a3c1510a89", - "streams" - ], - "callback_data": { - "sequence": 1, - "timestamp": "2025-07-25T18:41:24.384868", - "key": "baseline", - "structure_family": "composite", - "specs": [ - { - "name": "BlueskyEventStream", - "version": "3.0" - } - ], - "metadata": { - "configuration": { - "GV7": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att2_5": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "xbpm2": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att1_8": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att2_9": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "Pilatus900kw": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "energy": { - "data": { - "energy_bragg_user_offset": 1.423, - "energy_bragg_user_offset_dir": 0, - "energy_bragg_velocity": 5.0, - "energy_bragg_acceleration": 0.5, - "energy_bragg_motor_egu": "deg", - "energy_enableivu": true, - "energy_enabledcmgap": true, - "energy_target_harmonic": 21 - }, - "timestamps": { - "energy_bragg_user_offset": 1753452747.267282, - "energy_bragg_user_offset_dir": 1753452747.267282, - "energy_bragg_velocity": 1753452747.267282, - "energy_bragg_acceleration": 1753452747.267282, - "energy_bragg_motor_egu": 1753452747.267282, - "energy_enableivu": 1753452747.2856257, - "energy_enabledcmgap": 1753452747.2856383, - "energy_target_harmonic": 1753452747.28565 - }, - "data_keys": { - "energy_bragg_user_offset": { - "source": "PV:XF:12ID:m65.OFF", - "dtype": "number", - "shape": [], - "units": "deg", - "lower_ctrl_limit": -9007199254740991, - "upper_ctrl_limit": 9007199254740991, - "precision": 5, - "dtype_numpy": "" - }, - "hints": { - "dimensions": [ - [ - [ - "thorlabs_su_readback" - ], - "primary" - ] - ] - }, - "plan_pattern": "inner_product", - "plan_pattern_module": "bluesky.plan_patterns", - "plan_pattern_args": { - "num": 360, - "args": [ - "ThorlabsMotor(prefix='XF:12ID2-ES{DDSM100-Ax:X1}Mtr', name='thorlabs_su', settle_time=0.0, timeout=None, read_attrs=['readback', 'setpoint', 'done'], configuration_attrs=[], limits=None, egu='')", - 87, - 72 - ] - } - } - }, - "data_sources": [], - "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" - } -} \ No newline at end of file diff --git a/tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_stream_0001.json b/tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_stream_0001.json deleted file mode 100644 index 434b8d4..0000000 --- a/tiled_logs/run_4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6/on_new_stream_0001.json +++ /dev/null @@ -1,8941 +0,0 @@ -{ - "event_name": "on_new_stream", - "sequence": 1, - "timestamp": 1753469265.3057973, - "subscription_segments": [ - "4d2d79b9-6b57-4aa0-9ca3-c578d963f7e6", - "streams" - ], - "callback_data": { - "sequence": 1, - "timestamp": "2025-07-25T18:47:44.912434", - "key": "baseline", - "structure_family": "composite", - "specs": [ - { - "name": "BlueskyEventStream", - "version": "3.0" - } - ], - "metadata": { - "configuration": { - "GV7": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att2_5": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "xbpm2": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att1_8": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att2_9": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "Pilatus900kw": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "energy": { - "data": { - "energy_bragg_user_offset": 1.423, - "energy_bragg_user_offset_dir": 0, - "energy_bragg_velocity": 5.0, - "energy_bragg_acceleration": 0.5, - "energy_bragg_motor_egu": "deg", - "energy_enableivu": true, - "energy_enabledcmgap": true, - "energy_target_harmonic": 21 - }, - "timestamps": { - "energy_bragg_user_offset": 1753452747.267282, - "energy_bragg_user_offset_dir": 1753452747.267282, - "energy_bragg_velocity": 1753452747.267282, - "energy_bragg_acceleration": 1753452747.267282, - "energy_bragg_motor_egu": 1753452747.267282, - "energy_enableivu": 1753452747.2856257, - "energy_enabledcmgap": 1753452747.2856383, - "energy_target_harmonic": 1753452747.28565 - }, - "data_keys": { - "energy_bragg_user_offset": { - "source": "PV:XF:12ID:m65.OFF", - "dtype": "number", - "shape": [], - "units": "deg", - "lower_ctrl_limit": -9007199254740991, - "upper_ctrl_limit": 9007199254740991, - "precision": 5, - "dtype_numpy": "" - }, - "hints": { - "dimensions": [ - [ - [ - "thorlabs_su_readback" - ], - "primary" - ] - ] - }, - "plan_pattern": "inner_product", - "plan_pattern_module": "bluesky.plan_patterns", - "plan_pattern_args": { - "num": 360, - "args": [ - "ThorlabsMotor(prefix='XF:12ID2-ES{DDSM100-Ax:X1}Mtr', name='thorlabs_su', settle_time=0.0, timeout=None, read_attrs=['readback', 'setpoint', 'done'], configuration_attrs=[], limits=None, egu='')", - 87, - 72 - ] - } - } - }, - "data_sources": [], - "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" - } -} \ No newline at end of file diff --git a/tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_stream_0001.json b/tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_stream_0001.json deleted file mode 100644 index 16f6b9e..0000000 --- a/tiled_logs/run_9bc37976-7488-4818-849b-f3b3af542bd6/on_new_stream_0001.json +++ /dev/null @@ -1,8941 +0,0 @@ -{ - "event_name": "on_new_stream", - "sequence": 1, - "timestamp": 1753471271.7619412, - "subscription_segments": [ - "9bc37976-7488-4818-849b-f3b3af542bd6", - "streams" - ], - "callback_data": { - "sequence": 1, - "timestamp": "2025-07-25T19:21:11.417794", - "key": "baseline", - "structure_family": "composite", - "specs": [ - { - "name": "BlueskyEventStream", - "version": "3.0" - } - ], - "metadata": { - "configuration": { - "GV7": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att2_5": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "xbpm2": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att1_8": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att2_9": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "Pilatus900kw": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "energy": { - "data": { - "energy_bragg_user_offset": 1.423, - "energy_bragg_user_offset_dir": 0, - "energy_bragg_velocity": 5.0, - "energy_bragg_acceleration": 0.5, - "energy_bragg_motor_egu": "deg", - "energy_enableivu": true, - "energy_enabledcmgap": true, - "energy_target_harmonic": 21 - }, - "timestamps": { - "energy_bragg_user_offset": 1753452747.267282, - "energy_bragg_user_offset_dir": 1753452747.267282, - "energy_bragg_velocity": 1753452747.267282, - "energy_bragg_acceleration": 1753452747.267282, - "energy_bragg_motor_egu": 1753452747.267282, - "energy_enableivu": 1753452747.2856257, - "energy_enabledcmgap": 1753452747.2856383, - "energy_target_harmonic": 1753452747.28565 - }, - "data_keys": { - "energy_bragg_user_offset": { - "source": "PV:XF:12ID:m65.OFF", - "dtype": "number", - "shape": [], - "units": "deg", - "lower_ctrl_limit": -9007199254740991, - "upper_ctrl_limit": 9007199254740991, - "precision": 5, - "dtype_numpy": "" - }, - "hints": { - "dimensions": [ - [ - [ - "thorlabs_su_readback" - ], - "primary" - ] - ] - }, - "plan_pattern": "inner_product", - "plan_pattern_module": "bluesky.plan_patterns", - "plan_pattern_args": { - "num": 360, - "args": [ - "ThorlabsMotor(prefix='XF:12ID2-ES{DDSM100-Ax:X1}Mtr', name='thorlabs_su', settle_time=0.0, timeout=None, read_attrs=['readback', 'setpoint', 'done'], configuration_attrs=[], limits=None, egu='')", - 87, - 72 - ] - } - } - }, - "data_sources": [], - "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" - } -} \ No newline at end of file diff --git a/tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_stream_0001.json b/tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_stream_0001.json deleted file mode 100644 index 2b79dcf..0000000 --- a/tiled_logs/run_cd9508f2-d386-419c-9e05-322fb2110e9e/on_new_stream_0001.json +++ /dev/null @@ -1,8941 +0,0 @@ -{ - "event_name": "on_new_stream", - "sequence": 1, - "timestamp": 1753466126.9802625, - "subscription_segments": [ - "cd9508f2-d386-419c-9e05-322fb2110e9e", - "streams" - ], - "callback_data": { - "sequence": 1, - "timestamp": "2025-07-25T17:55:26.640498", - "key": "baseline", - "structure_family": "composite", - "specs": [ - { - "name": "BlueskyEventStream", - "version": "3.0" - } - ], - "metadata": { - "configuration": { - "GV7": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att2_5": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "xbpm2": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att1_8": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att2_9": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "Pilatus900kw": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "energy": { - "data": { - "energy_bragg_user_offset": 1.423, - "energy_bragg_user_offset_dir": 0, - "energy_bragg_velocity": 5.0, - "energy_bragg_acceleration": 0.5, - "energy_bragg_motor_egu": "deg", - "energy_enableivu": true, - "energy_enabledcmgap": true, - "energy_target_harmonic": 21 - }, - "timestamps": { - "energy_bragg_user_offset": 1753452747.267282, - "energy_bragg_user_offset_dir": 1753452747.267282, - "energy_bragg_velocity": 1753452747.267282, - "energy_bragg_acceleration": 1753452747.267282, - "energy_bragg_motor_egu": 1753452747.267282, - "energy_enableivu": 1753452747.2856257, - "energy_enabledcmgap": 1753452747.2856383, - "energy_target_harmonic": 1753452747.28565 - }, - "data_keys": { - "energy_bragg_user_offset": { - "source": "PV:XF:12ID:m65.OFF", - "dtype": "number", - "shape": [], - "units": "deg", - "lower_ctrl_limit": -9007199254740991, - "upper_ctrl_limit": 9007199254740991, - "precision": 5, - "dtype_numpy": "" - }, - "hints": { - "dimensions": [ - [ - [ - "thorlabs_su_readback" - ], - "primary" - ] - ] - }, - "plan_pattern": "inner_product", - "plan_pattern_module": "bluesky.plan_patterns", - "plan_pattern_args": { - "num": 360, - "args": [ - "ThorlabsMotor(prefix='XF:12ID2-ES{DDSM100-Ax:X1}Mtr', name='thorlabs_su', settle_time=0.0, timeout=None, read_attrs=['readback', 'setpoint', 'done'], configuration_attrs=[], limits=None, egu='')", - 87, - 72 - ] - } - } - }, - "data_sources": [], - "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" - } -} \ No newline at end of file diff --git a/tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_stream_0001.json b/tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_stream_0001.json deleted file mode 100644 index 27abc01..0000000 --- a/tiled_logs/run_f0223532-0d03-41a0-9545-1c4bcb56149f/on_new_stream_0001.json +++ /dev/null @@ -1,8941 +0,0 @@ -{ - "event_name": "on_new_stream", - "sequence": 1, - "timestamp": 1753468478.4005013, - "subscription_segments": [ - "f0223532-0d03-41a0-9545-1c4bcb56149f", - "streams" - ], - "callback_data": { - "sequence": 1, - "timestamp": "2025-07-25T18:34:38.080802", - "key": "baseline", - "structure_family": "composite", - "specs": [ - { - "name": "BlueskyEventStream", - "version": "3.0" - } - ], - "metadata": { - "configuration": { - "GV7": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att2_5": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "xbpm2": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att1_8": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "att2_9": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "Pilatus900kw": { - "data": {}, - "timestamps": {}, - "data_keys": {} - }, - "energy": { - "data": { - "energy_bragg_user_offset": 1.423, - "energy_bragg_user_offset_dir": 0, - "energy_bragg_velocity": 5.0, - "energy_bragg_acceleration": 0.5, - "energy_bragg_motor_egu": "deg", - "energy_enableivu": true, - "energy_enabledcmgap": true, - "energy_target_harmonic": 21 - }, - "timestamps": { - "energy_bragg_user_offset": 1753452747.267282, - "energy_bragg_user_offset_dir": 1753452747.267282, - "energy_bragg_velocity": 1753452747.267282, - "energy_bragg_acceleration": 1753452747.267282, - "energy_bragg_motor_egu": 1753452747.267282, - "energy_enableivu": 1753452747.2856257, - "energy_enabledcmgap": 1753452747.2856383, - "energy_target_harmonic": 1753452747.28565 - }, - "data_keys": { - "energy_bragg_user_offset": { - "source": "PV:XF:12ID:m65.OFF", - "dtype": "number", - "shape": [], - "units": "deg", - "lower_ctrl_limit": -9007199254740991, - "upper_ctrl_limit": 9007199254740991, - "precision": 5, - "dtype_numpy": " Date: Sat, 26 Jul 2025 07:21:22 -0700 Subject: [PATCH 11/14] improve logging --- src/arroyosas/tiled/tiled_websocket.py | 12 +- .../on_new_run_0001.json | 130 ++++++ .../on_new_stream_0001.json | 369 +++++++++++++++++ .../on_node_in_stream_0001.json | 95 +++++ .../on_node_in_stream_0002.json | 55 +++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 ++++++ .../on_new_stream_0001.json | 369 +++++++++++++++++ .../on_node_in_stream_0001.json | 95 +++++ .../on_node_in_stream_0002.json | 55 +++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_stream_0001.json | 357 ++++++++++++++++ .../on_node_in_stream_0001.json | 95 +++++ .../on_node_in_stream_0002.json | 55 +++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 114 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_stream_0001.json | 369 +++++++++++++++++ .../on_node_in_stream_0001.json | 95 +++++ .../on_node_in_stream_0002.json | 55 +++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_stream_0001.json | 357 ++++++++++++++++ .../on_node_in_stream_0001.json | 95 +++++ .../on_node_in_stream_0002.json | 55 +++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_stream_0001.json | 369 +++++++++++++++++ .../on_node_in_stream_0001.json | 95 +++++ .../on_node_in_stream_0002.json | 55 +++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 116 ++++++ .../on_new_stream_0001.json | 382 ++++++++++++++++++ .../on_node_in_stream_0001.json | 95 +++++ .../on_node_in_stream_0002.json | 55 +++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_run_0001.json | 130 ++++++ .../on_new_stream_0001.json | 369 +++++++++++++++++ .../on_streams_namespace_0001.json | 18 + .../on_new_run_0001.json | 130 ++++++ 57 files changed, 7491 insertions(+), 6 deletions(-) create mode 100644 tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_new_run_0001.json create mode 100644 tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_new_stream_0001.json create mode 100644 tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_1969833c-03d6-4fda-bd4a-17e91eb909b5/on_new_run_0001.json create mode 100644 tiled_logs/run_1969833c-03d6-4fda-bd4a-17e91eb909b5/on_new_stream_0001.json create mode 100644 tiled_logs/run_1969833c-03d6-4fda-bd4a-17e91eb909b5/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_1969833c-03d6-4fda-bd4a-17e91eb909b5/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_1969833c-03d6-4fda-bd4a-17e91eb909b5/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_248e9ff3-622b-495d-a1b2-5f649ba370c4/on_new_run_0001.json create mode 100644 tiled_logs/run_39947a28-a0f6-47ca-9183-e83d23cd59a5/on_new_run_0001.json create mode 100644 tiled_logs/run_3aafa4e3-0def-49c2-9092-03ebfec522f1/on_new_run_0001.json create mode 100644 tiled_logs/run_3aafa4e3-0def-49c2-9092-03ebfec522f1/on_new_stream_0001.json create mode 100644 tiled_logs/run_3aafa4e3-0def-49c2-9092-03ebfec522f1/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_3aafa4e3-0def-49c2-9092-03ebfec522f1/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_3aafa4e3-0def-49c2-9092-03ebfec522f1/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_5bd1d190-abd2-4f73-a19d-09a9ad6a526e/on_new_run_0001.json create mode 100644 tiled_logs/run_6064d204-5168-47fd-9fbd-e30b05b4f458/on_new_run_0001.json create mode 100644 tiled_logs/run_64629c28-8624-4acf-a3fa-680de9f52a7e/on_new_run_0001.json create mode 100644 tiled_logs/run_6aff4bac-a60e-4e46-b5a5-953997be6e33/on_new_run_0001.json create mode 100644 tiled_logs/run_6ccfbb88-f1ab-46c7-91c7-efe76c010d5c/on_new_run_0001.json create mode 100644 tiled_logs/run_720ed30c-1948-4936-83c2-3093a820e747/on_new_run_0001.json create mode 100644 tiled_logs/run_72a39d65-ac88-49b4-8fdb-63eb5f6881c2/on_new_run_0001.json create mode 100644 tiled_logs/run_72a39d65-ac88-49b4-8fdb-63eb5f6881c2/on_new_stream_0001.json create mode 100644 tiled_logs/run_72a39d65-ac88-49b4-8fdb-63eb5f6881c2/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_72a39d65-ac88-49b4-8fdb-63eb5f6881c2/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_72a39d65-ac88-49b4-8fdb-63eb5f6881c2/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_86ee1566-7d79-4354-a2a9-bdee88761fd5/on_new_run_0001.json create mode 100644 tiled_logs/run_90edd9c4-cc93-4e6e-a91e-adedaf236c81/on_new_run_0001.json create mode 100644 tiled_logs/run_93d497fe-ae90-436e-bba6-e3111d75c59f/on_new_run_0001.json create mode 100644 tiled_logs/run_a29191f4-19bc-4d9a-a6d7-08653d458a87/on_new_run_0001.json create mode 100644 tiled_logs/run_a29191f4-19bc-4d9a-a6d7-08653d458a87/on_new_stream_0001.json create mode 100644 tiled_logs/run_a29191f4-19bc-4d9a-a6d7-08653d458a87/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_a29191f4-19bc-4d9a-a6d7-08653d458a87/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_a29191f4-19bc-4d9a-a6d7-08653d458a87/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_a4b58d84-ab43-40ba-a3a2-a1283d00ba8b/on_new_run_0001.json create mode 100644 tiled_logs/run_ae0cff6b-e470-4c12-bbeb-b37039a0562c/on_new_run_0001.json create mode 100644 tiled_logs/run_afef88b7-7431-4c81-833d-7d2d4ae6fd8a/on_new_run_0001.json create mode 100644 tiled_logs/run_c701fc3e-b8a0-4dd5-a576-15367cfaf8e5/on_new_run_0001.json create mode 100644 tiled_logs/run_cf58e2a0-919b-4006-879d-5e467d0c3991/on_new_run_0001.json create mode 100644 tiled_logs/run_cf58e2a0-919b-4006-879d-5e467d0c3991/on_new_stream_0001.json create mode 100644 tiled_logs/run_cf58e2a0-919b-4006-879d-5e467d0c3991/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_cf58e2a0-919b-4006-879d-5e467d0c3991/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_cf58e2a0-919b-4006-879d-5e467d0c3991/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_df88c887-0244-49f4-a3d4-8995e512bb28/on_new_run_0001.json create mode 100644 tiled_logs/run_df88c887-0244-49f4-a3d4-8995e512bb28/on_new_stream_0001.json create mode 100644 tiled_logs/run_df88c887-0244-49f4-a3d4-8995e512bb28/on_node_in_stream_0001.json create mode 100644 tiled_logs/run_df88c887-0244-49f4-a3d4-8995e512bb28/on_node_in_stream_0002.json create mode 100644 tiled_logs/run_df88c887-0244-49f4-a3d4-8995e512bb28/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_e17b064a-d6e2-4e9b-84a0-cbe9eba498d1/on_new_run_0001.json create mode 100644 tiled_logs/run_e2e708bd-fedc-483e-a40d-4f0e59cbae30/on_new_run_0001.json create mode 100644 tiled_logs/run_f673790b-5f4e-4dc8-b681-e022cf9c72bf/on_new_run_0001.json create mode 100644 tiled_logs/run_f673790b-5f4e-4dc8-b681-e022cf9c72bf/on_new_stream_0001.json create mode 100644 tiled_logs/run_f673790b-5f4e-4dc8-b681-e022cf9c72bf/on_streams_namespace_0001.json create mode 100644 tiled_logs/run_f94d97b8-d22f-476b-8a1d-3c989dd26534/on_new_run_0001.json diff --git a/src/arroyosas/tiled/tiled_websocket.py b/src/arroyosas/tiled/tiled_websocket.py index 72ec192..cfd62e6 100644 --- a/src/arroyosas/tiled/tiled_websocket.py +++ b/src/arroyosas/tiled/tiled_websocket.py @@ -286,18 +286,18 @@ def from_settings(cls, settings: Any, op: Operator) -> "TiledClientListener": """Create a TiledClientListener from settings.""" client = from_uri( settings.uri, - api_key="01992146236c6ec3e6a6571421690b89986641d3a12ffd3aacad9edda69d5ff3557b47b9", + api_key=settings.api_key, ) # Create log directory if specified in settings log_dir = getattr(settings, "log_dir", "tiled_logs") - return cls( op, - client, - settings.stream_name, - settings.data_source, - log_dir, + tiled_client=client, + stream_name=settings.stream_name, + target=settings.target, + create_run_logs=getattr(settings, "create_run_logs", False), + log_dir=log_dir, ) diff --git a/tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_new_run_0001.json b/tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_new_run_0001.json new file mode 100644 index 0000000..b9ae074 --- /dev/null +++ b/tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_new_run_0001.json @@ -0,0 +1,130 @@ +{ + "event_name": "on_new_run", + "sequence": 1, + "timestamp": 1753492065.6542416, + "subscription_segments": [ + "/" + ], + "callback_data": { + "sequence": 285, + "timestamp": "2025-07-26T01:07:45.616488", + "key": "0d7125fa-96e5-48ac-bb47-6c578c9a3177", + "structure_family": "container", + "specs": [ + { + "name": "BlueskyRun", + "version": "3.0" + } + ], + "metadata": { + "start": { + "uid": "0d7125fa-96e5-48ac-bb47-6c578c9a3177", + "time": 1753492065.4753332, + "username": "egann", + "beamline_name": "SMI", + "facility": "NSLS-II", + "tstamp": 1752211775.3666577, + "beamline_attenuators": { + "att1_7_status": { + "material": "Sn_60um", + "thickness": "4x" + } + }, + "sample_name": "test_test_16.10keV_wa16.0_sdd5.0m", + "SAXS_setup": { + "sdd": 5000, + "beam_centre": [ + 746, + 1105 + ], + "bs": "rod", + "energy": 16100 + }, + "x0": 1499.8220000000001, + "beamline_beamsize": "3.5um", + "start_datetime": "2025-07-16T13:25:25.696186", + "proposal": { + "proposal_id": "317903", + "title": "Advancing Real-Time Characterization of Polymer Membrane Formation Using X-Ray Scattering", + "type": "General User", + "pi_name": "Gregory Su" + }, + "beamline_sample_environment": "in-air", + "versions": { + "ophyd": "1.10.5", + "bluesky": "1.8.2.dev1119+gfb1e9960", + "ophyd_async": "0.10.0a4" + }, + "alignment_LUT": { + "-2000": { + "x": -2000, + "y": 7105.626, + "z": 2000, + "th": 0.4 + }, + "0": { + "x": 0, + "y": 7092.411, + "z": 2000, + "th": 0.4 + }, + "2000": { + "x": 2000, + "y": 7075.913, + "z": 2000, + "th": 0.4 + } + }, + "project_name": "solvent_blanks", + "cycle": "2025-2", + "scan_id": 971395, + "th0": 1.180005, + "data_session": "pass-317903", + "plan_type": "generator", + "plan_name": "rel_scan", + "detectors": [ + "pil2M" + ], + "motors": [ + "piezo_y" + ], + "num_points": 21, + "num_intervals": 20, + "plan_args": { + "detectors": [ + "SAXS_Detector(prefix='XF:12ID2-ES{Pilatus:Det-2M}', name='pil2M', read_attrs=['cam', 'cam.file_number', 'tiff', 'stats1', 'stats1.total'], configuration_attrs=['cam', 'cam.acquire_period', 'cam.acquire_time', 'cam.image_mode', 'cam.manufacturer', 'cam.model', 'cam.num_exposures', 'cam.num_images', 'cam.trigger_mode', 'tiff', 'stats1', 'stats1.bgd_width', 'stats1.centroid_threshold', 'stats1.compute_centroid', 'stats1.compute_histogram', 'stats1.compute_profiles', 'stats1.compute_statistics', 'stats1.hist_max', 'stats1.hist_min', 'stats1.hist_size', 'stats1.profile_cursor', 'stats1.profile_size', 'stats1.ts_num_points'])" + ], + "num": 21, + "args": [ + "EpicsMotor(prefix='XF:12IDC-ES:2{MCS:1-Ax:3}Mtr', name='piezo_y', parent='piezo', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_readback', 'user_setpoint'])", + -2000, + 2000 + ], + "per_step": "None" + }, + "hints": { + "dimensions": [ + [ + [ + "piezo_y" + ], + "primary" + ] + ] + }, + "plan_pattern": "inner_product", + "plan_pattern_module": "bluesky.plan_patterns", + "plan_pattern_args": { + "num": 21, + "args": [ + "EpicsMotor(prefix='XF:12IDC-ES:2{MCS:1-Ax:3}Mtr', name='piezo_y', parent='piezo', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_readback', 'user_setpoint'])", + -2000, + 2000 + ] + } + } + }, + "data_sources": [], + "uri": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" + } +} \ No newline at end of file diff --git a/tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_new_stream_0001.json b/tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_new_stream_0001.json new file mode 100644 index 0000000..7d8a2fb --- /dev/null +++ b/tiled_logs/run_0d7125fa-96e5-48ac-bb47-6c578c9a3177/on_new_stream_0001.json @@ -0,0 +1,369 @@ +{ + "event_name": "on_new_stream", + "sequence": 1, + "timestamp": 1753492088.4022586, + "subscription_segments": [ + "0d7125fa-96e5-48ac-bb47-6c578c9a3177", + "streams" + ], + "callback_data": { + "sequence": 2, + "timestamp": "2025-07-26T01:08:08.362981", + "key": "primary", + "structure_family": "composite", + "specs": [ + { + "name": "BlueskyEventStream", + "version": "3.0" + } + ], + "metadata": { + "configuration": { + "pil2M": { + "data": { + "pil2M_cam_acquire_period": 0.501, + "pil2M_cam_acquire_time": 0.5, + "pil2M_cam_image_mode": 1, + "pil2M_cam_manufacturer": "Dectris", + "pil2M_cam_model": "Pilatus", + "pil2M_cam_num_exposures": 1, + "pil2M_cam_num_images": 1, + "pil2M_cam_trigger_mode": 0, + "pil2M_stats1_bgd_width": 1, + "pil2M_stats1_centroid_threshold": 1.0, + "pil2M_stats1_compute_centroid": "No", + "pil2M_stats1_compute_histogram": "No", + "pil2M_stats1_compute_profiles": "No", + "pil2M_stats1_compute_statistics": "Yes", + "pil2M_stats1_hist_max": 255.0, + "pil2M_stats1_hist_min": 0.0, + "pil2M_stats1_hist_size": 256, + "pil2M_stats1_ts_num_points": 2048 + }, + "timestamps": { + "pil2M_cam_acquire_period": 1753389986.881245, + "pil2M_cam_acquire_time": 1753389986.872906, + "pil2M_cam_image_mode": 1746550981.403281, + "pil2M_cam_manufacturer": 1746550977.988163, + "pil2M_cam_model": 1746550977.988235, + "pil2M_cam_num_exposures": 1746550977.98888, + "pil2M_cam_num_images": 1753380750.712442, + "pil2M_cam_trigger_mode": 1746550977.988523, + "pil2M_stats1_bgd_width": 1746550977.988214, + "pil2M_stats1_centroid_threshold": 1746550977.987016, + "pil2M_stats1_compute_centroid": 1746550977.987631, + "pil2M_stats1_compute_histogram": 1746550977.987861, + "pil2M_stats1_compute_profiles": 1746550977.987757, + "pil2M_stats1_compute_statistics": 1746550977.987549, + "pil2M_stats1_hist_max": 1746550977.987272, + "pil2M_stats1_hist_min": 1746550977.987138, + "pil2M_stats1_hist_size": 1746550977.988419, + "pil2M_stats1_ts_num_points": 1746550977.949789 + }, + "data_keys": { + "pil2M_cam_acquire_period": { + "source": "PV:XF:12ID2-ES{Pilatus:Det-2M}cam1:AcquirePeriod_RBV", + "dtype": "number", + "shape": [], + "units": "", + "lower_ctrl_limit": 0.0, + "upper_ctrl_limit": 0.0, + "precision": 3, + "dtype_numpy": " Date: Sat, 26 Jul 2025 06:57:22 -0700 Subject: [PATCH 12/14] Add slicing information to the message (#15) * fix image open * read image from tiled and send real tiled url * Send slicing information --------- Co-authored-by: Xiaoya Chong <150726549+xiaoyachong@users.noreply.github.com> --- src/arroyosas/app/real_image_sim_cli.py | 170 +++++++++++++++++------- 1 file changed, 123 insertions(+), 47 deletions(-) diff --git a/src/arroyosas/app/real_image_sim_cli.py b/src/arroyosas/app/real_image_sim_cli.py index 17e9544..f1af498 100644 --- a/src/arroyosas/app/real_image_sim_cli.py +++ b/src/arroyosas/app/real_image_sim_cli.py @@ -1,14 +1,12 @@ import asyncio import os +import logging from datetime import datetime -from glob import glob - -# from arroyopy.schemas import NumpyArrayModel -import msgpack import typer import zmq import zmq.asyncio -from PIL import Image +import msgpack +from tiled.client import from_uri from ..config import settings from ..schemas import ( @@ -19,68 +17,146 @@ ) """ -Simulates however we are going to get images and sends them -onto ZMQ, taking care of pydantic messages, serialization and msgpack +Simulates image retrieval from Tiled and sends them onto ZMQ, +taking care of pydantic messages, serialization and msgpack """ -FRAME_WIDTH = 1475 -FRAME_HEIGHT = 619 -DATA_TYPE = "float32" +# Default Tiled configuration - use the exact URI format from data_simulator.py +DATA_TILED_URI = ( + "https://tiled-demo.blueskyproject.io/api/v1/metadata/rsoxs/raw/" + "468810ed-2ff9-4e92-8ca9-dcb376d01a56/primary/data/Small Angle CCD Detector_image" +) +TILED_API_KEY = os.getenv("DATA_TILED_KEY") +if TILED_API_KEY == "": + TILED_API_KEY = None + +# Frame configuration +FRAME_WIDTH = 1024 +FRAME_HEIGHT = 1026 +DATA_TYPE = "uint32" + +# Setup logging +logger = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO) app = typer.Typer() -async def process_images( - socket: zmq.asyncio.Socket, cycles: int, frames: int, pause: float +def get_num_frames(tiled_uri, tiled_api_key=None): + """Get the number of available frames from Tiled, following data_simulator.py pattern""" + client = from_uri(tiled_uri, api_key=tiled_api_key) + return client.shape[0] if hasattr(client, 'shape') and len(client.shape) > 0 else 0 + + +async def process_images_from_tiled( + socket: zmq.asyncio.Socket, + cycles: int, + frames: int, + pause: float, + tiled_uri: str, + tiled_api_key: str = None ): - for cycle_num in range(cycles): - # Get current time formatted as YYYY-MM-DD HH:MM:SS - current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - start = SASStart( - width=FRAME_WIDTH, - height=FRAME_HEIGHT, - data_type=DATA_TYPE, - tiled_url="http://tiled:8000", - run_name="test_run", - run_id=str(current_time), - ) - print("start") - await socket.send(msgpack.packb(start.model_dump())) - files = glob("/data/test_data/blade/*.tif") - frame_num = 0 - for file in files: - with os.read(file) as filebytes: - image = Image.frombytes(filebytes) - event = RawFrameEvent( - image=SerializableNumpyArrayModel(array=image), - frame_number=frame_num, - tiled_url="tb://frame_url", + """ + Process images from Tiled and send them via ZMQ + """ + try: + # Connect to Tiled server using the exact URI format + logger.info(f"Connecting to Tiled server at {tiled_uri}") + client = from_uri(tiled_uri, api_key=tiled_api_key) + + # Get total number of available frames + total_frames = get_num_frames(tiled_uri, tiled_api_key) + logger.info(f"Total frames available in Tiled: {total_frames}") + + for cycle_num in range(cycles): + # Get current time formatted as YYYY-MM-DD HH:MM:SS + current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + # Send SAS Start event + start = SASStart( + width=FRAME_WIDTH, + height=FRAME_HEIGHT, + data_type=DATA_TYPE, + tiled_url=tiled_uri, + run_name=f"tiled_run_{cycle_num}", + run_id=str(current_time), ) - print("event") - await socket.send(msgpack.packb(event.model_dump())) - stop = SASStop(num_frames=frames) - print("stop") - await socket.send(msgpack.packb(stop.model_dump())) - await asyncio.sleep(pause) - print(f"Cycle {cycle_num} complete sent {frames} frames") + logger.info(f"Sending start event for cycle {cycle_num}") + await socket.send(msgpack.packb(start.model_dump())) + + # Determine number of frames to process in this cycle + frame_count = min(frames, total_frames) + if frame_count == 0: + logger.warning("No frames available in Tiled") + continue + + # Process frames + for frame_num in range(frame_count): + try: + # Get frame data directly from Tiled client + # This is the correct way to read data from a Tiled array client + # The read() method returns a numpy array with the image data + image_array = client[frame_num] + + # Create and send the frame event with the Tiled URI + event = RawFrameEvent( + image=SerializableNumpyArrayModel(array=image_array), + frame_number=frame_num, + tiled_url=f"{tiled_uri}?slice={frame_num}", + ) + logger.info(f"Sending frame {frame_num} for cycle {cycle_num}") + await socket.send(msgpack.packb(event.model_dump())) + + except Exception as e: + logger.error(f"Error processing frame {frame_num}: {e}") + + # Send stop event + stop = SASStop(num_frames=frame_count) + logger.info(f"Sending stop event for cycle {cycle_num}") + await socket.send(msgpack.packb(stop.model_dump())) + + await asyncio.sleep(pause) + logger.info(f"Cycle {cycle_num} complete - sent {frame_count} frames") - print("All cycles complete") - return + logger.info("All cycles complete") + + except Exception as e: + logger.error(f"Error in processing images: {e}") @app.command() -def main(cycles: int = 10000, frames: int = 50, pause: float = 5): +def main( + cycles: int = 10000, + frames: int = 50, + pause: float = 5, + tiled_uri: str = None, + api_key: str = None +): + """ + Run the image simulator that reads frames from Tiled and publishes them via ZMQ. + + Args: + cycles: Number of cycles to run + frames: Maximum number of frames per cycle + pause: Pause time between cycles in seconds + tiled_uri: URI of the Tiled server (defaults to the predefined DATA_TILED_URI) + api_key: API key for Tiled authentication (defaults to env var DATA_TILED_KEY) + """ + # Use provided values or fall back to defaults + tiled_uri = tiled_uri or DATA_TILED_URI + api_key = api_key or TILED_API_KEY + async def run(): context = zmq.asyncio.Context() socket = context.socket(zmq.PUB) address = settings.tiled_poller.publish_address - print(f"Connecting to {address}") + logger.info(f"Binding to ZMQ address: {address}") socket.bind(address) - await process_images(socket, cycles, frames, pause) + await process_images_from_tiled(socket, cycles, frames, pause, tiled_uri, api_key) return asyncio.run(run()) if __name__ == "__main__": - app() + app() \ No newline at end of file From 4b54fb9527cb32fe5f779fb9e9c5a30a5ece46c0 Mon Sep 17 00:00:00 2001 From: xiaoyachong <150726549+xiaoyachong@users.noreply.github.com> Date: Fri, 12 Sep 2025 16:50:54 -0700 Subject: [PATCH 13/14] add smi replay simulator (#19) * add smi replay simulator * update threading in replay simulator --- pyproject.toml | 1 + src/arroyosas/app/db_replay_sim_cli.py | 305 +++++++++++++++++++++++++ 2 files changed, 306 insertions(+) create mode 100644 src/arroyosas/app/db_replay_sim_cli.py diff --git a/pyproject.toml b/pyproject.toml index 925efb3..798d711 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -75,6 +75,7 @@ all = [ "pandas", "python-dotenv", "pyarrow>=14.0.1", + "aiosqlite", ] diff --git a/src/arroyosas/app/db_replay_sim_cli.py b/src/arroyosas/app/db_replay_sim_cli.py new file mode 100644 index 0000000..bcf54c5 --- /dev/null +++ b/src/arroyosas/app/db_replay_sim_cli.py @@ -0,0 +1,305 @@ +import asyncio +import logging +import os +import aiosqlite +from datetime import datetime + +import typer +import zmq +import zmq.asyncio +import msgpack +from tiled.client import from_uri + +from ..config import settings +from ..schemas import ( + RawFrameEvent, + SASStart, + SASStop, + SerializableNumpyArrayModel, +) + +""" +Simulates image retrieval by reading Tiled URLs from a local SQLite database +and sends the fetched images onto ZMQ. +""" + +# Get configuration from environment variables with defaults +DEFAULT_DB_PATH = os.getenv("DB_PATH", "latent_vectors.db") +DEFAULT_API_KEY = os.getenv("TILED_API_KEY", None) +# New environment variable for selecting prod vs dev environment +TILED_ENV = os.getenv("TILED_ENV", "dev").lower() + +# Define environment-specific URLs +TILED_URLS = { + "dev": { + "url_pattern": "http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/" + }, + "prod": { + "url_pattern": "http://tiled.nsls2.bnl.gov/api/v1/array/full/" + } +} + +# Setup logging +logger = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO) + +app = typer.Typer() + + +async def get_urls_from_db(db_path, limit=None): + """Get a list of Tiled URLs from the database asynchronously""" + try: + async with aiosqlite.connect(db_path) as conn: + query = "SELECT id, tiled_url FROM vectors ORDER BY id" + if limit: + query += f" LIMIT {limit}" + + async with conn.execute(query) as cursor: + results = await cursor.fetchall() + + if not results: + logger.warning(f"No Tiled URLs found in database {db_path}") + return [] + + logger.info(f"Found {len(results)} Tiled URLs in database") + return results + except Exception as e: + logger.error(f"Error reading from database: {e}") + return [] + + +def transform_url_for_env(tiled_url, env): + """ + Transform a Tiled URL to match the specified environment format. + + Args: + tiled_url: The original Tiled URL (typically from dev environment) + env: The target environment ('dev' or 'prod') + + Returns: + str: Transformed URL for the target environment + """ + if env not in TILED_URLS: + logger.warning(f"Unknown environment '{env}', falling back to 'dev'") + env = "dev" + + # If we're staying in dev, no transformation needed + if env == "dev" and "tiled-dev.nsls2.bnl.gov" in tiled_url: + return tiled_url + + # Extract slice parameter if present + slice_param = None + if '?' in tiled_url: + slice_param = tiled_url.split('?')[1] + + # Parse the URL to extract UUID and stream path + url_without_query = tiled_url.split('?')[0] # Remove query parameters + + # Extract UUID and stream path + uuid = None + stream_path = None + + if 'array/full/' in url_without_query: + path_after_full = url_without_query.split('array/full/')[1] + parts = path_after_full.split('/') + if len(parts) >= 1: + uuid = parts[0] + if len(parts) > 1: + stream_path = '/'.join(parts[1:]) + + if not uuid or not stream_path: + logger.error(f"Could not parse Tiled URL: {tiled_url}") + return tiled_url # Return original if parsing fails + + # Transform URL based on environment + if env == "prod": + # Get image name from stream_path + parts = stream_path.split('/') + if len(parts) > 0: + image_name = parts[-1] + # Format: http://tiled.nsls2.bnl.gov/api/v1/array/full/smi/raw/{uuid}/primary/data/{image_name}?slice=... + new_url = f"{TILED_URLS[env]['url_pattern']}smi/raw/{uuid}/primary/data/{image_name}" + else: + # Fallback if we can't extract image name + logger.error(f"Could not extract image name from stream path: {stream_path}") + return tiled_url + else: + # Dev URL format: http://tiled-dev.nsls2.bnl.gov/api/v1/array/full/{uuid}/{stream_path}?slice=... + new_url = f"{TILED_URLS[env]['url_pattern']}{uuid}/{stream_path}" + + # Add slice parameter if it exists + if slice_param: + new_url = f"{new_url}?{slice_param}" + + logger.debug(f"Transformed URL: {tiled_url} -> {new_url}") + return new_url + + +def _read_image_from_tiled_url_sync(tiled_url, api_key=None): + """ + Read an image from a Tiled URL. + + Args: + tiled_url: The Tiled URL (already transformed for the appropriate environment) + api_key: API key for Tiled authentication + + Returns: + tuple: (image_data, index) + """ + try: + # Extract index from slice parameter + index = 0 # Default index + if '?' in tiled_url and 'slice=' in tiled_url: + slice_param = tiled_url.split('slice=')[1].split('&')[0] + if ':' in slice_param: + parts = slice_param.split(',')[0].split(':') + if parts[0].isdigit(): + index = int(parts[0]) + + # Parse the URL to extract base URL and path + url_without_query = tiled_url.split('?')[0] # Remove query parameters + url_parts = url_without_query.split('/api/v1/') + + if len(url_parts) != 2: + logger.error(f"Invalid Tiled URL format: {tiled_url}") + return None, 0 + + # Change array/full to metadata + base_uri = f"{url_parts[0]}/api/v1/metadata" + + # Extract dataset URI - get everything after "array/full/" + full_path = url_parts[1] + + if 'array/full/' in url_without_query: + # If the URL contains array/full, extract the part after it + path_parts = full_path.split('array/full/') + if len(path_parts) > 1: + dataset_uri = path_parts[1] + else: + dataset_uri = full_path + else: + # If URL doesn't contain array/full, use the whole path + dataset_uri = full_path + + logger.debug(f"Base URI: {base_uri}, Dataset URI: {dataset_uri}, Index: {index}") + + # Connect to the Tiled server + client = from_uri(base_uri, api_key=api_key) + + # Access the dataset + tiled_data = client[dataset_uri] + logger.debug(f"Dataset shape: {tiled_data.shape}, dtype: {tiled_data.dtype}") + + # Retrieve the image at the specified index + image = tiled_data[index] + + return image, index + + except Exception as e: + logger.error(f"Error reading from Tiled URL {tiled_url}: {e}") + return None, 0 + + +async def read_image_from_tiled_url(tiled_url, api_key=None): + """Async wrapper for _read_image_from_tiled_url_sync""" + return await asyncio.to_thread(_read_image_from_tiled_url_sync, tiled_url, api_key) + + +@app.command() +def main( + db_path: str = typer.Option(DEFAULT_DB_PATH, help="Path to the SQLite database containing Tiled URLs"), + max_frames: int = typer.Option(10000, help="Maximum number of frames to process"), + api_key: str = typer.Option(DEFAULT_API_KEY, help="API key for Tiled authentication"), + env: str = typer.Option(TILED_ENV, help="Tiled environment to use ('dev' or 'prod')") +): + """ + Run the image simulator that reads Tiled URLs from a database, fetches the images, and publishes them via ZMQ. + + Configuration can be set via environment variables: + - DB_PATH: Path to the SQLite database + - TILED_API_KEY: API key for Tiled authentication + - TILED_ENV: Environment to use ('dev' or 'prod') + + Command-line arguments override environment variables. + """ + # Log the configuration + logger.info(f"Starting DB Image Simulator with:") + logger.info(f"- Database path: {db_path}") + logger.info(f"- Max frames: {max_frames}") + logger.info(f"- API key provided: {api_key is not None}") + logger.info(f"- Tiled environment: {env}") + + async def run(): + # Check if database exists + if not os.path.exists(db_path): + logger.error(f"Database file not found: {db_path}") + return + + # Setup ZMQ socket + context = zmq.asyncio.Context() + socket = context.socket(zmq.PUB) + address = settings.tiled_poller.zmq_frame_publisher.address + logger.info(f"Binding to ZMQ address: {address}") + socket.bind(address) + + # Get URLs from database + urls = await get_urls_from_db(db_path, limit=max_frames) + if not urls: + logger.error("No URLs found in database, cannot continue") + return + + # Send start event + current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + start = SASStart( + width=1679, # Default values - these will be updated from real data + height=1475, + data_type="uint32", + tiled_url=f"{env}://latent_vectors", + run_name=f"{env}_tiled_run", + run_id=str(current_time), + ) + logger.info(f"Sending start event") + await socket.send(msgpack.packb(start.model_dump())) + + # Process each URL + for db_id, tiled_url in urls: + try: + logger.info(f"Processing URL from DB record {db_id}: {tiled_url}") + + # Transform the URL for the current environment before processing + transformed_url = transform_url_for_env(tiled_url, env) + logger.info(f"Transformed URL: {transformed_url}") + + # Read image data from transformed Tiled URL + image_data, index = await read_image_from_tiled_url(transformed_url, api_key) + + if image_data is None: + logger.error(f"Failed to read image from {transformed_url}") + continue + + # Send the frame event with transformed URL + event = RawFrameEvent( + image=SerializableNumpyArrayModel(array=image_data), + frame_number=index, + tiled_url=transformed_url, + ) + logger.info(f"Sending frame {index}") + await socket.send(msgpack.packb(event.model_dump())) + + # Small delay between frames + await asyncio.sleep(0.1) + + except Exception as e: + logger.error(f"Error processing frame from {tiled_url}: {e}") + + # Send stop event + stop = SASStop(num_frames=len(urls)) + logger.info(f"Sending stop event") + await socket.send(msgpack.packb(stop.model_dump())) + logger.info(f"Complete - sent {len(urls)} frames") + + asyncio.run(run()) + + +if __name__ == "__main__": + app() \ No newline at end of file From c1498d7dafa266c88dd6c9aef086ee1cf24b776b Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Mon, 15 Sep 2025 11:53:56 -0700 Subject: [PATCH 14/14] checkpoint --- .vscode/launch.json | 6 + Dockerfile | 7 - Dockerfile.dev | 19 -- Dockerfile_frontend_dev | 9 + frontend/.vscode/launch.json | 17 ++ frontend/package-lock.json | 3 +- frontend/package.json | 2 +- frontend/src/components/Header.jsx | 2 +- frontend/src/utils/connectionHelper.js | 2 +- pyproject.toml | 42 +-- settings_container.yaml | 17 -- settings_dev.yaml | 23 ++ src/arroyosas/app/viz_operator_cli.py | 10 +- src/arroyosas/one_d_reduction/operator.py | 8 +- src/arroyosas/tiled/publisher.py | 307 ++++++++++++++++++++++ 15 files changed, 382 insertions(+), 92 deletions(-) delete mode 100644 Dockerfile.dev create mode 100644 Dockerfile_frontend_dev create mode 100644 frontend/.vscode/launch.json delete mode 100644 settings_container.yaml create mode 100644 settings_dev.yaml create mode 100644 src/arroyosas/tiled/publisher.py diff --git a/.vscode/launch.json b/.vscode/launch.json index d22966d..3aad8d6 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -31,6 +31,12 @@ "request": "launch", "module": "arroyosas.app.lse_operator_cli" }, + { + "name": "viz_operator_cli", + "type": "debugpy", + "request": "launch", + "module": "arroyosas.app.viz_operator_cli" + }, { "name": "frame_listener_sim", "type": "debugpy", diff --git a/Dockerfile b/Dockerfile index 0b47450..479a0c3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,13 +6,6 @@ RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* WORKDIR /app -# Clone and install the custom Tiled branch with WebSocket support -RUN git clone https://github.com/vshekar/tiled.git /tmp/tiled && \ - cd /tmp/tiled && \ - git checkout websocket-endpoint && \ - pip install --upgrade pip && \ - TILED_BUILD_SKIP_UI=1 pip install '.[all]' && \ - rm -rf /tmp/tiled COPY . /app diff --git a/Dockerfile.dev b/Dockerfile.dev deleted file mode 100644 index ab7a6e7..0000000 --- a/Dockerfile.dev +++ /dev/null @@ -1,19 +0,0 @@ -FROM python:3.11 - -WORKDIR /app - -COPY . /app - - -RUN apt-get update \ - && apt-get install -y --no-install-recommends git \ - && rm -rf /var/lib/apt/lists/* \ - && pip install debugpy - -RUN pip install --upgrade pip && \ - pip install -e .[all] - -RUN pip install debugpy - - -CMD ["echo", "Hello World"] diff --git a/Dockerfile_frontend_dev b/Dockerfile_frontend_dev new file mode 100644 index 0000000..5372625 --- /dev/null +++ b/Dockerfile_frontend_dev @@ -0,0 +1,9 @@ +FROM node:18 + +WORKDIR /frontend +COPY ./frontend/package*.json /frontend/ +RUN npm ci +COPY ./frontend /frontend/ +COPY .env_frontend /frontend/.env + + diff --git a/frontend/.vscode/launch.json b/frontend/.vscode/launch.json new file mode 100644 index 0000000..822e5d1 --- /dev/null +++ b/frontend/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "skipFiles": [ + "/**" + ], + "program": "${file}" + } + ] +} \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index af78595..52f05cc 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -20,7 +20,7 @@ "react-dom": "^18.3.1", "react-plotly.js": "^2.5.1", "react-router": "^7.1.5", - "react-scripts": "5.0.1", + "react-scripts": "^5.0.1", "react-tooltip": "^5.28.0", "web-vitals": "^2.1.4" }, @@ -17754,6 +17754,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "license": "MIT", "dependencies": { "@babel/core": "^7.16.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", diff --git a/frontend/package.json b/frontend/package.json index 80d3356..13dbe74 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,7 +15,7 @@ "react-dom": "^18.3.1", "react-plotly.js": "^2.5.1", "react-router": "^7.1.5", - "react-scripts": "5.0.1", + "react-scripts": "^5.0.1", "react-tooltip": "^5.28.0", "web-vitals": "^2.1.4" }, diff --git a/frontend/src/components/Header.jsx b/frontend/src/components/Header.jsx index a3f6173..3bc6cee 100644 --- a/frontend/src/components/Header.jsx +++ b/frontend/src/components/Header.jsx @@ -18,7 +18,7 @@ export default function Header({isExperimentRunning=false, showStatus=false, sta

Build:{buildNumber}

-

GISAXS Data Viewer

+

SAS Data Viewer

illumine logo ml exchange logo mwet logo diff --git a/frontend/src/utils/connectionHelper.js b/frontend/src/utils/connectionHelper.js index 66f9623..defcfca 100644 --- a/frontend/src/utils/connectionHelper.js +++ b/frontend/src/utils/connectionHelper.js @@ -4,7 +4,7 @@ */ const getWsUrl = () => { const currentWebsiteIP = window.location.hostname; - const pathname = "/viz"; + const pathname = "/ws"; const port = window.location.port; var wsUrl; diff --git a/pyproject.toml b/pyproject.toml index 798d711..9965525 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,38 +8,10 @@ name = "arroyoSAS" version = "0.0.1" description = "A package to perform computations and suggestions during a time-resolved GISAXS experiment." authors = [{ name = "Dylan McReynolds", email = "dmcreynolds@lbl.gov" }] -dependencies = [ - "arroyopy", - "dynaconf", - "python-dotenv", - "pandas", - "msgpack", - "numpy", - "Pillow", - # "bluesky-tiled-plugins", - "pyzmq", - "tqdm", - "typer", - "websockets", - "zarr", - "pyFAI", - "transformers", - "redis", - "tiled[client] @ git+https://github.com/vshekar/tiled@websocket-endpoint" -] +dependencies = [] [project.optional-dependencies] -workflow-viz = [ - "joblib", - "numpy<2.0.0", - "pandas", - "plotly-express", - "pyFAI==2023.9.0", - "python-dotenv", - "pyarrow>=14.0.1", - "requests==2.26.0", - "diskcache==5.6.3", - "scikit-learn==1.3.0"] + dev = [ "fakeredis", @@ -47,7 +19,6 @@ dev = [ "pre-commit", "pytest-asyncio", "pytest-mock", - # "tiled[server] >=0.1.0b14, <0.2" # Installed from websocket-endpoint branch in Dockerfile ] lse = [ @@ -55,6 +26,10 @@ lse = [ "joblib" ] +viz = [ + +] + all = [ "arroyopy", "bluesky", @@ -63,20 +38,19 @@ all = [ "pandas", "msgpack", "numpy", - # "tiled[client] >=0.1.0b14, <0.2", # Installed from websocket-endpoint branch in Dockerfile + "tiled[client] >=0.1.0b14, <0.2", "Pillow", "pyzmq", "tqdm", "typer", "websockets", - # "tiled[client] >=0.1.0b14, <0.2", # Installed from websocket-endpoint branch in Dockerfile "redis", "numpy<2.0.0", "pandas", "python-dotenv", "pyarrow>=14.0.1", + "pyFAI==2025.03", "aiosqlite", - ] [tool.isort] diff --git a/settings_container.yaml b/settings_container.yaml deleted file mode 100644 index e825dc4..0000000 --- a/settings_container.yaml +++ /dev/null @@ -1,17 +0,0 @@ ---- -logging_level: INFO -redis_host: redis -resis_port: 6379 -models: - models_root_dir: /data/models - torch_models: - - name: CNNAutoencoder - checkpoint_dir: /torch/cnnautoencoder - python_class: CNNAutoencoder - - dim_reduction_models: - - name: PCA - dir: /dim_reduction/pca - - # - name: UMAP - # directory: /dim_reduction/umap diff --git a/settings_dev.yaml b/settings_dev.yaml new file mode 100644 index 0000000..5f0d8ea --- /dev/null +++ b/settings_dev.yaml @@ -0,0 +1,23 @@ +--- +logging_level: INFO +redis_host: redis +resis_port: 6379 + +viz_operator: + listeners: + listener: + zmq_address: tcp://tiled_socket:5000 #only safe in containers + + operator: + redis: + host: kvrocks + port: 6666 + + publishers: + websockets: + host: 0.0.0.0 + port: 8021 + tiled: + raw: + uri: https://tiled-dev.nsls2.bnl.gov + api_key: "@format {env[TILED_API_KEY]}" \ No newline at end of file diff --git a/src/arroyosas/app/viz_operator_cli.py b/src/arroyosas/app/viz_operator_cli.py index bc31f48..aad0051 100644 --- a/src/arroyosas/app/viz_operator_cli.py +++ b/src/arroyosas/app/viz_operator_cli.py @@ -8,7 +8,7 @@ from ..config import settings from ..log_utils import setup_logger from ..one_d_reduction.operator import OneDReductionOperator -from ..tiled.tiled_poller import TiledProcessedPublisher +from ..tiled.publisher import Tiled1DResultsPublisher from ..websockets import OneDWSPublisher app = typer.Typer() @@ -22,14 +22,14 @@ async def start(): logger.info("Starting Tiled Poller") logger.info("Getting settings") logger.info(f"{settings.viz_operator}") - operator = OneDReductionOperator.from_settings(app_settings) - tiled_event_publisher = TiledProcessedPublisher.from_settings( - settings.tiled_processed + operator = OneDReductionOperator.from_settings(app_settings.operator) + tiled_event_publisher = Tiled1DResultsPublisher.from_settings( + app_settings.publishers.tiled ) ws_publisher = OneDWSPublisher.from_settings(app_settings.ws_publisher) operator.add_publisher(ws_publisher) operator.add_publisher(tiled_event_publisher) - listener = ZMQFrameListener.from_settings(app_settings.listener, operator) + listener = ZMQFrameListener.from_settings(app_settings.publishers.websockets, operator) await asyncio.gather(listener.start(), ws_publisher.start()) diff --git a/src/arroyosas/one_d_reduction/operator.py b/src/arroyosas/one_d_reduction/operator.py index 5aee943..c6dc7fd 100644 --- a/src/arroyosas/one_d_reduction/operator.py +++ b/src/arroyosas/one_d_reduction/operator.py @@ -25,9 +25,8 @@ class OneDReductionOperator(Operator): - def __init__(self, tiled_client: BaseClient, redis_conn: RedisConn): + def __init__(self, redis_conn: RedisConn): super().__init__() - self.tiled_client = tiled_client self.redis_conn = redis_conn self.current_scan_metadata = None # self.mask = None @@ -163,7 +162,4 @@ def generate_masked_image(image, mask): @classmethod def from_settings(cls, settings) -> "OneDReductionOperator": redis_conn = RedisConn.from_settings(settings.redis) - tiled_client = from_uri( - settings.tiled.raw.uri, api_key=settings.tiled.raw.api_key - ) - return cls(tiled_client, redis_conn) + return cls(redis_conn) diff --git a/src/arroyosas/tiled/publisher.py b/src/arroyosas/tiled/publisher.py new file mode 100644 index 0000000..f965774 --- /dev/null +++ b/src/arroyosas/tiled/publisher.py @@ -0,0 +1,307 @@ +import asyncio +import logging +import os +import re +import time +from datetime import datetime + +import numpy as np +import pandas as pd +import pytz +from arroyopy.publisher import Publisher +from tiled.client import from_uri + +from ..schemas import SAS1DReduction + +logger = logging.getLogger(__name__) + + +class Tiled1DResultsPublisher(Publisher): + """Publisher that saves latent space vectors to a Tiled server.""" + + def __init__(self, tiled_uri, tiled_api_key, root_segments=None): + super().__init__() + self.tiled_uri = tiled_uri + self.tiled_api_key = tiled_api_key + self.root_segments = root_segments or ["1D_live_results"] + self.client = None + self.root_container = None + self.daily_container = None + + logger.info(f"Initialized publisher with UUID-based table grouping") + + async def start(self): + """Connect to Tiled server and initialize containers.""" + try: + # Run the entire initialization in a separate thread + await asyncio.to_thread(self._start_sync) + except Exception as e: + logger.error(f"Failed to initialize Tiled client: {e}") + import traceback + logger.error(traceback.format_exc()) + + def _start_sync(self): + """Synchronous implementation of start() to be run in a thread.""" + try: + self.client = from_uri(self.tiled_uri, api_key=self.tiled_api_key) + + # Navigate to the root container and create the daily run container inside it + self._setup_containers_sync() + + # List all existing tables in the daily container + if self.daily_container is not None: + table_keys = list(self.daily_container) + logger.info(f"Found {len(table_keys)} existing tables in daily container") + + # Add all existing tables to our set of existing UUIDs + self.existing_uuids.update(table_keys) + logger.info(f"Tracking {len(self.existing_uuids)} existing UUIDs") + + # Log some examples of existing UUIDs for debugging + if self.existing_uuids: + examples = list(self.existing_uuids)[:3] + logger.info(f"Examples of existing UUIDs: {', '.join(examples)}") + + logger.info(f"Connected to Tiled server at {self.tiled_uri}") + logger.info(f"Using container path: {'/'.join(self.root_segments)}/{DAILY_RUN_ID}") + except Exception as e: + logger.error(f"Error in _start_sync: {e}") + import traceback + logger.error(traceback.format_exc()) + raise # Re-raise so the async method can catch it + + def _extract_uuid_from_url(self, url): + """Extract UUID from tiled_url.""" + if not url: + return self.default_table_name + + # Log the URL for debugging + logger.debug(f"Extracting UUID from URL: {url}") + + match = re.search(UUID_PATTERN, url) + if match: + uuid = match.group(1) + logger.debug(f"Extracted UUID: {uuid}") + return uuid + + logger.debug(f"No UUID found in URL, using default: {self.default_table_name}") + return self.default_table_name + + def _setup_containers_sync(self): + pass + # """Set up the container structure (synchronous version).""" + # try: + # # Navigate through root_segments + # container = self.client + # for segment in self.root_segments: + # if segment in container: + # logger.info(f"Using existing container: {segment}") + # container = container[segment] + # else: + # logger.info(f"Creating container: {segment}") + # container = container.create_container(segment) + + # # Store reference to the root container + # self.root_container = container + + # # Now create the daily run container inside the root container + # if DAILY_RUN_ID not in self.root_container: + # logger.info(f"Creating daily container: {DAILY_RUN_ID}") + # self.root_container.create_container(DAILY_RUN_ID) + # else: + # logger.info(f"Using existing daily container: {DAILY_RUN_ID}") + + # # Store reference to daily container + # self.daily_container = self.root_container[DAILY_RUN_ID] + + # except Exception as e: + # logger.error(f"Error setting up containers: {e}") + # import traceback + # logger.error(traceback.format_exc()) + # raise # Re-raise to propagate the error + + async def publish(self, message): + """Publish a message to Tiled server.""" + if not isinstance(message, SAS1DReduction): + return + + try: + # Run the entire publish operation in a separate thread + uuid_to_write = await asyncio.to_thread(self._publish_sync, message) + + # If there's a UUID to write, write it + if uuid_to_write: + await self.write_table_to_tiled(uuid_to_write) + + except Exception as e: + logger.error(f"Error publishing to Tiled: {e}") + import traceback + logger.error(traceback.format_exc()) + + def _publish_sync(self, message): + """Synchronous implementation of publish() to be run in a thread.""" + try: + # Ensure daily container exists + if self.daily_container is None: + logger.error("Daily container not initialized, cannot publish") + return None + + # Format vector and metadata + vector = np.array(message.feature_vector, dtype=np.float32) + if vector.ndim == 1: + # Extract UUID from tiled_url + tiled_url = getattr(message, "tiled_url", None) + uuid = self._extract_uuid_from_url(tiled_url) + + # Check if this UUID already exists + if uuid in self.existing_uuids: + logger.debug(f"Skipping vector for existing UUID: {uuid}") + return None + + # Check if this is a new UUID + uuid_to_write = None + + if self.current_uuid is not None and uuid != self.current_uuid and self.current_uuid in self.uuid_dataframes: + # We have a new UUID, so write the data for the previous UUID (if it's not an existing UUID) + if self.current_uuid not in self.existing_uuids and not self.uuid_dataframes[self.current_uuid].empty: + logger.info(f"New UUID detected, marking previous UUID for writing: {self.current_uuid}") + uuid_to_write = self.current_uuid + + # Update current UUID + self.current_uuid = uuid + + # Initialize tracking for this UUID if needed + if uuid not in self.uuid_dataframes: + self.uuid_dataframes[uuid] = pd.DataFrame() + + # Create a record with metadata and the vector + record = { + "tiled_url": tiled_url, + "autoencoder_model": getattr(message, "autoencoder_model", None), + "dimred_model": getattr(message, "dimred_model", None), + "timestamp": getattr(message, "timestamp", time.time()), + "total_processing_time": getattr(message, "total_processing_time", None), + "autoencoder_time": getattr(message, "autoencoder_time", None), + "dimred_time": getattr(message, "dimred_time", None) + } + + # Add vector elements as columns (limit to first 20 to keep it manageable) + for i, val in enumerate(vector[:20]): + record[f"feature_{i}"] = float(val) + + # Append to DataFrame for this UUID + new_row = pd.DataFrame([record]) + self.uuid_dataframes[uuid] = pd.concat([self.uuid_dataframes[uuid], new_row], ignore_index=True) + + logger.debug(f"Added vector to table '{uuid}'") + + return uuid_to_write + else: + logger.warning(f"Received vector with unexpected dimensions: {vector.shape}") + return None + except Exception as e: + logger.error(f"Error in _publish_sync: {e}") + import traceback + logger.error(traceback.format_exc()) + return None + + async def write_table_to_tiled(self, table_key): + """Write the collected vectors for a specific UUID to Tiled.""" + try: + # Run the write operation in a separate thread + await asyncio.to_thread(self._write_table_to_tiled_sync, table_key) + except Exception as e: + logger.error(f"Error in write_table_to_tiled for {table_key}: {e}") + import traceback + logger.error(traceback.format_exc()) + + def _write_table_to_tiled_sync(self, table_key): + """Synchronous implementation of write_table_to_tiled to be run in a thread.""" + try: + # Check if this UUID already exists + if table_key in self.existing_uuids: + logger.info(f"Skipping write for existing UUID: {table_key}") + return + + # Get the DataFrame for this UUID + df = self.uuid_dataframes.get(table_key) + if df is None: + logger.warning(f"No DataFrame found for {table_key}") + return + + # Log DataFrame info for debugging + logger.info(f"Writing {len(df)} vectors to new table '{table_key}'") + + # Check if DataFrame is empty + if df.empty: + logger.warning(f"DataFrame for {table_key} is empty, nothing to write") + return + + # Simply write the DataFrame to Tiled + try: + # Use write_dataframe with the UUID as the key + self.daily_container.write_dataframe(df, key=table_key) + + logger.info(f"Successfully wrote {len(df)} vectors to '{table_key}'") + + # Add this UUID to our set of existing UUIDs + self.existing_uuids.add(table_key) + + # Clear the DataFrame for this UUID + self.uuid_dataframes[table_key] = pd.DataFrame() + + except Exception as e: + logger.error(f"Error writing DataFrame for {table_key}: {e}") + import traceback + logger.error(traceback.format_exc()) + + except Exception as e: + logger.error(f"Error in _write_table_to_tiled_sync for {table_key}: {e}") + import traceback + logger.error(traceback.format_exc()) + + async def stop(self): + """Write any remaining data for new UUIDs before stopping.""" + try: + # Run the stopping operation in a separate thread to get UUID to write + uuid_to_write = await asyncio.to_thread(self._stop_sync) + + # If there's a UUID to write, write it + if uuid_to_write: + logger.info(f"Writing final data for UUID: {uuid_to_write}") + await self.write_table_to_tiled(uuid_to_write) + + logger.info("Publisher stopped") + except Exception as e: + logger.error(f"Error stopping publisher: {e}") + import traceback + logger.error(traceback.format_exc()) + + def _stop_sync(self): + """Synchronous implementation of stop() to be run in a thread. + + Returns: + str or None: UUID that needs to be written, or None if no writing needed + """ + try: + logger.info("Publisher stopping, checking if current UUID needs writing") + + # Check if the current UUID needs writing + if (self.current_uuid is not None and + self.current_uuid not in self.existing_uuids and + self.current_uuid in self.uuid_dataframes and + not self.uuid_dataframes[self.current_uuid].empty): + + return self.current_uuid + + return None + except Exception as e: + logger.error(f"Error in _stop_sync: {e}") + import traceback + logger.error(traceback.format_exc()) + return None + + @classmethod + def from_settings(cls, settings): + """Create a TiledResultsPublisher from settings.""" + return cls(root_segments=settings.get("root_segments")) \ No newline at end of file